{"version":3,"sources":["webpack:///../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisFillCircular.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxis.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxis.ts","webpack:///../../../../../src/.internal/charts/series/XYSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/Cursor.ts","webpack:///../../../../../src/.internal/charts/cursors/XYCursor.ts","webpack:///../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","webpack:///../../../../../src/.internal/charts/types/XYChart.ts","webpack:///../../../../../src/.internal/charts/series/LineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/LineSeries.ts","webpack:///../../../../../src/.internal/charts/series/RadarSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/RadarCursor.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","webpack:///../../../../../src/.internal/charts/types/RadarChart.ts","webpack:///../../../../../src/.internal/charts/elements/ClockHand.ts","webpack:///../../../../../src/.internal/charts/types/GaugeChart.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/PieChart3D.ts","webpack:///../../../../../src/.internal/charts/types/SlicedChart.ts","webpack:///../../../../../src/.internal/charts/elements/ChordNode.ts","webpack:///../../../../../src/.internal/core/elements/QuadraticCurve.ts","webpack:///../../../../../src/.internal/charts/elements/ChordLink.ts","webpack:///../../../../../src/.internal/charts/types/ChordDiagram.ts","webpack:///../../../../../src/.internal/charts/series/ColumnSeries.ts","webpack:///../../../../../src/.internal/charts/series/TreeMapSeries.ts","webpack:///../../../../../src/.internal/charts/types/TreeMap.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","webpack:///../../../../../src/.internal/charts/series/ColumnSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/XYChart3D.ts","webpack:///../../../../../src/.internal/charts/elements/Candlestick.ts","webpack:///../../../../../src/.internal/charts/series/CandlestickSeries.ts","webpack:///../../../../../src/.internal/charts/elements/OHLC.ts","webpack:///../../../../../src/.internal/charts/series/OHLCSeries.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeries.ts","webpack:///../../../../../src/.internal/charts/elements/RadarColumn.ts","webpack:///../../../../../src/.internal/charts/series/RadarColumnSeries.ts","webpack:///../../../../../src/.internal/charts/series/PyramidSeries.ts","webpack:///../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","webpack:///../../../../../src/.internal/charts/elements/ConeColumn.ts","webpack:///../../../../../src/.internal/charts/series/ConeSeries.ts","webpack:///../../../../../src/.internal/charts/elements/CurvedColumn.ts","webpack:///../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","webpack:///../../../../../src/.internal/charts/axes/DurationAxis.ts","webpack:///../../../../../src/.internal/charts/elements/CircleBullet.ts","webpack:///../../../../../src/.internal/charts/elements/ErrorBullet.ts","webpack:///../../../../../src/.internal/charts/elements/NavigationBar.ts","webpack:///./charts.js","webpack:///../../../../../src/.internal/charts/axes/GridCircular.ts"],"names":["__webpack_require__","d","__webpack_exports__","AxisRendererCircular","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_1__AxisRenderer__","__WEBPACK_IMPORTED_MODULE_2__AxisFillCircular__","__WEBPACK_IMPORTED_MODULE_3__GridCircular__","__WEBPACK_IMPORTED_MODULE_4__AxisLabelCircular__","__WEBPACK_IMPORTED_MODULE_5__core_Registry__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Percent__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_8__core_rendering_Path__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_10__core_utils_Type__","_super","_this","call","this","pixelRadiusReal","layout","className","isMeasured","startAngle","endAngle","useChartAngles","radius","Object","grid","template","location","labels","ticks","pixelPerfect","tooltipLocation","line","strokeOpacity","applyTheme","prototype","setAxis","axis","tooltip","adapter","add","x","target","point","pixelX","y","pixelY","pixelRadius","Math","cos","atan2","sin","validate","chart","invalid","defineProperty","PI","getPropertyValue","value","setPercentProperty","invalidate","setPropertyValue","innerRadius","positionToPoint","position","coordinate","positionToCoordinate","angle","axisLength","positionToAngle","arc","end","start","renderer","inversed","updateAxisLine","path","updateGridElement","endPosition","element","gridInnerRadius","zIndex","toggleVisibility","updateTickElement","tick","tickLength","length","inside","updateLabelElement","label","fixPosition","minLabelPosition","maxLabelPosition","fitsToBounds","invalidateAxisItems","invalidateSeries","getPositionRangePath","startPosition","cornerRadius","pixelInnerRadius","createGrid","createFill","createLabel","pointToPosition","coordinateToPosition","registeredClasses","AxisFillCircular","paper","__WEBPACK_IMPORTED_MODULE_2__core_utils_Percent__","draw","fillPath","__WEBPACK_IMPORTED_MODULE_4__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_1__AxisFill__","__WEBPACK_IMPORTED_MODULE_3__core_Registry__","DateAxisBreak_DateAxisBreak","DateAxisBreak","tslib_es6","startValue","getTime","endValue","ValueAxisBreak","Registry","DateAxis_DateAxisDataItem","DateAxisDataItem","values","date","endDate","dates","setDate","ValueAxis","DateAxis_DateAxis","DateAxis","gridIntervals","List","dateFormats","Dictionary","periodChangeDateFormats","_baseIntervalReal","timeUnit","count","_minDifference","snapTooltip","pushAll","axisFieldName","fillRule","dataItem","component","gridInterval","_gridInterval","gridDuration","Time","round","min","axisFill","__disabled","applyInternalDefaults","hasKey","setKey","language","translate","createDataItem","createAxisBreak","validateDataItems","periodCount","max","baseDuration","maxZoomFactor","zoom","handleSelectionExtremesChange","calculateZoom","chooseInterval","adjustDifference","_minZoomed","_maxZoomed","_gridCount","baseInterval","_gridDate","Date","getFirstWeekDay","_nextGridUnit","_intervalDuration","ceil","_difference","floor","Iterator","series","iterator","baseAxis","field_1","getAxisField","startIndex","dataItems","findClosestIndex","maxZoomed","endIndex","validateData","Type","minDifference","Number","MAX_VALUE","each","uid","seriesDataChangeUpdate","postProcessSeriesDataItems","JSON","stringify","_baseInterval","postProcessSeriesDataItem","addEmptyUnitsBreaks","dataItemsByAxis","getKey","utils_Object","key","time","getDate","startTime","setCalculatedValue","toString","skipEmptyPeriods","axisBreaks","clear","axisBreak","startTimeStr","this_1","undefined","create","startDate","fixAxisBreaks","breakGridCount","adjustedEndValue","adjustedStartValue","gridDate","dateFormatter","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","breakSize","timeUnit_1","intervalCount_1","utils_Math","startPoint","endPoint","minGridDistance","prevGridDate_1","timestamp_1","text_1","moveValue","adjustedMax","endTimestamp","valueToPosition","fillEndPosition","isRange","disabled","fill","updateFillElement","mask","location_1","adjustMinMax","step","fixMin","startLocation","fixMax","endLocation","index","duration","gridCount","getIndex","intervalDuration","lastIndex","formatLabel","dateToPosition","anyToPosition","dateToPoint","anyToPoint","valueToPoint","positionToDate","positionToValue","getX","getTimeByLocation","baseValue","getY","stack","getValue","getAngle","stackKey","workingLocations","endTime","processSeriesDataItem","axisLetter","openTime","openDate","prevSeriesTime","_prevSeriesTime","difference","abs","differece","updateAxisBySeries","timeInterval","invalidateData","breakTemplate","startLine","endLine","fillShape","getTooltipText","tooltipDateFormat","dateFormat","getPositionLabel","apply","roundPosition","getCellStartPosition","getCellEndPosition","getSeriesDataItem","findNearest","key_1","getCurrentLabelFormat","initRenderer","baseGrid","zoomToDates","skipRangeEvent","instantly","parse","zoomToValues","asIs","field","copyFrom","source","showTooltipAtPosition","local","toAxisPosition","closestDate_1","actualTime_1","xAxis","dateX","yAxis","dateY","closestTime_1","seriesPoints_1","showTooltipAtDataItem","push","hideTooltip","sortSeriesTooltips","CategoryAxisBreak_CategoryAxisBreak","CategoryAxisBreak","indexToPosition","invalidateDataItems","category","categoryToIndex","AxisBreak","CategoryAxis_CategoryAxisDataItem","CategoryAxisDataItem","Adapter","locations","endCategory","isEnabled","properties","setProperty","Axis","CategoryAxis_CategoryAxis","CategoryAxis","dataItemsByCategory","_lastDataItem","_disposers","validateDataRange","_series","invalidateDataRange","firstSeriesDataItem","lastSeriesDataItem","positionToIndex","i","fdi","getFirstSeriesDataItem","ldi","getLastSeriesDataItem","dataCount","maxCount","frequency","_startIndex","_endIndex","_frequency","itemIndex","len","frequency_1","itemIndex_1","b","validateBreaks","validateAxisRanges","ghostLabel","invalidateLayout","fillEndIndex","fillPosition","measuredWidth","measuredHeight","currentText","processDataItem","dataContext","existingDataItem","remove","breakStartIndex","breakEndIndex","categoryToPosition","categoryToPoint","zoomToCategories","startCategory","zoomToIndexes","getAnyRangePath","startPos","endPos","categoryX","categoryY","index_1","sdi_1","category_1","seriesDataItem","categories","basePoint","breakStartPosition","breakEndPosition","breakPosition","XYSeries_XYSeriesDataItem","XYSeriesDataItem","valueX","valueY","openValueX","openValueY","openDateX","openDateY","setLocation","setValue","setCategory","openCategoryX","openCategoryY","getMin","fields","working","stackValue","utils_Array","getWorkingValue","getMax","Series","XYSeries_XYSeries","XYSeries","_xAxis","Disposer","_yAxis","_xValueFields","_yValueFields","cursorTooltipEnabled","mainContainer","Sprite","setElement","stacked","pointerOrientation","events","on","returnBulletDefaultState","readerTitle","dataChangeUpdate","_tmin","_tmax","_smin","_smax","defineFields","data","updateItemReaderText","dataFields","_xField","_yField","Error","name","disable","enable","setInitialWorkingValues","e","_chart","raiseCriticalError","disposeData","dataItemsX","dataItemsY","xAxisFieldName","xField","xOpenField","Utils","yAxisFieldName","yField","yOpenField","_xOpenField","_yOpenField","addValueField","indexOf","setCategoryAxisField","setDateAxisField","afterDraw","createMask","path_1","getMaskPath","axisRanges","range","Path","width","height","dataRangeInvalid","_showBullets","minBulletDistance","get","xAxes","oldAxis","removeKey","dispose","removeValue","set","registerSeries","yAxes","_baseAxis","processValues","minX","Infinity","maxX","minY","maxY","getStackValue","stackX","stackY","processSeriesDataItems","xAxisId","yAxisId","stackedSeries","dispatchImmediately","appeared","_prevTooltipDataItem","xPosition","yPosition","visible","isHiding","isShowing","tooltipText","updateLegendValue","tooltipDataItem","tooltipXField","tooltipYField","tooltipPoint","getPoint","tooltipX","tooltipY","type","_a","bullets","_b","next","done","isHover","showTooltip","bullet","isDisposed","positionBullet","hasValue","bulletLocationX","getBulletLocationX","bulletLocationY","getBulletLocationY","locationX","locationY","moveTo","bulletLocation","show","anim","delay","interpolationDuration","defaultState","transitionDuration","a","sequencedInterpolation","sequencedInterpolationDelay","animation","isFinished","hide","minZoomed","hiddenState","validateDataElements","handleDataItemWorkingValueChange","axisSeries","invalidateProcessedData","backwards","prevSeries","prevDataItem","prevValue","_tooltipXField","_tooltipYField","selectionMin","selectionMax","processConfig","config","map","processingErrors","xKey","yKey","stackKeyX","stackKeyY","val","itemReaderText","Cursor_Cursor","Cursor","_stick","Percent","shouldClone","trackable","clickable","interaction","Interaction","body","handleCursorDown","handleCursorUp","handleCursorMove","event","interactionsEnabled","_generalBehavior","downPoint","isLocalElement","pointer","svg","_stickPoint","triggerMove","isHidden","hideReal","stick","triggerMoveReal","invalidatePosition","getPositions","dispatch","triggerDown","triggerDownReal","setGlobalStyle","Mouse","grabbing","triggerUp","triggerUpReal","updatePoint","upPoint","_upPointOrig","_downPointOrig","getHitOption","interactions","default","updateSelection","innerWidth","innerHeight","cancelable","preventDefault","plotContainer","lockElement","Container","XYCursor_XYCursor","XYCursor","_lineX","_lineY","behavior","maxPanOut","interfaceColors","InterfaceColorSet","selection","createChild","fillOpacity","getFor","lineX","stroke","Color","strokeDasharray","lineY","updateSize","_usesSelection","w","_positionPrecision","h","pixelHeight","pixelWidth","validatePosition","fixPoint","snapToSeries","updateLinePositions","getPanningRanges","selectionX","selectionY","getRanges","startX","startY","deltaX","deltaY","xRange","yRange","endX","endY","handleXTooltipPosition","handleYTooltipPosition","fullWidthLineX","currentItemStartPoint","currentItemEndPoint","fullWidthLineY","parent","reset","_selection","_snapToDisposer","handleSnap","opposite","xx","yy","animationDuration","easing","animationEasing","animate","property","to","XYChartScrollbar_XYChartScrollbar","XYChartScrollbar","padding","scrollbarChart","XYChart_XYChart","margin","_scrollbarChart","minHeight","minWidth","unselectedOverlay","toBack","_unselectedOverlay","background","thumbBackground","thumb","hoverState","states","downState","handleSeriesAdded","handleSeriesRemoved","sourceSeries","newValue","zoomOutButton","addXAxis","addYAxis","clone","title","rangeChangeDuration","id","axisFills","showOnInit","zoomOutAxes","filters","DesaturateFilter","updateByOrientation","orientation","clonedFrom","oldValue","off","handleDataChanged","dataProvider","updateThumb","Scrollbar","XYChart_XYChartDataItem","XYChartDataItem","SerialChart","XYChart","_axisRendererX","AxisRendererX","_axisRendererY","AxisRendererY","maskBullets","arrangeTooltips","chartContainer","topAxesCont","topAxesContainer","yAxesAndPlotCont","yAxesAndPlotContainer","bottomAxesCont","bottomAxesContainer","leftAxesCont","contentAlign","updateXAxesMargins","leftAxesContainer","plotCont","mouseWheelBehavior","_cursorContainer","rightAxesCont","rightAxesContainer","seriesContainer","bulletsContainer","ZoomOutButton","align","valign","MAX_SAFE_INTEGER","marginTop","marginRight","_bulletMask","exportable","toFront","updateSeriesLegend","updatePlotElements","_parseDataFrom","leftAxesWidth","rightAxesWidth","paddingLeft","paddingRight","handleXAxisChange","updateXAxis","handleYAxisChange","updateYAxis","processXAxis","observe","handleXAxisRangeChange","processAxis","processYAxis","handleYAxisRangeChange","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","seriesAppeared","scrollbarY","scrollbar","skipRangeEvents","axes","axisStart","axisEnd","processRenderer","_dataUsers","gridContainer","breakContainer","addDisposer","dataUsers","inited","_xAxes","handleAxisRemoval","autoDispose","_yAxes","removeFromInvalidComponents","dataInvalid","colors","_cursor","cursor","removeDispose","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","createCursor","showSeriesTooltip","exceptAxis","showAxisTooltip","hideObjectTooltip","sprites","sprite","seriesPoints","setBounds","topLeft","bottomRight","sum","filteredSeriesPoints","seriesPoint","sort","averageY","svgContainer","SVGContainer","top_1","bottom","dropped","nextHeight","pointY","pixelMarginTop","nextY","pixelMarginBottom","except","getUpdatedRange","priority","_panStartXRange","_panStartYRange","_panEndXRange","delta","panEndRange","_panEndYRange","panStartRange","axisRange","newStart","newEnd","newRange","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","arg","_scrollbarY","handleYScrollbarChange","fixRange","declination","realRange","diff","handleWheel","svgPoint","htmlContainer","cssScale","plotPoint","shift","rangeX","rangeY","differenceX","newStartX","newEndX","differenceY","newStartY","newEndY","maxWidth","maxHeight","_mouseWheelDisposer","wheelable","hoverable","dataSourceDateFields","populateDataSourceFields","dataSourceNumberFields","configOrder","createSeries","_zoomOutButton","button","addData","rawDataItem","removeCount","LineSeriesSegment_LineSeriesSegment","LineSeriesSegment","fillSprite","strokeSprite","drawSegment","points","closePoints","smoothnessX","smoothnessY","Smoothing","smooth","lineElement","fillElement","LineSeries_LineSeriesDataItem","LineSeriesDataItem","LineSeries_LineSeries","LineSeries","minDistance","segments","createSegment","applyOnClones","_segmentsIterator","createNewItems","connect","tensionX","tensionY","segmentsContainer","previousDataItem","initialY","workingValue","setWorkingValue","setWorkingLocation","initialX","segment","tooltipColorSource","openSegmentWrapper","_adjustedStartIndex","sliceData","findAdjustedIndex","_workingStartIndex","_workingEndIndex","adjustedIndex","propertyFields","openIndex","params","openSegment","closeIndex","propertiesChanged","getFirst","contents","hasProperties","updateSegmentProperties","addPoints","closeSegment","itemProperties","checkOnly","changed","propertyName","currentValue","currentValueStr","valueStr","createLegendMarker","marker","disposeChildren","Line","x2","Rectangle","legendDataItem","color","colorOrig","copyToLegendMarker","hasLabels_1","children","child","Label","RadarSeries_RadarSeriesDataItem","RadarSeriesDataItem","RadarSeries_RadarSeries","RadarSeries","connectEnds","unshift","RadarCursor_RadarCursor","RadarCursor","truePixelRadius","updateLineX","updateLineY","fillStartAngle","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","upAngle","upRadius","innerRadiusModifyer","AxisRendererRadial_AxisRendererRadial","AxisRendererRadial","gridType","axisAngle","horizontalCenter","verticalCenter","rotation","gridLocation","count_1","cellEndLocation","positionItem","updateBaseGridElement","count_2","updateBreakElement","createBreakSprites","WavedCircle","updateTooltip","tooltipOrientation","bigNum","axisFullLength","RadarChart_RadarChartDataItem","RadarChartDataItem","RadarChart_RadarChart","RadarChart","radarContainer","Circle","opacity","beforeDraw","rect","innerRect","wr","hr","mr","maxRadius","diameter","_pixelInnerRadius","definedBBox","ClockHand_ClockHand","ClockHand","_axis","pin","startWidth","endWidth","hand","Trapezoid","leftSide","rightSide","x0","x1","_pin","_hand","showValue","_value","newAngle","currentAngle","rotationDirection","updateValue","GaugeChart_GaugeChartDataItem","GaugeChartDataItem","GaugeChart_GaugeChart","GaugeChart","hands","processHand","PieSeries3D_PieSeries3DDataItem","PieSeries3DDataItem","depthValue","PieSeries","PieSeries3D_PieSeries3D","PieSeries3D","createSlice","Slice3D","slice","depth","depthPercent","percent","PieChart3D_PieChart3DDataItem","PieChart3DDataItem","PieChart","PieChart3D_PieChart3D","PieChart3D","invalidateDataUsers","SlicedChart_SlicedChartDataItem","SlicedChartDataItem","PercentChart","SlicedChart_SlicedChart","SlicedChart","ChordNode_ChordNode","ChordNode","AxisLabelCircular","updateRotation","Slice","setStateOnChildren","ix","iy","invalidateLinks","total","arc_1","sliceStartAngle_1","Bullet","childAngle","childRadius","labelAngle","adjustedTotal","nextAngle","_outgoingSorted","link","linksContainer","nonRibbon","percentWidth","valueAngle","toNode","_incomingSorted","fromNode","mAngle","trueStartAngle","tx","ty","dx","dy","FlowDiagramNode","QuadraticCurve_QuadraticCurve","QuadraticCurve","y1","y2","cpx","cpy","p1","p2","cp","point1","point2","ChordLink_ChordLink","ChordLink","middleLine","isTemplate","fromX","fromY","toX","toY","bulletsMask","mAngle1","mAngle2","positionBullets","FlowDiagramLink","ChordDiagram_ChordDiagramDataItem","ChordDiagramDataItem","FlowDiagram","ChordDiagram_ChordDiagram","ChordDiagram","nodePadding","chordContainer","nodesContainer","newTotal","_sorted","strNode","node","getNodeValue","minNodeSize","links","createNode","createLink","ColumnSeries_ColumnSeriesDataItem","ColumnSeriesDataItem","_column","column","setColumn","addSprite","columns","_rangesColumns","ColumnSeries_ColumnSeries","ColumnSeries","_startLocation","_endLocation","clustered","columnsContainer","_columnsContainer","baseAxisSeries","clusterCount","cellStartLocation","disableUnusedColumns","validateDataElementReal","getStartLocation","simplifiedProcessing","getEndLocation","l","r","t","percentHeight","pixelPaddingLeft","pixelPaddingRight","paddingTop","pixelPaddingTop","paddingBottom","pixelPaddingBottom","outOfBounds","offset","fixHorizontalCoordinate","fixVerticalCoordinate","bottomLocation","topLocation","axisLenght","rightLocation","leftLocation","column_1","itemsFocusable","role","focusable","once","ev","populateString","realX","realY","realWidth","realHeight","virtualParent","setColumnStates","rangeColumn","rangesColumns","itemWidth","itemHeight","open_1","change","droppedFromOpen","_dropFromOpenState","setState","_riseFromOpenState","droppedFromPrevious","_dropFromPreviousState","_riseFromPreviousState","_columns","createColumnTemplate","Column","fromOpenState_1","fromPreviousState_1","removeChildren","RoundedRectangle","TreeMapSeries_TreeMapSeriesDataItem","TreeMapSeriesDataItem","treeMapDataItem","_dataContext","TreeMapSeries_TreeMapSeries","TreeMapSeries","configField","showReal","TreeMap_TreeMapDataItem","TreeMapDataItem","rows","y0","hasChildren","getDuration","childValue","level","TreeMap_TreeMap","TreeMap","layoutAlgorithm","squarify","zoomable","maxLevels","currentLevel","ColorSet","sorting","strictMinMax","xRenderer","yRenderer","seriesTemplates","zoomToChartDataItem","_homeDataItem","_navigationBar","navigationBar","createTreeSeries","homeDataItem","_homeText","layoutItems","_updateDataItemIndexes","_tempSeries","navigationData","parentDataItem","initSeries","reverse","createTreeSeriesReal","cursorOverStyle","zoomToSeriesDataItem","toggleBullets","currentlyZoomed","rangeChangeAnimation","_dataDisposers","binaryTree","dice","sliceDice","validateLayout","validateRawData","nodes","n","sums","Array","partition","j","valueOffset","valueTarget","k","hi","mid","valueLeft","valueRight","xk","yk","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","ratio","sqrt","i0","i1","row","handleDataItemValueChange","feedLegend","legend","legendData_1","hiddenInLegend","AxisRendererX3D_AxisRendererX3D","AxisRendererX3D","dx3D","dy3D","getHeight","handle3DChanged","AxisRendererY3D_AxisRendererY3D","AxisRendererY3D","getWidth","ColumnSeries3D_ColumnSeries3DDataItem","ColumnSeries3DDataItem","ColumnSeries3D_ColumnSeries3D","ColumnSeries3D","column3D","Column3D","XYChart3D_XYChart3DDataItem","XYChart3DDataItem","XYChart3D_XYChart3D","XYChart3D","fixLayout","fixColumns","depthIndex","s","i_1","maskColumns","Candlestick_Candlestick","Candlestick","createAssets","lowLine","highLine","CandlestickSeries_CandlestickSeriesDataItem","CandlestickSeriesDataItem","lowValueX","lowValueY","highValueX","highValueY","CandlestickSeries_CandlestickSeries","CandlestickSeries","positiveColor","negativeColor","dropFromOpenState","riseFromOpenState","validateCandlestick","lowLine_1","highLine_1","close_1","yOpen","yClose","yLow","yLowField","yHigh","yHighField","open_2","close_2","xOpen","xClose","xLow","xLowField","xHigh","xHighField","rangeLowLine","rangehighLine","_xLowField","_yLowField","_xHighField","_yHighField","cw","ch","OHLC_OHLC","OHLC","openLine","highLowLine","closeLine","OHLCSeries_OHLCSeriesDataItem","OHLCSeriesDataItem","OHLCSeries_OHLCSeries","OHLCSeries","openLine_1","highLowLine_1","closeLine_1","rangeOpenLine","rangeCloseLine","rangeHighLowLine","StepLineSeriesSegment_StepLineSeriesSegment","StepLineSeriesSegment","noRisers","vertical","StepLineSeries_StepLineSeriesDataItem","StepLineSeriesDataItem","StepLineSeries_StepLineSeries","StepLineSeries","prevPoint","point0","RadarColumn_RadarColumn","RadarColumn","radarColumn","getTooltipX","getTooltipY","RadarColumnSeries_RadarColumnSeriesDataItem","RadarColumnSeriesDataItem","RadarColumnSeries_RadarColumnSeries","RadarColumnSeries","lAngle","rAngle","tRadius","bRadius","cellAngle","temp","PyramidSeries_PyramidSeriesDataItem","PyramidSeriesDataItem","FunnelSeries","PyramidSeries_PyramidSeries","PyramidSeries","topWidth","bottomWidth","pyramidHeight","valueIs","sliceLinks","_nextWidth","getNextValue","nextValue","slicesContainer","relValue","sliceLink","_pyramidHeight","_pyramidWidth","labelsContainer","ticksContainer","decorateSlice","pyramidWidth","linkWidth","linkHeight","sliceTopWidth","c","tan","sliceHeight","sliceBottomWidth","square","_nextY","alignLabels","sliceWidth","PictorialStackedSeries_PictorialStackedSeriesDataItem","PictorialStackedSeriesDataItem","PictorialStackedSeries_PictorialStackedSeries","PictorialStackedSeries","_maskSprite","maskSprite","pictureWidth","scale","pictureHeight","newWidth","newHeight","slices","initSlice","hs","expandDistance","ConeColumn_ConeColumn","ConeColumn","coneColumn","Cone","ConeSeries_ConeSeriesDataItem","ConeSeriesDataItem","ConeSeries_ConeSeries","ConeSeries","radiusY","CurvedColumn_CurvedColumn","CurvedColumn","curvedColumn","tension","CurvedColumnSeries_CurvedColumnSeriesDataItem","CurvedColumnSeriesDataItem","CurvedColumnSeries_CurvedColumnSeries","CurvedColumnSeries","DurationAxis_DurationAxisDataItem","DurationAxisDataItem","DurationAxis_DurationAxis","DurationAxis","_baseUnit","durationFormatter","axisDurationFormat","strictMode","minMaxStep","baseUnit","initialMin","initialMax","divisors","realDivisor","divisors_1","divisors_1_1","divisor","exponent","log","LOG10E","power","pow","reducedCount","getValueUnit","getFormat","_tooltipDurationFormat","_stepDecimalPlaces","tooltipDurationFormat","CircleBullet_CircleBullet","CircleBullet","circle","ErrorBullet_ErrorBullet","ErrorBullet","errorLine","isDynamic","NavigationBar_NavigationBarDataItem","NavigationBarDataItem","DataItem","NavigationBar_NavigationBar","NavigationBar","textLink","TextLink","_linksIterator","triangle","Triangle","direction","marginLeft","separators","activeLink","fontWeight","getLast","separator","Component","window","am4charts","charts_namespaceObject","GridCircular","__WEBPACK_IMPORTED_MODULE_1__Grid__","__WEBPACK_IMPORTED_MODULE_2__core_Registry__"],"mappings":"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","file":"charts.js","sourcesContent":["/**\r\n * Module, defining Axis Renderer for circular axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRenderer, IAxisRendererProperties, IAxisRendererAdapters, IAxisRendererEvents } from \"./AxisRenderer\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisFillCircular } from \"./AxisFillCircular\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { GridCircular } from \"./GridCircular\";\r\nimport { AxisLabelCircular } from \"./AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularProperties extends IAxisRendererProperties {\r\n\r\n\t/**\r\n\t * Start angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Outer radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Specifies if axis should use it's own start/end angles or the ones set on chart.\r\n\t */\r\n\tuseChartAngles?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularEvents extends IAxisRendererEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererCircularAdapters extends IAxisRendererAdapters, IAxisRendererCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for circular axis.\r\n */\r\nexport class AxisRendererCircular extends AxisRenderer {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererCircularEvents;\r\n\r\n\t/**\r\n\t * Defines type of the grid elements.\r\n\t */\r\n\tpublic _gridType: GridCircular;\r\n\r\n\t/**\r\n\t * Defines type for the fill elements.\r\n\t */\r\n\tpublic _fillType: AxisFillCircular;\r\n\r\n\t/**\r\n\t * Defines type for the label elements.\r\n\t */\r\n\tpublic _labelType: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\t// axis.layout = \"none\"; // does not trigger redraw when size changes\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.className = \"AxisRendererCircular\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.useChartAngles = true;\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.grid.template.location = 0;\r\n\r\n\t\tthis.labels.template.location = 0;\r\n\t\tthis.labels.template.radius = 15;\r\n\r\n\t\tthis.ticks.template.location = 0;\r\n\t\tthis.ticks.template.pixelPerfect = false;\r\n\t\tthis.tooltipLocation = 0;\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t* @ignore\r\n\t*/\r\n\tpublic setAxis(axis: Axis) {\r\n\t\tsuper.setAxis(axis);\r\n\t\taxis.isMeasured = false;\r\n\r\n\t\t// modify x and y so that tooltip would always be on circle\r\n\t\tlet tooltip = axis.tooltip;\r\n\r\n\t\ttooltip.adapter.add(\"dx\", (x, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.cos(Math.atan2(point.y, point.x)) - point.x;\r\n\t\t});\r\n\r\n\t\ttooltip.adapter.add(\"dy\", (y, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.sin(Math.atan2(point.y, point.x)) - point.y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn 2 * Math.PI * this.pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"innerRadius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if axis should use its own `startAngle` and `endAngle` or\r\n\t * inherit them from relative properties from chart.\r\n\t *\r\n\t * @default false\r\n\t * @param value Use chart's angles\r\n\t */\r\n\tpublic set useChartAngles(value: boolean) {\r\n\t\tthis.setPropertyValue(\"useChartAngles\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use chart angles\r\n\t */\r\n\tpublic get useChartAngles(): boolean {\r\n\t\treturn this.getPropertyValue(\"useChartAngles\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet coordinate: number = this.positionToCoordinate(position);\r\n\t\tlet angle: number = this.startAngle + (this.endAngle - this.startAngle) * coordinate / this.axisLength;\r\n\t\treturn { x: this.pixelRadius * $math.cos(angle), y: this.pixelRadius * $math.sin(angle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position (0-1) on axis to angle in degrees (0-360).\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic positionToAngle(position: number): number {\r\n\t\tlet axis: Axis = this.axis;\r\n\r\n\t\tlet arc: number = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n\r\n\t\tlet angle: number;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tangle = this.startAngle + (axis.end - position) * arc;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tangle = this.startAngle + (position - axis.start) * arc;\r\n\t\t}\r\n\r\n\t\treturn $math.round(angle, 3);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\t\tthis.line.path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius, radius);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid Grid element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: GridCircular, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet radius: number = $utils.relativeRadiusToValue($type.hasValue(grid.radius) ? grid.radius : percent(100), this.pixelRadius);\r\n\r\n\t\t\tlet gridInnerRadius = $utils.relativeRadiusToValue(grid.innerRadius, this.pixelRadius);\r\n\t\t\tgrid.zIndex = 0;\r\n\r\n\t\t\tlet innerRadius: number = $utils.relativeRadiusToValue($type.isNumber(gridInnerRadius) ? gridInnerRadius : this.innerRadius, this.pixelRadius, true);\r\n\t\t\tgrid.path = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick Tick element\r\n\t * @param position Starting position\r\n\t * @param endPosition End position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number, endPosition: number) {\r\n\r\n\t\tposition = position + (endPosition - position) * tick.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (tick.element) {\r\n\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet tickLength: number = tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength = -tickLength;\r\n\t\t\t}\r\n\t\t\ttick.zIndex = 1;\r\n\t\t\ttick.path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) }) + $path.lineTo({ x: (radius + tickLength) * $math.cos(angle), y: (radius + tickLength) * $math.sin(angle) });\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label Label element\r\n\t * @param position Starting position\r\n\t * @param endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlabel.fixPosition(this.positionToAngle(position), this.pixelRadius);\r\n\t\tlabel.zIndex = 2;\r\n\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition Starting position\r\n\t * @param endPosition End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number, radius?: number | Percent, innerRadius?: number | Percent, cornerRadius?: number): string {\r\n\t\tlet path: string = \"\";\r\n\t\tif ($type.isNumber(startPosition) && $type.isNumber(endPosition)) {\r\n\r\n\t\t\tif (!$type.hasValue(radius)) {\r\n\t\t\t\tradius = this.radius;\r\n\t\t\t}\r\n\r\n\t\t\tstartPosition = $math.max(startPosition, this.axis.start);\r\n\t\t\tendPosition = $math.min(endPosition, this.axis.end);\r\n\r\n\t\t\tif (endPosition < startPosition) {\r\n\t\t\t\tendPosition = startPosition;\r\n\t\t\t}\r\n\r\n\t\t\tlet pixelRadius: number = $utils.relativeRadiusToValue(radius, this.pixelRadius);\r\n\t\t\tlet pixelInnerRadius: number = $utils.relativeRadiusToValue(innerRadius, this.pixelRadius, true);\r\n\r\n\t\t\tlet startAngle: number = this.positionToAngle(startPosition);\r\n\t\t\tlet endAngle: number = this.positionToAngle(endPosition);\r\n\r\n\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\tpath = $path.arc(startAngle, arc, pixelRadius, pixelInnerRadius, pixelRadius, cornerRadius);\r\n\t\t}\r\n\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new grid element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Grid element\r\n\t */\r\n\tpublic createGrid(): this[\"_gridType\"] {\r\n\t\treturn new GridCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new fill element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Fill element\r\n\t */\r\n\tpublic createFill(axis: Axis): this[\"_fillType\"] {\r\n\t\treturn new AxisFillCircular(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new label element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Label element\r\n\t */\r\n\tpublic createLabel(): this[\"_labelType\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet angle = $math.fitAngleToRange($math.getAngle(point), this.startAngle, this.endAngle);\r\n\t\treturn this.coordinateToPosition((angle - this.startAngle) / 360 * this.axisLength);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererCircular\"] = AxisRendererCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisFill, IAxisFillProperties, IAxisFillAdapters, IAxisFillEvents } from \"./AxisFill\";\r\nimport { 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 * 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 { 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\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());\r\n\t\tthis._nextGridUnit = $time.getNextUnit(gridInterval.timeUnit);\r\n\r\n\t\t// the following is needed to avoid grid flickering while scrolling\r\n\t\tthis._intervalDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\t\tlet count: number = Math.ceil(this._difference / this._intervalDuration);\r\n\t\tcount = Math.floor(this.start * count) - 3; // some extra is needed\r\n\r\n\t\t$time.add(this._gridDate, gridInterval.timeUnit, count * gridInterval.count);\r\n\r\n\t\t// tell series start/end\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\tlet field = series.getAxisField(this);\r\n\r\n\t\t\t\t// TODO use $type.castNumber ?\r\n\t\t\t\tlet startIndex: number = series.dataItems.findClosestIndex(this._minZoomed, (x) => x[field], \"left\");\r\n\t\t\t\t// 1 millisecond is removed so that if only first item is selected, it would not count in the second.\r\n\t\t\t\tlet baseInterval = this.baseInterval;\r\n\t\t\t\tlet maxZoomed = $time.add($time.round(new Date(this._maxZoomed), baseInterval.timeUnit, baseInterval.count), baseInterval.timeUnit, baseInterval.count).getTime() - 1;\r\n\r\n\t\t\t\tlet endIndex: number = series.dataItems.findClosestIndex(maxZoomed, (x) => x[field], \"right\") + 1;\r\n\r\n\t\t\t\tseries.startIndex = startIndex;\r\n\t\t\t\tseries.endIndex = endIndex;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tsuper.validateData();\r\n\t\tif (!$type.isNumber(this.baseInterval.count)) {\r\n\t\t\tthis.baseInterval.count = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get minDifference(): number {\r\n\t\tvar minDifference = Number.MAX_VALUE;\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (minDifference > this._minDifference[series.uid]) {\r\n\t\t\t\tminDifference = this._minDifference[series.uid];\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (minDifference == Number.MAX_VALUE || minDifference == 0) {\r\n\t\t\tminDifference = $time.getDuration(\"day\");\r\n\t\t}\r\n\r\n\t\treturn minDifference;\r\n\t}\r\n\r\n\t/**\r\n\t * [dataChangeUpdate description]\r\n\t *\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic seriesDataChangeUpdate(series: XYSeries): void {\r\n\t\tthis._minDifference[series.uid] = Number.MAX_VALUE;\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItems description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic postProcessSeriesDataItems(): void {\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (JSON.stringify(series._baseInterval[this.uid]) != JSON.stringify(this.baseInterval)) {\r\n\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t\t});\r\n\t\t\t\tseries._baseInterval[this.uid] = this.baseInterval;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.addEmptyUnitsBreaks();\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItem description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic postProcessSeriesDataItem(dataItem: XYSeriesDataItem): void {\r\n\t\t// we need to do this for all series data items not only added recently, as baseInterval might change\r\n\t\tlet baseInterval: ITimeInterval = this.baseInterval;\r\n\r\n\t\tlet series: XYSeries = dataItem.component;\r\n\t\tlet dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n\r\n\t\t$object.each(dataItem.dates, (key) => {\r\n\t\t\tlet date: Date = dataItem.getDate(key);\r\n\t\t\tlet time = date.getTime();\r\n\r\n\t\t\tlet startDate: Date = $time.round(new Date(time), baseInterval.timeUnit, baseInterval.count, this.getFirstWeekDay());\r\n\t\t\tlet startTime = startDate.getTime();\r\n\t\t\tlet endDate: Date = $time.add(new Date(startTime), baseInterval.timeUnit, baseInterval.count);\r\n\r\n\t\t\tdataItem.setCalculatedValue(key, startTime, \"open\");\r\n\t\t\tdataItem.setCalculatedValue(key, endDate.getTime(), \"close\");\r\n\r\n\t\t\tdataItemsByAxis.setKey(startTime.toString(), dataItem);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Collapses empty stretches of date/time scale by creating [[AxisBreak]]\r\n\t * elements for them.\r\n\t *\r\n\t * Can be used to automatically remove strethes without data, like weekends.\r\n\t *\r\n\t * No, need to call this manually. It will automatically be done if\r\n\t * `skipEmptyPeriods = true`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected addEmptyUnitsBreaks(): void {\r\n\r\n\t\tif (this.skipEmptyPeriods && $type.isNumber(this.min) && $type.isNumber(this.max)) {\r\n\t\t\tlet timeUnit: TimeUnit = this.baseInterval.timeUnit;\r\n\t\t\tlet count: number = this.baseInterval.count;\r\n\r\n\t\t\tthis.axisBreaks.clear(); // TODO: what about breaks added by user?\r\n\r\n\t\t\tlet date: Date = $time.round(new Date(this.min), timeUnit, count, this.getFirstWeekDay());\r\n\t\t\tlet axisBreak: DateAxisBreak;\r\n\r\n\t\t\twhile (date.getTime() < this.max - this.baseDuration) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\t\t\tlet startTime: number = date.getTime();\r\n\t\t\t\tlet startTimeStr: string = startTime.toString();\r\n\r\n\t\t\t\tlet hasData = $iter.contains(this.series.iterator(), (series) => {\r\n\t\t\t\t\treturn !!series.dataItemsByAxis.getKey(this.uid).getKey(startTimeStr);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// open break if not yet opened\r\n\t\t\t\tif (!hasData) {\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\taxisBreak = this.axisBreaks.create();\r\n\t\t\t\t\t\taxisBreak.startDate = new Date(startTime);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// close if already opened\r\n\t\t\t\t\tif (axisBreak) {\r\n\t\t\t\t\t\t// close at end time minus one millisecond\r\n\t\t\t\t\t\taxisBreak.endDate = new Date(startTime - 1);\r\n\t\t\t\t\t\taxisBreak = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates positioning of Axis breaks after something changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fixAxisBreaks(): void {\r\n\t\tsuper.fixAxisBreaks();\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\t\tif (axisBreaks.length > 0) {\r\n\t\t\t// process breaks\r\n\t\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\t\tlet breakGridCount: number = Math.ceil(this._gridCount * (Math.min(this.end, axisBreak.endPosition) - Math.max(this.start, axisBreak.startPosition)) / (this.end - this.start));\r\n\t\t\t\taxisBreak.gridInterval = this.chooseInterval(0, axisBreak.adjustedEndValue - axisBreak.adjustedStartValue, breakGridCount);\r\n\t\t\t\tlet gridDate = $time.round(new Date(axisBreak.adjustedStartValue), axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count, this.getFirstWeekDay());\r\n\t\t\t\tif (gridDate.getTime() > axisBreak.startDate.getTime()) {\r\n\t\t\t\t\t$time.add(gridDate, axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\t\t}\r\n\r\n\t\t\t\taxisBreak.gridDate = gridDate;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @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());\r\n\r\n\t\tlet prevTimestamp: number = date.getTime();\r\n\r\n\t\tlet newDate: Date = $time.copy(date);\r\n\t\t// modify date by adding intervalcount\r\n\t\tlet timestamp: number = $time.add(newDate, timeUnit, intervalCount).getTime();\r\n\r\n\t\t// if it's axis break, get first rounded date which is not in a break\r\n\t\tlet axisBreak: DateAxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\tnewDate = new Date(axisBreak.endDate.getTime());\r\n\t\t\t$time.round(newDate, timeUnit, realIntervalCount, this.getFirstWeekDay());\r\n\t\t\tif (newDate.getTime() < axisBreak.endDate.getTime()) {\r\n\t\t\t\t$time.add(newDate, timeUnit, realIntervalCount);\r\n\t\t\t}\r\n\t\t\ttimestamp = newDate.getTime();\r\n\t\t}\r\n\r\n\t\t// get duration between grid lines with break duration removed\r\n\t\tlet durationBreaksRemoved: number = this.adjustDifference(prevTimestamp, timestamp);\r\n\t\t// calculate how many time units fit to this duration\r\n\t\tlet countBreaksRemoved: number = Math.round(durationBreaksRemoved / $time.getDuration(timeUnit));\r\n\r\n\t\t// if less units fit, add one and repeat\r\n\t\tif (countBreaksRemoved < realIntervalCount) {\r\n\t\t\treturn this.getGridDate(date, intervalCount + realIntervalCount);\r\n\t\t}\r\n\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * [getBreaklessDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param axisBreak [description]\r\n\t * @param timeUnit [description]\r\n\t * @param count [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getBreaklessDate(axisBreak: DateAxisBreak, timeUnit: TimeUnit, count: number): Date {\r\n\t\tlet date = new Date(axisBreak.endValue);\r\n\t\t$time.round(date, timeUnit, count, this.getFirstWeekDay());\r\n\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\tlet timestamp = date.getTime();\r\n\r\n\t\taxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\treturn this.getBreaklessDate(axisBreak, timeUnit, count);\r\n\t\t}\r\n\t\treturn date;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates all Axis elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateAxisElements(): void {\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\r\n\t\t\tthis.calculateZoom();\r\n\r\n\t\t\t// first regular items\r\n\t\t\tlet timestamp = this._gridDate.getTime();\r\n\t\t\tlet timeUnit = this._gridInterval.timeUnit;\r\n\t\t\tlet intervalCount = this._gridInterval.count;\r\n\t\t\tlet prevGridDate = $time.copy(this._gridDate);\r\n\r\n\t\t\tlet dataItemsIterator = this._dataItemsIterator;\r\n\t\t\tthis.resetIterators();\r\n\r\n\t\t\twhile (timestamp <= this._maxZoomed) {\r\n\t\t\t\tlet date = this.getGridDate($time.copy(prevGridDate), intervalCount);\r\n\r\n\t\t\t\ttimestamp = date.getTime();\r\n\r\n\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount);\r\n\r\n\t\t\t\tlet format = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit)) {\r\n\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet text = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\tlet dataItem = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\tif (dataItem.__disabled) {\r\n\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t}\r\n\t\t\t\tthis.appendDataItem(dataItem);\r\n\r\n\t\t\t\tdataItem.axisBreak = undefined;\r\n\t\t\t\tdataItem.date = date;\r\n\t\t\t\tdataItem.endDate = endDate;\r\n\r\n\t\t\t\tdataItem.text = text;\r\n\r\n\t\t\t\tprevGridDate = date;\r\n\r\n\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t}\r\n\r\n\t\t\t// breaks later\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\t$iter.each(this.axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\t\tif (axisBreak.breakSize > 0) {\r\n\t\t\t\t\tlet timeUnit: TimeUnit = axisBreak.gridInterval.timeUnit;\r\n\t\t\t\t\tlet intervalCount: number = axisBreak.gridInterval.count;\r\n\r\n\t\t\t\t\t// only add grid if gap is bigger then minGridDistance\r\n\t\t\t\t\tif ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer.minGridDistance * 4) {\r\n\t\t\t\t\t\tlet timestamp: number = axisBreak.gridDate.getTime();\r\n\r\n\t\t\t\t\t\tlet prevGridDate;\r\n\t\t\t\t\t\tlet count: number = 0;\r\n\t\t\t\t\t\twhile (timestamp <= axisBreak.adjustedMax) {\r\n\t\t\t\t\t\t\tlet date: Date = $time.copy(axisBreak.gridDate);\r\n\t\t\t\t\t\t\ttimestamp = $time.add(date, timeUnit, intervalCount * count).getTime();\r\n\t\t\t\t\t\t\tcount++;\r\n\t\t\t\t\t\t\tif (timestamp > axisBreak.adjustedStartValue && timestamp < axisBreak.adjustedEndValue) {\r\n\t\t\t\t\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\t\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount);\r\n\r\n\t\t\t\t\t\t\t\tlet format: string = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\t\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit)) {\r\n\t\t\t\t\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet text: string = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\t\t\t\t\tif (dataItem.__disabled) {\r\n\t\t\t\t\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t//this.processDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tdataItem.axisBreak = axisBreak;\r\n\t\t\t\t\t\t\t\taxisBreak.dataItems.moveValue(dataItem);\r\n\r\n\t\t\t\t\t\t\t\tdataItem.date = date;\r\n\t\t\t\t\t\t\t\tdataItem.endDate = endDate;\r\n\t\t\t\t\t\t\t\tdataItem.text = text;\r\n\t\t\t\t\t\t\t\tprevGridDate = date;\r\n\t\t\t\t\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//super.validateDataElement(dataItem);\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\tlet timestamp = dataItem.value;\r\n\t\t\tlet endTimestamp = dataItem.endValue;\r\n\r\n\t\t\tif (!$type.isNumber(endTimestamp)) {\r\n\t\t\t\tendTimestamp = timestamp;\r\n\t\t\t}\r\n\r\n\t\t\tlet position: number = this.valueToPosition(timestamp);\r\n\t\t\tlet endPosition: number = this.valueToPosition(endTimestamp);\r\n\t\t\tlet fillEndPosition = endPosition;\r\n\r\n\t\t\tif (!dataItem.isRange && this._gridInterval.count > 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\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()).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\treturn startTime + (endTime - startTime) * this.startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the maximum timestamp as per cell start location.\r\n\t *\r\n\t * @param value Value\r\n\t * @return Adjusted value\r\n\t */\r\n\tprotected fixMax(value: number) {\r\n\t\t// like this because months are not equal\r\n\t\tlet startTime = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count, this.getFirstWeekDay()).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), this.baseInterval.timeUnit, this.baseInterval.count).getTime();\r\n\t\treturn startTime + (endTime - startTime) * this.endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [chooseInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description\r\n\t * @param index [description]\r\n\t * @param duration [description]\r\n\t * @param gridCount [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic chooseInterval(index: number, duration: number, gridCount: number): ITimeInterval {\r\n\t\tlet gridIntervals: List = this.gridIntervals;\r\n\r\n\t\tlet gridInterval: ITimeInterval = gridIntervals.getIndex(index);\r\n\r\n\t\tlet intervalDuration: number = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tlet lastIndex: number = gridIntervals.length - 1;\r\n\t\tif (index >= lastIndex) {\r\n\t\t\treturn { ...gridIntervals.getIndex(lastIndex) };\r\n\t\t}\r\n\r\n\t\tlet count: number = Math.ceil(duration / intervalDuration);\r\n\r\n\t\tif (duration < intervalDuration && index > 0) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index - 1) };\r\n\t\t}\r\n\r\n\t\tif (count <= gridCount) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t} else {\r\n\t\t\tif (index + 1 < gridIntervals.length) {\r\n\t\t\t\treturn this.chooseInterval(index + 1, duration, gridCount);\r\n\t\t\t} else {\r\n\t\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DateFormatter]].\r\n\t *\r\n\t * @param value Source value\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number): string {\r\n\t\treturn this.dateFormatter.format(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a Date to an asbolute pixel position within Axis.\r\n\t *\r\n\t * @param date Date\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic dateToPosition(date: Date): number {\r\n\t\treturn this.valueToPosition(date.getTime());\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a numeric timestamp or a `Date` to a relative position on axis.\r\n\t *\r\n\t * @param date Date or a timestamp\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(date: Date | number): number {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPosition(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPosition(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts date to orientation point (x, y, angle) on axis\r\n\t *\r\n\t * @param date Date\r\n\t * @return IOrientationPoint\r\n\t */\r\n\tpublic dateToPoint(date: Date): IOrientationPoint {\r\n\t\tlet position = this.dateToPosition(date);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a numeric value to orientation (x, y, angle) point on axis\r\n\t *\r\n\t * @param value Value\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic anyToPoint(date: Date | number): IOrientationPoint {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPoint(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPoint(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts pixel position within Axis to a corresponding Date.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Date\r\n\t */\r\n\tpublic positionToDate(position: number): Date {\r\n\t\treturn new Date(this.positionToValue(position));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\t//let stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value)).x;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value + stack)).y;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack ID\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(stackKey, \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(this.valueToPosition(value + stack));\r\n\t}\r\n\r\n\t/**\r\n\t * [getTimeByLocation description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param key [description]\r\n\t * @param location [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getTimeByLocation(dataItem: XYSeriesDataItem, key: string, location: number): number {\r\n\t\tif (!$type.hasValue(key)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = dataItem.workingLocations[key];\r\n\r\n\t\t\tif (!$type.isNumber(location)) {\r\n\t\t\t\tlocation = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet startTime: number = dataItem.values[key][\"open\"];\r\n\t\tlet endTime: number = dataItem.values[key][\"close\"];\r\n\r\n\t\tif ($type.isNumber(startTime) && $type.isNumber(endTime)) {\r\n\t\t\treturn startTime + (endTime - startTime) * location;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes a related series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic processSeriesDataItem(dataItem: XYSeriesDataItem, axisLetter?: string): void {\r\n\r\n\t\tlet series = dataItem.component;\r\n\t\tlet time: number;\r\n\r\n\t\tlet date: Date = (dataItem)[\"date\" + axisLetter];\r\n\t\tif (date) {\r\n\t\t\ttime = date.getTime();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet openDate: Date = (dataItem)[\"openDate\" + axisLetter];\r\n\t\tlet prevSeriesTime: number = this._prevSeriesTime;\r\n\r\n\r\n\t\tlet openTime: number;\r\n\t\tif (openDate) {\r\n\t\t\topenTime = openDate.getTime();\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(openTime)) {\r\n\t\t\tlet difference = Math.abs(time - openTime);\r\n\r\n\t\t\tif (this._minDifference[series.uid] > difference) {\r\n\t\t\t\tthis._minDifference[series.uid] = difference;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet differece: number = time - prevSeriesTime;\r\n\r\n\t\tif (differece > 0) {\r\n\t\t\tif (this._minDifference[series.uid] > differece) {\r\n\t\t\t\tthis._minDifference[series.uid] = differece;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._prevSeriesTime = time;\r\n\r\n\t\tif (series._baseInterval[this.uid]) {\r\n\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this._baseInterval) {\r\n\t\t\t\tseries._baseInterval[this.uid] = this._baseInterval;\r\n\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [updateAxisBySeries description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic updateAxisBySeries() {\r\n\t\tsuper.updateAxisBySeries();\r\n\r\n\t\tlet baseInterval: ITimeInterval = this.chooseInterval(0, this.minDifference, 1);\r\n\t\t// handle short months\r\n\t\tif (this.minDifference >= $time.getDuration(\"day\", 27) && baseInterval.timeUnit == \"week\") {\r\n\t\t\tbaseInterval.timeUnit = \"month\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\t\t// handle daylight saving\r\n\t\tif (this.minDifference >= $time.getDuration(\"hour\", 23) && baseInterval.timeUnit == \"hour\") {\r\n\t\t\tbaseInterval.timeUnit = \"day\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\tthis._baseIntervalReal = baseInterval;\r\n\t\t// no need to invalidate\r\n\t}\r\n\r\n\t/**\r\n\t * A base interval (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * For example, if you have a data set that has a data point every 5 minutes,\r\n\t * you may want to set this to `{ timeUnit: \"minute\", count: 5 }`.\r\n\t *\r\n\t * If not set, the Axis will try to determine the setting by its own, looking\r\n\t * at actual data.\r\n\t *\r\n\t * @param timeInterval base interval\r\n\t */\r\n\tpublic set baseInterval(timeInterval: ITimeInterval) {\r\n\t\tif (JSON.stringify(this._baseInterval) != JSON.stringify(timeInterval)) {\r\n\t\t\tthis._baseInterval = timeInterval;\r\n\t\t\tthis.invalidate();\r\n\t\t\tthis.postProcessSeriesDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Base interval\r\n\t */\r\n\tpublic get baseInterval(): ITimeInterval {\r\n\t\tif (this._baseInterval) {\r\n\t\t\treturn this._baseInterval;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._baseIntervalReal;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * An \"empty\" period is considered a stretch of time in the length of current\r\n\t * `baseInterval` without a single data point in it.\r\n\t *\r\n\t * For each such empty period, axis will automatically create an\r\n\t * [[AxisBreak]]. By default they will be invisible. You can still configure\r\n\t * them by accessing `axis.breaks.template`.\r\n\t *\r\n\t * [More info about breaks](https://www.amcharts.com/docs/v4/concepts/axes/#Breaks).\r\n\t *\r\n\t * Important notes:\r\n\t * * If you set this property to `true`, you can not add your custom axis breaks to this axis anymore.\r\n\t * * Using this feature affects performance. Use only if you need it.\r\n\t * * Setting this to `true` will reset appearance of breaks. If you want to modify appearance, do it *after* you set `skipEmptyPeriods`.\r\n\t *\r\n\t * @default false\r\n\t * @param value Remove empty stretches of time?\r\n\t */\r\n\tpublic set skipEmptyPeriods(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"skipEmptyPeriods\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\r\n\t\tif (value) {\r\n\t\t\tlet breakTemplate = this.axisBreaks.template;\r\n\t\t\tbreakTemplate.startLine.disabled = true;\r\n\t\t\tbreakTemplate.endLine.disabled = true;\r\n\t\t\tbreakTemplate.fillShape.disabled = true;\r\n\t\t\tbreakTemplate.breakSize = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Remove empty stretches of time?\r\n\t */\r\n\tpublic get skipEmptyPeriods(): boolean {\r\n\t\treturn this.getPropertyValue(\"skipEmptyPeriods\");\r\n\t}\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @param value Date format\r\n\t */\r\n\tpublic set tooltipDateFormat(value: string) {\r\n\t\tthis.setPropertyValue(\"tooltipDateFormat\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date format\r\n\t */\r\n\tpublic get tooltipDateFormat(): string {\r\n\t\treturn this.getPropertyValue(\"tooltipDateFormat\");\r\n\t}\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tpublic set markUnitChange(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"markUnitChange\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use different format for period beginning?\r\n\t */\r\n\tpublic get markUnitChange(): boolean {\r\n\t\treturn this.getPropertyValue(\"markUnitChange\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a tooltip, based on specific relative position\r\n\t * within axis.\r\n\t *\r\n\t * The label will be formatted as per [[DateFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position\r\n\t * @return Label (formatted date)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet text: string;\r\n\t\tlet date = this.positionToDate(position);\r\n\t\tdate = $time.round(date, this.baseInterval.timeUnit, this.baseInterval.count, this.getFirstWeekDay());\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());\r\n\r\n\t\tif (location > 0) {\r\n\t\t\t$time.add(date, timeUnit, location * count);\r\n\t\t}\r\n\r\n\t\tif (this.isInBreak(date.getTime())) {\r\n\t\t\twhile (date.getTime() < this.max) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\t\t\t\tif (!this.isInBreak(date.getTime())) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.dateToPosition(date);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the start of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Relative position\r\n\t * @return Cell start relative position\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the end of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Relative position\r\n\t * @return Cell end relative position\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t\t//return this.dateToPosition($time.add(this.positionToDate(this.roundPosition(position, 1)), this.baseInterval.timeUnit, this.baseInterval.count));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Series data item that corresponds to the specific pixel position\r\n\t * of the Axis.\r\n\t *\r\n\t * If `findNearest` (third parameter) is set to `true`, the method will try\r\n\t * to locate nearest available data item if none is found directly under\r\n\t * `position`.\r\n\t *\r\n\t * @param series Series\r\n\t * @param position Position (px)\r\n\t * @param findNearest Should axis try to find nearest tooltip if there is no data item at exact position\r\n\t * @return Data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, findNearest?: boolean): XYSeriesDataItem {\r\n\r\n\t\tlet value: number = this.positionToValue(position);\r\n\t\tlet date: Date = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count, this.getFirstWeekDay());\r\n\r\n\t\tlet dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n\r\n\t\tlet dataItem = dataItemsByAxis.getKey(date.getTime().toString());\r\n\r\n\t\t// todo: alternatively we can find closiest here\r\n\t\tif (!dataItem && findNearest) {\r\n\t\t\t/*\r\n\t\t\t// to the left\r\n\t\t\tlet leftCount = 0;\r\n\t\t\tlet leftDataItem: XYSeriesDataItem;\r\n\t\t\tlet leftDate = new Date(date.getTime());\r\n\r\n\t\t\twhile (leftDate.getTime() > this.minZoomed) {\r\n\t\t\t\tleftDate = $time.add(leftDate, this.baseInterval.timeUnit, -this.baseInterval.count);\r\n\t\t\t\tleftDataItem = dataItemsByAxis.getKey(leftDate.getTime().toString());\r\n\t\t\t\tif (leftDataItem) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tleftCount++;\r\n\t\t\t\tif (leftCount > 5000) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet rightCount = 0;\r\n\t\t\tlet rightDataItem: XYSeriesDataItem;\r\n\t\t\tlet rightDate = new Date(date.getTime());\r\n\t\t\twhile (rightDate.getTime() < this.maxZoomed) {\r\n\t\t\t\trightDate = $time.add(rightDate, this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\t\t\trightDataItem = dataItemsByAxis.getKey(rightDate.getTime().toString());\r\n\t\t\t\tif (rightDataItem) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\trightCount++;\r\n\t\t\t\tif (rightCount > 5000) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (leftDataItem && !rightDataItem) {\r\n\t\t\t\treturn leftDataItem;\r\n\t\t\t}\r\n\t\t\telse if (!leftDataItem && rightDataItem) {\r\n\t\t\t\treturn rightDataItem;\r\n\t\t\t}\r\n\t\t\telse if (leftDataItem && rightDataItem) {\r\n\t\t\t\tif (leftCount < rightCount) {\r\n\t\t\t\t\treturn leftDataItem;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn rightDataItem;\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t\tlet key: \"dateX\" | \"dateY\";\r\n\r\n\t\t\tif (this.axisLetter == \"Y\") {\r\n\t\t\t\tkey = \"dateY\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tkey = \"dateX\";\r\n\t\t\t}\r\n\r\n\t\t\tdataItem = series.dataItems.getIndex(series.dataItems.findClosestIndex(date.getTime(), (x) => x[key].getTime(), \"any\"));\r\n\t\t}\r\n\r\n\t\treturn dataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a formatted date based on position in axis scale.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\t// @todo Better format recognition\r\n\t\tlet date = this.positionToDate(position);\r\n\t\treturn this.dateFormatter.format(date, this.getCurrentLabelFormat());\r\n\t}\r\n\r\n\t/**\r\n\t * Returns label date format based on currently used time units\r\n\t *\r\n\t * @return Format\r\n\t */\r\n\tprotected getCurrentLabelFormat(): string {\r\n\t\treturn this.dateFormats.getKey(this._gridInterval ? this._gridInterval.timeUnit : \"day\");\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes an Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\t\tlet renderer = this.renderer;\r\n\t\tif (renderer) {\r\n\t\t\t// Set defaults\r\n\t\t\trenderer.ticks.template.location = 0;\r\n\t\t\trenderer.grid.template.location = 0;\r\n\t\t\trenderer.labels.template.location = 0;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\treturn { x: 0, y: 0 };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Zooms axis to specific Dates.\r\n\t *\r\n\t * @param startDate Start date\r\n\t * @param endValue End date\r\n\t * @param skipRangeEvent Do not invoke events\r\n\t * @param instantly Do not play zoom animations\r\n\t */\r\n\tpublic zoomToDates(startDate: Date, endDate: Date, skipRangeEvent?: boolean, instantly?: boolean): void {\r\n\t\tstartDate = this.dateFormatter.parse(startDate);\r\n\t\tendDate = this.dateFormatter.parse(endDate);\r\n\t\tthis.zoomToValues(startDate.getTime(), endDate.getTime(), skipRangeEvent, instantly);\r\n\t}\r\n\r\n\t/**\r\n\t * Adds `baseInterval` to \"as is\" fields.\r\n\t *\r\n\t * @param field Field name\r\n\t * @return Assign as is?\r\n\t */\r\n\tprotected asIs(field: string): boolean {\r\n\t\treturn field == \"baseInterval\" || super.asIs(field);\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.dateFormats = source.dateFormats;\r\n\t\tthis.periodChangeDateFormats = source.periodChangeDateFormats;\r\n\t\tif (source[\"_baseInterval\"]) {\r\n\t\t\tthis.baseInterval = source.baseInterval;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @param local or global position\r\n\t */\r\n\tpublic showTooltipAtPosition(position: number, local?: boolean) {\r\n\r\n\t\tif (!local) {\r\n\t\t\tposition = this.toAxisPosition(position);\r\n\t\t}\r\n\r\n\t\tif (this.snapTooltip) {\r\n\t\t\tlet actualDate = $time.round(this.positionToDate(position), this.baseInterval.timeUnit, 1, this.getFirstWeekDay());\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\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());\r\n\t\t\t\tclosestTime = closestDate.getTime();\r\n\t\t\t\tclosestDate = new Date(closestDate.getTime() + this.baseDuration / 2);\r\n\t\t\t\tposition = this.dateToPosition(closestDate);\r\n\r\n\t\t\t\tlet seriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\r\n\t\t\t\tthis.series.each((series) => {\r\n\t\t\t\t\tlet dataItem = series.dataItemsByAxis.getKey(this.uid).getKey(closestTime.toString());\r\n\t\t\t\t\tlet point = series.showTooltipAtDataItem(dataItem);\r\n\t\t\t\t\tif (point) {\r\n\t\t\t\t\t\tseriesPoints.push({ series: series, point: point });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tseries.hideTooltip();\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\tthis.chart.sortSeriesTooltips(seriesPoints);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.showTooltipAtPosition(position, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Current grid interval.\r\n\t *\r\n\t * @return Grid interval\r\n\t */\r\n\tpublic get gridInterval(): ITimeInterval {\r\n\t\treturn this._gridInterval;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DateAxis\"] = DateAxis;\r\nregistry.registeredClasses[\"DateAxisDataItem\"] = DateAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxis.ts","/**\r\n * A module which defines functionality related to Category Axis Break.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { AxisBreak, IAxisBreakProperties, IAxisBreakAdapters, IAxisBreakEvents } from \"./AxisBreak\";\r\nimport { 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\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisDataItem\";\r\n\t\tthis.text = \"{category}\";\r\n\r\n\t\tthis.locations.category = 0;\r\n\t\tthis.locations.endCategory = 1;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Category.\r\n\t *\r\n\t * @param value Category\r\n\t */\r\n\tpublic set category(value: string) {\r\n\t\tthis.setProperty(\"category\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Category\r\n\t */\r\n\tpublic get category(): string {\r\n\t\tif (this.adapter.isEnabled(\"category\")) {\r\n\t\t\treturn this.adapter.apply(\"category\", this.properties[\"category\"]);\r\n\t\t}\r\n\t\treturn this.properties[\"category\"];\r\n\t}\r\n\r\n\t/**\r\n\t * End category.\r\n\t *\r\n\t * Used for items that span several categories, like [[CategoryAxisBreak]].\r\n\t *\r\n\t * @param value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tthis.setProperty(\"endCategory\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.properties[\"endCategory\"];\r\n\t}\r\n}\r\n\r\n/**\r\n * Defines adapters for [[DataItem]]\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisDataItemAdapters extends IAxisDataItemAdapters {\r\n\tcategory: string;\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisDataFields extends IAxisDataFields {\r\n\r\n\t/**\r\n\t * A field that holds category information.\r\n\t */\r\n\tcategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisProperties extends IAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[CategoryAxis]].\r\n */\r\nexport interface ICategoryAxisEvents extends IAxisEvents { }\r\n\r\n/**\r\n * Defines adapter for [[CategoryAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisAdapters extends IAxisAdapters, ICategoryAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a category-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"CategoryAxis\",\r\n * \"title\": {\r\n * \"text\": \"Clients\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link ICategoryAxisEvents} for a list of available Events\r\n * @see {@link ICategoryAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CategoryAxis extends Axis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: ICategoryAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICategoryAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICategoryAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: CategoryAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: CategoryAxisBreak;\r\n\r\n\t/**\r\n\t * A reference to chart the axis is for.\r\n\t */\r\n\tpublic chart: SerialChart;\r\n\r\n\t/**\r\n\t * Frequency of the labels on axis.\r\n\t */\r\n\tprotected _frequency: number;\r\n\r\n\t/**\r\n\t * A collection that holds Axis' data items sorted by each category.\r\n\t */\r\n\tpublic dataItemsByCategory: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * last data item is used for the closing grid\r\n\t */\r\n\tprotected _lastDataItem: CategoryAxisDataItem;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxis\";\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"category\";\r\n\r\n\t\tthis._lastDataItem = this.createDataItem();\r\n\t\tthis._lastDataItem.component = this;\r\n\t\tthis._disposers.push(this._lastDataItem);\r\n\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CategoryAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new CategoryAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateDataRange(): void {\r\n\r\n\t\tsuper.validateDataRange();\r\n\r\n\t\t$iter.each(this._series.iterator(), (series) => {\r\n\t\t\tif ((series.xAxis instanceof CategoryAxis) && (series.yAxis instanceof CategoryAxis)) {\r\n\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet firstSeriesDataItem: XYSeriesDataItem;\r\n\t\t\t\tlet lastSeriesDataItem: XYSeriesDataItem;\r\n\r\n\t\t\t\tlet startIndex = this.positionToIndex(this.start);\r\n\t\t\t\tlet endIndex = this.positionToIndex(this.end);\r\n\r\n\t\t\t\tfor(let i = startIndex; i <= endIndex; i++){\r\n\t\t\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\t\t\tif(dataItem){\r\n\t\t\t\t\t\tlet fdi = this.getFirstSeriesDataItem(series, dataItem.category);\r\n\t\t\t\t\t\tif(fdi){\r\n\t\t\t\t\t\t\tif (!firstSeriesDataItem) {\r\n\t\t\t\t\t\t\t\tfirstSeriesDataItem = fdi;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (firstSeriesDataItem && fdi.index < firstSeriesDataItem.index) {\r\n\t\t\t\t\t\t\t\tfirstSeriesDataItem = fdi;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlet ldi = this.getLastSeriesDataItem(series, dataItem.category);\r\n\t\t\t\t\t\tif(ldi){\r\n\t\t\t\t\t\t\tif (!lastSeriesDataItem) {\r\n\t\t\t\t\t\t\t\tlastSeriesDataItem = ldi;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (lastSeriesDataItem && ldi.index > lastSeriesDataItem.index) {\r\n\t\t\t\t\t\t\t\tlastSeriesDataItem = ldi;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (firstSeriesDataItem) {\r\n\t\t\t\t\tseries.startIndex = firstSeriesDataItem.index;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.start = this.start;\r\n\t\t\t\t}\r\n\t\t\t\tif (lastSeriesDataItem) {\r\n\t\t\t\t\tseries.endIndex = lastSeriesDataItem.index + 1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.end = this.end;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// range might not change, but axis breaks might.\r\n\t\t\t\tif (this.axisBreaks.length > 0) {\r\n\t\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the whole axis. Causes it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tlet dataCount: number = this.dataItems.length;\r\n\r\n\t\tlet startIndex = $math.fitToRange(Math.floor(this.start * dataCount - 1), 0, dataCount);\r\n\t\tlet endIndex = $math.fitToRange(Math.ceil(this.end * dataCount), 0, dataCount);\r\n\r\n\t\tif (this.renderer.invalid) {\r\n\t\t\tthis.renderer.validate();\r\n\t\t}\r\n\r\n\t\t// find frequency at which we'll show items\r\n\t\tlet maxCount: number = this.renderer.axisLength / this.renderer.minGridDistance;\r\n\t\tlet frequency: number = Math.min(this.dataItems.length, Math.ceil((endIndex - startIndex) / maxCount));\r\n\r\n\t\tthis._startIndex = Math.floor(startIndex / frequency) * frequency;\r\n\t\tthis._endIndex = Math.ceil(this.end * dataCount);\r\n\r\n\t\tthis.fixAxisBreaks();\r\n\r\n\t\tif (this._startIndex == this._endIndex) {\r\n\t\t\tthis._endIndex++;\r\n\t\t}\r\n\r\n\t\tthis._frequency = frequency;\r\n\r\n\t\tif (this.axisLength <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.maxZoomFactor = this.dataItems.length;\r\n\t\tif (this.dataItems.length <= 0) {\r\n\t\t\tthis.maxZoomFactor = 1;\r\n\t\t}\r\n\r\n\t\tthis.resetIterators();\r\n\r\n\t\t// it's important to use protected variables here, as getters will return 0 - length\r\n\t\t// TODO use iterator instead\r\n\t\t// @ todo: not solved cat axis item fading\r\n\t\tstartIndex = $math.max(0, this._startIndex - this._frequency);\r\n\t\tendIndex = $math.min(this.dataItems.length, this._endIndex + this._frequency);\r\n\r\n\t\tlet itemIndex = 0;\r\n\r\n\t\tfor (let i = 0; i < startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = endIndex, len = this.dataItems.length; i < len; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tif (i < this.dataItems.length) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (i / this._frequency == Math.round(i / this._frequency)) {\r\n\t\t\t\t\tlet axisBreak: CategoryAxisBreak = this.isInBreak(i);\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t//previously we disabled all before, but this is better for cpu\r\n\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex); // helps to solve shrinking\r\n\t\t\t\t\tdataItem.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.appendDataItem(this._lastDataItem);\r\n\t\tthis.validateDataElement(this._lastDataItem, itemIndex + 1, this.dataItems.length);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\tlet adjustedStartValue: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet adjustedEndValue: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif ($math.intersect({ start: adjustedStartValue, end: adjustedEndValue }, { start: this._startIndex, end: this._endIndex })) {\r\n\r\n\t\t\t\tlet frequency: number = $math.fitToRange(Math.ceil(this._frequency / axisBreak.breakSize), 1, adjustedEndValue - adjustedStartValue);\r\n\t\t\t\tlet itemIndex = 0;\r\n\t\t\t\t// TODO use iterator instead\r\n\t\t\t\tfor (let b = adjustedStartValue; b <= adjustedEndValue; b = b + frequency) {\r\n\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(b);\r\n\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.validateBreaks();\r\n\t\tthis.validateAxisRanges();\r\n\r\n\t\tthis.ghostLabel.invalidate(); // solves font issue\r\n\t\tthis.renderer.invalidateLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElement description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param itemIndex [description]\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"], itemIndex?: number, index?: number): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\t//dataItem.__disabled = false;\r\n\r\n\t\tlet renderer: AxisRenderer = this.renderer;\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = this.categoryToIndex(dataItem.category);\r\n\t\t}\r\n\r\n\t\tlet endIndex = this.categoryToIndex(dataItem.endCategory);\r\n\r\n\t\tif (!$type.isNumber(endIndex)) {\r\n\t\t\tendIndex = index;\r\n\t\t}\r\n\r\n\t\tlet position: number = this.indexToPosition(index, dataItem.locations.category);\r\n\t\tlet endPosition: number = this.indexToPosition(endIndex, dataItem.locations.endCategory);\r\n\r\n\t\tdataItem.position = position;\r\n\r\n\t\tlet fillEndIndex: number;\r\n\t\tlet fillPosition: number;\r\n\t\tlet fillEndPosition: number;\r\n\r\n\t\tif (dataItem.isRange) {\r\n\t\t\tfillEndIndex = endIndex;\r\n\t\t\tfillPosition = this.indexToPosition(index, dataItem.locations.category);\r\n\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, dataItem.locations.endCategory);\r\n\t\t}\r\n\r\n\t\tdataItem.point = renderer.positionToPoint(position);\r\n\r\n\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\tif (tick && !tick.disabled) {\r\n\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t}\r\n\r\n\t\tlet grid: Grid = dataItem.grid;\r\n\t\tif (grid && !grid.disabled) {\r\n\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t}\r\n\r\n\r\n\t\tlet label: AxisLabel = dataItem.label;\r\n\t\tif (label && !label.disabled) {\r\n\t\t\t// theorethically this might result problems if category text changes, the range text won't change. But otherwise range.label.text = \"custom text\" wont' work, which is not intuitive.\r\n\t\t\tif (!dataItem.isRange || label.text == undefined) {\r\n\t\t\t\tdataItem.text = dataItem.text;\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateLabelElement(label, position, endPosition);\r\n\r\n\t\t\tif (dataItem.label.measuredWidth > this.ghostLabel.measuredWidth || dataItem.label.measuredHeight > this.ghostLabel.measuredHeight) {\r\n\t\t\t\tthis.ghostLabel.text = dataItem.label.currentText;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\tif (fill && !fill.disabled) {\r\n\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tfillEndIndex = index + this._frequency;\r\n\t\t\t\tfillPosition = this.indexToPosition(index, fill.location);\r\n\t\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, fill.location);\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateFillElement(fill, fillPosition, fillEndPosition);\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tthis.fillRule(dataItem, itemIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\tif (mask) {\r\n\t\t\trenderer.updateFillElement(mask, fillPosition, fillEndPosition);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes the axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t * @param dataContext The raw data that corresponds to this data item\r\n\t */\r\n\tpublic processDataItem(dataItem: this[\"_dataItem\"], dataContext: Object): void {\r\n\t\t// creat a collection for fast access\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t\t// check if such category already exists\r\n\t\tlet existingDataItem: CategoryAxisDataItem = this.dataItemsByCategory.getKey(dataItem.category);\r\n\t\tif (existingDataItem && existingDataItem != dataItem) {\r\n\t\t\tthis.dataItems.remove(existingDataItem);\r\n\t\t}\r\n\r\n\t\tthis.dataItemsByCategory.setKey(dataItem.category, dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a category index to an actual screen coordinate on the axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param index Index\r\n\t * @param location Location (0-1)\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic indexToPosition(index: number, location?: AxisItemLocation | number): number {\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = 0.5;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet difference: number = this.adjustDifference(startIndex, endIndex);\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tdifference -= startLocation;\r\n\t\tdifference -= (1 - endLocation);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif (index < startIndex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif ($math.intersect({ start: breakStartIndex, end: breakEndIndex }, { start: startIndex, end: endIndex })) {\r\n\t\t\t\tbreakStartIndex = Math.max(startIndex, breakStartIndex);\r\n\t\t\t\tbreakEndIndex = Math.min(endIndex, breakEndIndex);\r\n\r\n\t\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\t\t// value to the right of break end\r\n\t\t\t\tif (index > breakEndIndex) {\r\n\t\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t\t}\r\n\t\t\t\t// value to the left of break start\r\n\t\t\t\telse if (index < breakStartIndex) {\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// value within break\r\n\t\t\t\telse {\r\n\t\t\t\t\tindex = breakStartIndex + (index - breakStartIndex) * breakSize;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\treturn $math.round((index + location - startLocation - startIndex) / difference, 5);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Position\r\n\t */\r\n\tpublic categoryToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.categoryToIndex(category);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic categoryToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\tlet position = this.categoryToPosition(category, location);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Orientation point\r\n\t */\r\n\tanyToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\treturn this.categoryToPoint(category, location);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * An alias to `categoryToPosition()`.\r\n\t *\r\n\t * @param category Category name\r\n\t * @param location Location (0-1)\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\treturn this.categoryToPosition(category, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts named category to an index of data item it corresponds to.\r\n\t *\r\n\t * @param category Category\r\n\t * @return Data item index\r\n\t */\r\n\tpublic categoryToIndex(category: string): number {\r\n\t\tif ($type.hasValue(category)) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\t\t\tif (dataItem) {\r\n\t\t\t\treturn dataItem.index;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the axis to specific named ctaegories.\r\n\t *\r\n\t * @param startCategory Start category\r\n\t * @param endCategory End category\r\n\t */\r\n\tpublic zoomToCategories(startCategory: string, endCategory: string): void {\r\n\t\tthis.zoomToIndexes(this.categoryToIndex(startCategory), this.categoryToIndex(endCategory) + 1);\r\n\t}\r\n\r\n\t/**\r\n\t * [getAnyRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param start [description]\r\n\t * @param end [description]\r\n\t * @param startLocation [description]\r\n\t * @param endLocation [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getAnyRangePath(start: string, end: string, startLocation?: AxisItemLocation, endLocation?: AxisItemLocation): string {\r\n\t\tlet startPos: number = this.categoryToPosition(start, startLocation);\r\n\t\tlet endPos: number = this.categoryToPosition(end, endLocation);\r\n\t\treturn this.getPositionRangePath(startPos, endPos); // Base class (Axis) gets range shape from AxisRenderer\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position (px) within axis and adjust it to a specific\r\n\t * `location` within category it corresponds to.\r\n\t *\r\n\t * @param position Source position (px)\r\n\t * @param location Location within category (0-1)\r\n\t * @return Adjusted position (px)\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.positionToIndex(position);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Finds and returns first series data item with specific category\r\n\t * @param series Target series\r\n\t * @param category Category\r\n\t * @return XYSeriesDataItem data item\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 * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn dataItem.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\t// This makes base grid to be drawn at the end of the axis and adds extra\r\n\t\t// grid which we need to nicely close the chart.\r\n\t\treturn this.renderer.positionToPoint(1);\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes Axis' renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\r\n\t\tlet renderer = this.renderer;\r\n\t\trenderer.baseGrid.disabled = true;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxis\"] = CategoryAxis;\r\nregistry.registeredClasses[\"CategoryAxisDataItem\"] = CategoryAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxis.ts","/**\r\n * XY series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem, ISeriesProperties, ISeriesDataFields, ISeriesAdapters, ISeriesEvents } from \"./Series\";\r\nimport { Sprite } 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 current cursor position\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t */\r\n\tcursorTooltipEnabled?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesEvents extends ISeriesEvents {\r\n\t/**\r\n\t * Invoked when series tooltip was shown on some particular data item\r\n\t */\r\n\ttooltipshownat: XYSeriesTooltipEvent;\r\n}\r\n\r\n/**\r\n * Defines adapters for [[XYSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYSeriesAdapters extends ISeriesAdapters, IXYSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for [[XYChart]].\r\n *\r\n * @see {@link IXYSeriesEvents} for a list of available Events\r\n * @see {@link IXYSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class XYSeries extends Series {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IXYSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: XYSeriesDataItem;\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t */\r\n\tprotected _baseAxis: Axis;\r\n\r\n\t/**\r\n\t * Total data item count.\r\n\t */\r\n\tprotected _count: Dictionary;\r\n\r\n\t/**\r\n\t * Data item count in current selection.\r\n\t */\r\n\tprotected _scount: Dictionary;\r\n\r\n\t/**\r\n\t * [_xField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xField: string;\r\n\r\n\t/**\r\n\t * [_yField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yField: string;\r\n\r\n\t/**\r\n\t * [_xOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xOpenField: string;\r\n\r\n\t/**\r\n\t * [_yOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yOpenField: string;\r\n\r\n\t/**\r\n\t * [_tooltipXField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tooltipXField: string;\r\n\r\n\t/**\r\n\t * [_tooltipYField description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tooltipYField: string;\r\n\r\n\t/**\r\n\t * [_xValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _xValueFields: Array = [];\r\n\r\n\t/**\r\n\t * [_yValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _yValueFields: Array = [];\r\n\r\n\t/**\r\n\t * Series which is stacked on top of this series, if any.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic stackedSeries: XYSeries;\r\n\r\n\r\n\t/**\r\n\t * dataitem of previously shown tooltip, used to avoid multiple tooltipshownat dispatches\r\n\t * @ignore\r\n\t */\r\n\tprotected _prevTooltipDataItem: XYSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _baseInterval:{[index:string]:ITimeInterval} = {};\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYSeries\";\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.cursorTooltipEnabled = true;\r\n\r\n\t\tthis.mainContainer.mask = new Sprite();\r\n\t\tthis.mainContainer.mask.setElement(this.paper.add(\"path\"));\r\n\r\n\t\tthis.stacked = false;\r\n\t\tthis.snapTooltip = false;\r\n\r\n\t\tthis.tooltip.pointerOrientation = \"horizontal\";\r\n\r\n\t\tthis.tooltip.events.on(\"hidden\", () => {\r\n\t\t\tthis.returnBulletDefaultState();\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new XYSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate() {\r\n\t\tthis._tmin.clear();\r\n\t\tthis._tmax.clear();\r\n\r\n\t\tthis._smin.clear();\r\n\t\tthis._smax.clear();\r\n\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tthis.xAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tthis.yAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series' data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tthis.defineFields();\r\n\r\n\t\tif (this.data.length > 0) {\r\n\t\t\tthis.dataChangeUpdate();\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tthis.updateItemReaderText();\r\n\r\n\t\tif (!$type.hasValue(this.dataFields[this._xField]) || !$type.hasValue(this.dataFields[this._yField])) {\r\n\t\t\tthrow Error(\"Data fields for series \\\"\" + (this.name ? this.name : this.uid) + \"\\\" are not properly defined.\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\r\n\t\ttry {\r\n\t\t\tsuper.processDataItem(dataItem, dataContext);\r\n\r\n\t\t\tdataItem.events.disable();\r\n\t\t\tthis.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n\t\t\tthis.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n\r\n\t\t\tdataItem.events.enable();\r\n\r\n\t\t\tthis.setInitialWorkingValues(dataItem);\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis._chart.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tif (this.xAxis) {\r\n\t\t\tlet dataItemsX = this.dataItemsByAxis.getKey(this.xAxis.uid);\r\n\t\t\tif (dataItemsX) {\r\n\t\t\t\tdataItemsX.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.yAxis) {\r\n\t\t\tlet dataItemsY = this.dataItemsByAxis.getKey(this.yAxis.uid);\r\n\t\t\tif (dataItemsY) {\r\n\t\t\t\tdataItemsY.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\tlet xAxisFieldName: string = xAxis.axisFieldName;\r\n\t\tlet xField: $type.Keyof = <$type.Keyof>(xAxisFieldName + \"X\");\r\n\t\tlet xOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(xAxisFieldName) + \"X\");\r\n\r\n\t\tlet yAxisFieldName: string = yAxis.axisFieldName;\r\n\t\tlet yField: $type.Keyof = <$type.Keyof>(yAxisFieldName + \"Y\");\r\n\t\tlet yOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(yAxisFieldName) + \"Y\");\r\n\r\n\t\tthis._xField = xField;\r\n\t\tthis._yField = yField;\r\n\r\n\t\tif (this.dataFields[xOpenField]) {\r\n\t\t\tthis._xOpenField = xOpenField;\r\n\t\t}\r\n\r\n\t\tif (this.dataFields[yOpenField]) {\r\n\t\t\tthis._yOpenField = yOpenField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[yOpenField] && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[xOpenField] && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\t\t\tif (!this._yOpenField) {\r\n\t\t\t\tthis._yOpenField = yField;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._xValueFields = [];\r\n\t\tthis._yValueFields = [];\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xOpenField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yOpenField);\r\n\t}\r\n\r\n\t/**\r\n\t * [axis description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param axis Axis\r\n\t * @param fields Fields (?)\r\n\t * @param field Field\r\n\t */\r\n\tprotected addValueField(axis: Axis, fields: Array, field: Key): void {\r\n\t\tif (axis instanceof ValueAxis) {\r\n\t\t\tif ($type.hasValue(this.dataFields[field]) && fields.indexOf(field) == -1) {\r\n\t\t\t\tfields.push(field);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets category field from the category axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param field Field\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected setCategoryAxisField(field: Key, axis: CategoryAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets date field from the date axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param field Field\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected setDateAxisField(field: Key, axis: DateAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.date;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs after-draw tasks, e.g. creates masks.\r\n\t */\r\n\tprotected afterDraw(): void {\r\n\t\tsuper.afterDraw();\r\n\t\tthis.createMask();\r\n\t}\r\n\r\n\t/**\r\n\t * Create a mask for the series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic createMask(): void {\r\n\t\t// this mask from which we cut out ranges. does not work well if ranges overlap.\r\n\t\tif (this.mainContainer.mask) {\r\n\t\t\tlet path: string = this.getMaskPath();\r\n\r\n\t\t\t// @todo: this approach won't work well on circluar or other non x/y axes\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\t\tif (range.axisFill.fillPath) {\r\n\t\t\t\t\trange.axisFill.validate();\r\n\t\t\t\t\tpath += range.axisFill.fillPath;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.mainContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\treturn $path.rectToPath({\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\twidth: this.xAxis.axisLength,\r\n\t\t\theight: this.yAxis.axisLength\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns axis data field to use.\r\n\t *\r\n\t * @param axis Axis\r\n\t * @return Field name\r\n\t */\r\n\tpublic getAxisField(axis: Axis): string {\r\n\t\tif (axis == this.xAxis) {\r\n\t\t\treturn this.xField;\r\n\t\t}\r\n\t\tif (axis == this.yAxis) {\r\n\t\t\treturn this.yField;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\r\n\t\t// this helps date axis to check which baseInterval we should use\r\n\t\tthis.xAxis.updateAxisBySeries();\r\n\t\tthis.yAxis.updateAxisBySeries();\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.xAxis.postProcessSeriesDataItems();\r\n\t\tthis.yAxis.postProcessSeriesDataItems();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataRange() {\r\n\t\tif (this.xAxis.dataRangeInvalid) {\r\n\t\t\tthis.xAxis.validateDataRange();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis.dataRangeInvalid) {\r\n\t\t\tthis.yAxis.validateDataRange();\r\n\t\t}\r\n\r\n\t\tsuper.validateDataRange();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tif (this.xAxis.invalid) {\r\n\t\t\tthis.xAxis.validate();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis.invalid) {\r\n\t\t\tthis.yAxis.validate();\r\n\t\t}\r\n\r\n\t\tthis.y = this.yAxis.pixelY;\r\n\t\tthis.x = this.xAxis.pixelX;\r\n\r\n\r\n\t\tthis._showBullets = true;\r\n\t\tlet minBulletDistance: number = this.minBulletDistance;\r\n\t\tif ($type.isNumber(minBulletDistance)) {\r\n\t\t\tif (this.baseAxis.axisLength / (this.endIndex - this.startIndex) < minBulletDistance) {\r\n\t\t\t\tthis._showBullets = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._xAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._xAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._xAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._xAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.xAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no X axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xAxis = axis;\r\n\t\t\t}\r\n\t\t\treturn this._xAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._yAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._yAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._yAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._yAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.yAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no Y axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.yAxis = axis;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._yAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t *\r\n\t * @param value Axis\r\n\t */\r\n\tpublic set baseAxis(value: Axis) {\r\n\t\tif (this._baseAxis != value) {\r\n\t\t\tthis._baseAxis = value;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get baseAxis(): Axis {\r\n\t\tif (!this._baseAxis) {\r\n\t\t\tif (this.yAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.yAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._baseAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._baseAxis;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes values after data items' were added.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItems Data items\r\n\t */\r\n\tpublic processValues(working: boolean): void {\r\n\t\t// todo: if this is stacked, ensure that series to which this one can be stacked are processed before.\r\n\t\tsuper.processValues(working);\r\n\r\n\t\tlet dataItems = this.dataItems;\r\n\r\n\t\tlet minX = Infinity;\r\n\t\tlet maxX = - Infinity;\r\n\r\n\t\tlet minY = Infinity;\r\n\t\tlet maxY = - Infinity;\r\n\r\n\t\tlet startIndex = this.startIndex;\r\n\t\tlet endIndex = this.endIndex;\r\n\r\n\t\tif (!working) {\r\n\t\t\tstartIndex = 0;\r\n\t\t\tendIndex = this.dataItems.length;\r\n\t\t}\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tlet dataItem = dataItems.getIndex(i);\r\n\r\n\t\t\tthis.getStackValue(dataItem, working);\r\n\r\n\t\t\tlet stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n\t\t\tlet stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n\r\n\t\t\tminX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n\t\t\tminY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n\r\n\t\t\tmaxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n\t\t\tmaxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n\r\n\t\t\t// if it's stacked, pay attention to stack value\r\n\t\t\tif (this.stacked) {\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tminY = $math.min(minY, stackY);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tminX = $math.min(minX, stackX);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// this is mainly for value axis to calculate total and perecent.total of each series category\r\n\t\tthis.xAxis.processSeriesDataItems();\r\n\t\tthis.yAxis.processSeriesDataItems();\r\n\r\n\t\tlet xAxisId: string = this.xAxis.uid;\r\n\t\tlet yAxisId: string = this.yAxis.uid;\r\n\r\n\t\tif (!working) {\r\n\t\t\tif (this._tmin.getKey(xAxisId) != minX || this._tmax.getKey(xAxisId) != maxX || this._tmin.getKey(yAxisId) != minY || this._tmax.getKey(yAxisId) != maxY) {\r\n\t\t\t\tthis._tmin.setKey(xAxisId, minX);\r\n\t\t\t\tthis._tmax.setKey(xAxisId, maxX);\r\n\t\t\t\tthis._tmin.setKey(yAxisId, minY);\r\n\t\t\t\tthis._tmax.setKey(yAxisId, maxY);\r\n\r\n\t\t\t\tif (this.stackedSeries) {\r\n\t\t\t\t\tthis.stackedSeries.processValues(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchImmediately(\"extremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._smin.getKey(xAxisId) != minX || this._smax.getKey(xAxisId) != maxX || this._smin.getKey(yAxisId) != minY || this._smax.getKey(yAxisId) != maxY) {\r\n\t\t\tthis._smin.setKey(xAxisId, minX);\r\n\t\t\tthis._smax.setKey(xAxisId, maxX);\r\n\t\t\tthis._smin.setKey(yAxisId, minY);\r\n\t\t\tthis._smax.setKey(yAxisId, maxY);\r\n\r\n\t\t\tif (this.appeared || this.start != 0 || this.end != 1) {\r\n\t\t\t\tthis.dispatchImmediately(\"selectionextremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides element's [[Tooltip]].\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t */\r\n\tpublic hideTooltip() {\r\n\t\tsuper.hideTooltip();\r\n\t\tthis.returnBulletDefaultState();\r\n\t\tthis._prevTooltipDataItem = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows series tooltip at specific position.\r\n\t *\r\n\t * @param xPosition X\r\n\t * @param yPosition Y\r\n\t */\r\n\tpublic showTooltipAtPosition(xPosition: number, yPosition: number): IPoint {\r\n\t\tif (this.cursorTooltipEnabled) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"];\r\n\r\n\t\t\tif (this.visible && !this.isHiding && !this.isShowing) {\r\n\r\n\t\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\t\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\r\n\t\t\t\tif (xAxis == this.baseAxis) {\r\n\t\t\t\t\tdataItem = xAxis.getSeriesDataItem(this, xAxis.toAxisPosition(xPosition), this.snapTooltip);\r\n\t\t\t\t}\r\n\t\t\t\tif (yAxis == this.baseAxis) {\r\n\t\t\t\t\tdataItem = yAxis.getSeriesDataItem(this, yAxis.toAxisPosition(yPosition), this.snapTooltip);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet point = this.showTooltipAtDataItem(dataItem);\r\n\r\n\t\t\t\tif(point){\r\n\t\t\t\t\treturn point;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// so that if tooltip is shown on columns or bullets for it not to be hidden\r\n\t\t\t\tif (!this.tooltipText) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideTooltip();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows series tooltip at specific dataItem.\r\n\t *\r\n\t * @param dataItem\r\n\t */\r\n\tpublic showTooltipAtDataItem(dataItem: this[\"_dataItem\"]): IPoint {\r\n\t\tthis.returnBulletDefaultState(dataItem);\r\n\t\tif (this.cursorTooltipEnabled) {\r\n\t\t\tif (dataItem && dataItem.visible) {\r\n\r\n\t\t\t\tthis.updateLegendValue(dataItem);\r\n\t\t\t\tthis.tooltipDataItem = dataItem;\r\n\r\n\t\t\t\t// todo: add tooltipXField and tooltipYField.\r\n\t\t\t\tlet tooltipXField = this.tooltipXField;\r\n\t\t\t\tlet tooltipYField = this.tooltipYField;\r\n\r\n\t\t\t\tif ($type.hasValue((dataItem)[tooltipXField]) && $type.hasValue((dataItem)[tooltipYField])) {\r\n\r\n\t\t\t\t\tlet tooltipPoint = this.getPoint(dataItem, tooltipXField, tooltipYField, dataItem.locations[tooltipXField], dataItem.locations[tooltipYField]);\r\n\r\n\t\t\t\t\tif (tooltipPoint) {\r\n\r\n\t\t\t\t\t\tthis.tooltipX = tooltipPoint.x;\r\n\t\t\t\t\t\tthis.tooltipY = tooltipPoint.y;\r\n\r\n\t\t\t\t\t\tif (this._prevTooltipDataItem != dataItem) {\r\n\t\t\t\t\t\t\tthis.dispatchImmediately(\"tooltipshownat\", {\r\n\t\t\t\t\t\t\t\ttype: \"tooltipshownat\",\r\n\t\t\t\t\t\t\t\ttarget: this,\r\n\t\t\t\t\t\t\t\tdataItem: dataItem\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tthis._prevTooltipDataItem = dataItem;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (let a of dataItem.bullets) {\r\n\t\t\t\t\t\t\tlet bullet = a[1]\r\n\t\t\t\t\t\t\tbullet.isHover = true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (this.showTooltip()) {\r\n\t\t\t\t\t\t\treturn $utils.spritePointToSvg({ x: tooltipPoint.x, y: tooltipPoint.y }, this);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * returns default state to bullets when tooltip is shown at some other data item or hidden\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected returnBulletDefaultState(dataItem?: XYSeriesDataItem) {\r\n\t\tif (this._prevTooltipDataItem && this._prevTooltipDataItem != dataItem) {\r\n\t\t\tfor (let a of this._prevTooltipDataItem.bullets) {\r\n\t\t\t\tlet bullet = a[1];\r\n\t\t\t\tif (!bullet.isDisposed()) {\r\n\t\t\t\t\tbullet.isHover = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._prevTooltipDataItem = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet) {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: XYSeriesDataItem = bullet.dataItem;\r\n\r\n\t\t// use series xField/yField if bullet doesn't have fields set\r\n\t\tlet xField: string = bullet.xField;\r\n\t\tif (!$type.hasValue(xField)) {\r\n\t\t\txField = this.xField;\r\n\t\t}\r\n\r\n\t\tlet yField: string = bullet.yField;\r\n\t\tif (!$type.hasValue(yField)) {\r\n\t\t\tyField = this.yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n\t\t\tbullet.visible = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet bulletLocationX: number = this.getBulletLocationX(bullet, xField);\r\n\t\t\tlet bulletLocationY: number = this.getBulletLocationY(bullet, yField);\r\n\r\n\t\t\tlet point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n\t\t\tif (point) {\r\n\t\t\t\tlet x: number = point.x;\r\n\t\t\t\tlet y: number = point.y;\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationX) && this.xOpenField != this.xField) {\r\n\t\t\t\t\tlet openX: number = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\t\tx = x - (x - openX) * bullet.locationX;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationY) && this.yOpenField != this.yField) {\r\n\t\t\t\t\tlet openY: number = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\t\ty = y - (y - openY) * bullet.locationY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbullet.moveTo({ x: x, y: y });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationX;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationY;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t * @param stacked Can be stacked?\r\n\t */\r\n\tpublic set stacked(stacked: boolean) {\r\n\t\tthis.setPropertyValue(\"stacked\", stacked, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Can be stacked?\r\n\t */\r\n\tpublic get stacked(): boolean {\r\n\t\treturn this.getPropertyValue(\"stacked\");\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position?\r\n\t *\r\n\t * @default false\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows hidden series.\r\n\t *\r\n\t * @param duration Duration of reveal animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tif (this.xAxis instanceof ValueAxis && this.xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t}\r\n\r\n\t\tif (this.yAxis instanceof ValueAxis && this.yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet delay: number = 0;\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet anim: Animation;\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t}\r\n\t\t\tanim = dataItem.show(interpolationDuration, delay, fields);\r\n\t\t});\r\n\r\n\t\tlet animation = super.show(duration);\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param duration Duration of hiding animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tlet value: number;\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\r\n\t\tif (xAxis instanceof ValueAxis && xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (xAxis.minZoomed < 0 && xAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = xAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\t\tif (yAxis instanceof ValueAxis && yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (yAxis.minZoomed < 0 && yAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = yAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//if ($type.hasValue(fields)) {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet interpolationDuration = this.hiddenState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet delay: number = 0;\r\n\t\tlet anim: Animation;\r\n\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (interpolationDuration == 0) {\r\n\t\t\t\tdataItem.hide(0, 0, value, fields);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t\t}\r\n\t\t\t\tanim = dataItem.hide(interpolationDuration, delay, value, fields);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet animation = super.hide(interpolationDuration);\r\n\t\tif (animation && !animation.isFinished()) {\r\n\t\t\tanimation.delay(delay);\r\n\t\t}\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\t// helps to avoid flicker. otherwise columns will show up at full size and only on next frame will animate from 0\r\n\t\tthis.validateDataElements();\r\n\t\t//}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\r\n\t\t// to calculate stack values\r\n\t\tlet axisSeries: List = >this.baseAxis.series;\r\n\r\n\t\t$iter.each(axisSeries.iterator(), (series) => {\r\n\t\t\tif (series.stacked) {\r\n\t\t\t\tseries.invalidateProcessedData();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [getStackValue description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic getStackValue(dataItem: this[\"_dataItem\"], working?: boolean): void {\r\n\t\t// todo: here wer stack x and y values only. question is - what should we do with other values, like openX, openY?\r\n\t\t// if this series is not stacked or new stack begins, return.\r\n\r\n\t\tif (!this.stacked) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// it might seem that it's better to go through base axis series, but we do not maintain the same order as in chart.series there.\r\n\t\t\tlet chart: XYChart = this.chart;\r\n\t\t\tlet index: number = chart.series.indexOf(this);\r\n\r\n\t\t\tlet field: string;\r\n\r\n\t\t\tif (this.xAxis != this.baseAxis && this.xAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.xField;\r\n\t\t\t}\r\n\t\t\tif (this.yAxis != this.baseAxis && this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.yField;\r\n\t\t\t}\r\n\r\n\t\t\t//this is good for removing series, otherwise stack values will remain the same and chart won't pay atention when adding/removing series\r\n\t\t\tdataItem.setCalculatedValue(field, 0, \"stack\");\r\n\r\n\t\t\t$iter.eachContinue(chart.series.range(0, index).backwards().iterator(), (prevSeries) => {\r\n\t\t\t\t// stacking is only possible if both axes are the same\r\n\t\t\t\tif (prevSeries.xAxis == this.xAxis && prevSeries.yAxis == this.yAxis) {\r\n\t\t\t\t\t// saving value\r\n\t\t\t\t\tprevSeries.stackedSeries = this;\r\n\r\n\t\t\t\t\tlet prevDataItem = prevSeries.dataItems.getIndex(dataItem.index); // indexes should match\r\n\r\n\t\t\t\t\tif (prevDataItem && prevDataItem.hasValue(this._xValueFields) && prevDataItem.hasValue(this._yValueFields)) {\r\n\r\n\t\t\t\t\t\tlet value = dataItem.getValue(field);\r\n\t\t\t\t\t\tlet prevValue: number;\r\n\r\n\t\t\t\t\t\tif (working) {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getWorkingValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ((value >= 0 && prevValue >= 0) || (value < 0 && prevValue < 0)) {\r\n\t\t\t\t\t\t\t//dataItem.events.disable();\r\n\t\t\t\t\t\t\tdataItem.setCalculatedValue(field, prevValue, \"stack\");\r\n\t\t\t\t\t\t\t//dataItem.events.enable();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!prevSeries.stacked) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [xField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get xField(): string {\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get yField(): string {\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * [xOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get xOpenField(): string {\r\n\t\treturn this._xOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get yOpenField(): string {\r\n\t\treturn this._yOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipXField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set tooltipXField(value: string) {\r\n\t\tthis._tooltipXField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get tooltipXField(): string {\r\n\t\tif (this._tooltipXField) {\r\n\t\t\treturn this._tooltipXField;\r\n\t\t}\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipYField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set tooltipYField(value: string) {\r\n\t\tthis._tooltipYField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return [description]\r\n\t */\r\n\tpublic get tooltipYField(): string {\r\n\t\tif (this._tooltipYField) {\r\n\t\t\treturn this._tooltipYField;\r\n\t\t}\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic min(axis: ValueAxis): number {\r\n\t\treturn this._tmin.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic max(axis: ValueAxis): number {\r\n\t\treturn this._tmax.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic selectionMin(axis: ValueAxis): number {\r\n\t\tlet value = this._smin.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.min(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t * @return value\r\n\t */\r\n\tpublic selectionMax(axis: ValueAxis): number {\r\n\t\tlet value = this._smax.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.max(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`.\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`.\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axis ranges\r\n\t\t\tif ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\r\n\t\t\t\tfor (let i = 0, len = config.axisRanges.length; i < len; i++) {\r\n\t\t\t\t\tlet range = config.axisRanges[i];\r\n\t\t\t\t\tif (!$type.hasValue(range.type)) {\r\n\t\t\t\t\t\trange.type = \"AxisDataItem\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ($type.hasValue(range.axis) && $type.isString(range.axis) && this.map.hasKey(range.axis)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.axis);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(range.component) && $type.isString(range.component) && this.map.hasKey(range.component)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Parse date fields based on the series fields\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tthis.processingErrors.push(\"`dataFields` is not set for series [\" + (this.name || \"unnamed\") + \"]\");\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: XYSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tlet x: number = this.xAxis.getX(dataItem, xKey, locationX);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY);\r\n\r\n\t\tx = $math.fitToRange(x, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty = $math.fitToRange(y, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\treturn { x: x, y: y };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates item reader text based on the type and set up of axis.\r\n\t */\r\n\tprotected updateItemReaderText(): void {\r\n\t\tlet text = \"\"\r\n\t\t$object.each(this.dataFields, (key, val) => {\r\n\t\t\ttext += \"{\" + key + \"} \";\r\n\t\t});\r\n\t\tthis.itemReaderText = text;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t *\r\n\t * If set to `true` (default), the tooltips set for all series item's\r\n\t * elements like columns and bullets will be automatically shown\r\n\t * when [[XYCursor]] passes over category/date, even if its not hovered\r\n\t * directly over the item.\r\n\t *\r\n\t * Set this to `false` to disable such behavior and display item-specific\r\n\t * tooltips only when hovered directly over them\r\n\t *\r\n\t * @default true\r\n\t * @param value Display tooltip?\r\n\t */\r\n\tpublic set cursorTooltipEnabled(value: boolean) {\r\n\t\tthis.setPropertyValue(\"cursorTooltipEnabled\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Display tooltip?\r\n\t */\r\n\tpublic get cursorTooltipEnabled(): boolean {\r\n\t\treturn this.getPropertyValue(\"cursorTooltipEnabled\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYSeries\"] = XYSeries;\r\nregistry.registeredClasses[\"XYSeriesDataItem\"] = XYSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/XYSeries.ts","/**\r\n * Cursor module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { 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\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\t// We want to let zoom/pan continue even if cursor is outside chart area\r\n\t\t\tif (!this.isHidden || !this.isHiding) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tif (this._stick == \"hard\" && this._stickPoint) {\r\n\t\t\tlocal = this._stickPoint;\r\n\t\t}\r\n\r\n\t\tif (this._stick == \"soft\" && this._stickPoint) {\r\n\t\t\tif (!this.fitsToBounds(local)) {\r\n\t\t\t\tlocal = this._stickPoint;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\treturn local;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Hides actual SVG elements and handles hiding animations.\r\n\t *\r\n\t * @param duration Fade out duration (ms)\r\n\t * @return Fade out duration (ms)\r\n\t * @ignore\r\n\t */\r\n\tprotected hideReal(duration?: number): $type.Optional {\r\n\t\tif ((this._stick == \"hard\" || this._stick == \"soft\") && this._stickPoint) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn super.hideReal(duration);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * The second parameter has following options:\r\n\t *\r\n\t * `\"none\"` - placed cursor will only be there until mouse/touch moves, then\r\n\t * it either moves to a new place (if pointer over plot area) or is hidden.\r\n\t *\r\n\t * `\"soft\"` - cursor will stay in the place if mouse/touch is happening\r\n\t * outside chart, but will move to a new place whe plot area is hovered or\r\n\t * touched.\r\n\t *\r\n\t * `\"hard\"` - cursor will stay in place no matter what, until it is moved by\r\n\t * another `triggerMove()` call.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t * @param stick Level of cursor stickiness to the place\r\n\t */\r\n\tpublic triggerMove(point: IPoint, stick?: \"hard\" | \"soft\" | \"none\"): void {\r\n\r\n\t\tpoint.x = $math.round(point.x, 1);\r\n\t\tpoint.y = $math.round(point.y, 1);\r\n\r\n\t\tif (stick) {\r\n\t\t\tthis._stick = stick;\r\n\t\t}\r\n\r\n\t\tif (stick == \"hard\" || stick == \"soft\") {\r\n\t\t\tthis._stickPoint = point;\r\n\t\t}\r\n\r\n\t\tthis.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tif (this.point.x != point.x || this.point.y != point.y) {\r\n\t\t\tthis.point = point;\r\n\t\t\tthis.invalidatePosition();\r\n\t\t\t// hide cursor if it's out of bounds\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.show(0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// unless we are selecting (mouse is down)\r\n\t\t\t\tif (!this.downPoint) {\r\n\t\t\t\t\tthis.hide(0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.visible) {\r\n\t\t\t\tthis.getPositions();\r\n\r\n\t\t\t\tthis.dispatch(\"cursorpositionchanged\"); // not good to dispatch later (check step count example)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tpublic triggerDown(point: IPoint) {\r\n\t\tthis.triggerDownReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tswitch (this._generalBehavior) {\r\n\t\t\tcase \"zoom\":\r\n\t\t\t\tthis.dispatchImmediately(\"zoomstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"select\":\r\n\t\t\t\tthis.dispatchImmediately(\"selectstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pan\":\r\n\t\t\t\tthis.dispatchImmediately(\"panstarted\");\r\n\t\t\t\tgetInteraction().setGlobalStyle(MouseCursorStyle.grabbing);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tpublic triggerUp(point: IPoint) {\r\n\t\tthis.triggerUpReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param point Point of action\r\n\t */\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\r\n\t\tthis.updatePoint(this.upPoint);\r\n\t\tlet interaction = getInteraction();\r\n\r\n\t\tif ($math.getDistance(this._upPointOrig, this._downPointOrig) > interaction.getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tswitch (this._generalBehavior) {\r\n\t\t\t\tcase \"zoom\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"zoomended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"select\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"selectended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pan\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"panended\");\r\n\t\t\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t\tthis.updateSelection();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.dispatchImmediately(\"behaviorcanceled\");\r\n\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions(): void {\r\n\t\t// positions are used by axes or series\r\n\t\tthis.xPosition = this.point.x / this.innerWidth;\r\n\t\tthis.yPosition = 1 - this.point.y / this.innerHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer down event so we can start zoom or selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original event\r\n\t */\r\n\tpublic handleCursorDown(event: IInteractionEvents[\"down\"]): void {\r\n\r\n\t\tif (!this.interactionsEnabled || !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// Get local point\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tthis._downPointOrig = { x: local.x, y: local.y };\r\n\r\n\t\t// We need to cancel the event to prevent gestures on touch devices\r\n\t\tif (event.event.cancelable && this.fitsToBounds(local)) {\r\n\t\t\tevent.event.preventDefault();\r\n\t\t}\r\n\r\n\t\t// Make this happen\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerDown(local);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer up event - finishes zoom or selection action.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Original event\r\n\t */\r\n\tpublic handleCursorUp(event: IInteractionEvents[\"up\"]): void {\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\t\tthis._upPointOrig = { x: local.x, y: local.y };\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerUp(local);\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to a [[Chart]] the cursor belongs to.\r\n\t *\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(value: this[\"_chart\"]) {\r\n\t\tthis._chart = value;\r\n\t\tif ($type.hasValue((this._chart).plotContainer)) {\r\n\t\t\tgetInteraction().lockElement((this._chart).plotContainer.interactions);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): this[\"_chart\"] {\r\n\t\treturn this._chart;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Cursor\"] = Cursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/Cursor.ts","/**\r\n * Cursor for XY chart\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Cursor, ICursorProperties, ICursorAdapters, ICursorEvents } from \"./Cursor\";\r\nimport { Sprite, ISpriteEvents } 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 * 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 * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class XYCursor extends Cursor {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IXYCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYCursorEvents;\r\n\r\n\t/**\r\n\t * Vertical cursor line element.\r\n\t */\r\n\tprotected _lineX = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Horizontal cursor line element.\r\n\t */\r\n\tprotected _lineY = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Element which highlights selected area.\r\n\t */\r\n\tprotected _selection: Sprite;\r\n\r\n\t/**\r\n\t * A range of current horizontal selection.\r\n\t */\r\n\tpublic xRange: IRange;\r\n\r\n\t/**\r\n\t * A range of current vertical selection.\r\n\t */\r\n\tpublic yRange: IRange;\r\n\r\n\t/**\r\n\t * Horizontal [[Axis]].\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * Vertical [[Axis]].\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\tprotected _snapToDisposer: IDisposer;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYCursor\";\r\n\r\n\t\t// Defaults\r\n\t\tthis.behavior = \"zoomX\";\r\n\r\n\t\tthis.maxPanOut = 0.1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\t// Create selection element\r\n\t\tlet selection: Sprite = this.createChild(Sprite);\r\n\t\tselection.shouldClone = false;\r\n\t\tselection.fillOpacity = 0.2;\r\n\t\tselection.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tselection.isMeasured = false;\r\n\t\tselection.interactionsEnabled = false;\r\n\t\tthis.selection = selection;\r\n\t\tthis._disposers.push(this.selection);\r\n\r\n\t\t// Create cursor's vertical line\r\n\t\tlet lineX: Sprite = this.createChild(Sprite);\r\n\t\tlineX.shouldClone = false;\r\n\t\tlineX.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineX.fill = color();\r\n\t\tlineX.strokeDasharray = \"3,3\";\r\n\t\tlineX.isMeasured = false;\r\n\t\tlineX.strokeOpacity = 0.4;\r\n\t\tlineX.interactionsEnabled = false;\r\n\t\tlineX.y = 0;// important\r\n\t\tthis.lineX = lineX;\r\n\t\tthis._disposers.push(this.lineX);\r\n\r\n\t\t// Create cursor's horizontal line\r\n\t\tlet lineY: Sprite = this.createChild(Sprite);\r\n\t\tlineY.shouldClone = false;\r\n\t\tlineY.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineY.fill = color();\r\n\t\tlineY.strokeDasharray = \"3,3\";\r\n\t\tlineY.isMeasured = false;\r\n\t\tlineY.strokeOpacity = 0.4;\r\n\t\tlineY.interactionsEnabled = false;\r\n\t\tlineY.x = 0; // important\r\n\t\tthis.lineY = lineY;\r\n\t\tthis._disposers.push(this.lineY);\r\n\r\n\t\t// Add handler for size changes\r\n\t\tthis.events.on(\"sizechanged\", this.updateSize, this, false);\r\n\r\n\t\tthis._disposers.push(this._lineX);\r\n\t\tthis._disposers.push(this._lineY);\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.mask = this;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursor element dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.innerHeight });\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.innerWidth, y: 0 });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tif (this.lineX) {\r\n\t\t\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.lineY) {\r\n\t\t\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\r\n\t\t\t\tlet x: number = Math.min(point.x, downPoint.x);\r\n\t\t\t\tlet y: number = Math.min(point.y, downPoint.y);\r\n\r\n\t\t\t\tlet w: number = $math.round(Math.abs(downPoint.x - point.x), this._positionPrecision);\r\n\t\t\t\tlet h: number = $math.round(Math.abs(downPoint.y - point.y), this._positionPrecision);\r\n\r\n\t\t\t\tswitch (this.behavior) {\r\n\t\t\t\t\tcase \"zoomX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"zoomY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tselection.x = x;\r\n\t\t\t\tselection.y = y;\r\n\r\n\t\t\t\tselection.path = $path.rectangle(w, h);\r\n\r\n\t\t\t\tselection.validatePosition(); // otherwise Edge shoes some incorrect size rectangle\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.selection.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\tpoint.x = Math.max(0, point.x);\r\n\t\tpoint.y = Math.max(0, point.y);\r\n\t\tpoint.x = Math.min(this.pixelWidth, point.x);\r\n\t\tpoint.y = Math.min(this.pixelHeight, point.y);\r\n\r\n\t\treturn point;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tsuper.triggerMoveReal(point);\r\n\r\n\t\tif ((this.snapToSeries && !this.snapToSeries.isHidden)) {\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.updateLinePositions(point);\r\n\t\t}\r\n\r\n\t\tif (this.downPoint && $math.getDistance(this.downPoint, point) > 3) {\r\n\t\t\tif (this._generalBehavior == \"pan\") {\r\n\t\t\t\tthis.getPanningRanges();\r\n\t\t\t\tthis.dispatch(\"panning\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\t\tpoint = this.fixPoint(this.point);\r\n\r\n\t\tif (this.lineX && this.lineX.visible && !this.xAxis) {\r\n\t\t\tthis.lineX.x = point.x;\r\n\t\t}\r\n\t\tif (this.lineY && this.lineY.visible && !this.yAxis) {\r\n\t\t\tthis.lineY.y = point.y;\r\n\t\t}\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tif (this.visible && !this.isHiding) {\r\n\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.downPoint = { x: point.x, y: point.y };\r\n\r\n\t\t\t\tthis.updatePoint(point);\r\n\r\n\t\t\t\t//this.updateLinePositions(point); // otherwise lines won't be in correct position and touch won't work fine\r\n\r\n\t\t\t\tthis.point.x = this.downPoint.x;\r\n\t\t\t\tthis.point.y = this.downPoint.y;\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\t\t\t\tlet selectionX: number = this.downPoint.x;\r\n\t\t\t\tlet selectionY: number = this.downPoint.y;\r\n\r\n\t\t\t\tif (this._usesSelection) {\r\n\t\t\t\t\tselection.x = selectionX;\r\n\t\t\t\t\tselection.y = selectionY;\r\n\t\t\t\t\tselection.path = \"\";\r\n\t\t\t\t\tselection.show();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerDownReal(point);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.downPoint = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t\tif (this.lineX) {\r\n\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\t\tif ($math.getDistance(this._upPointOrig, this._downPointOrig) > getInteraction().getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tif (this.downPoint) {\r\n\t\t\t\tthis.upPoint = point;\r\n\r\n\t\t\t\tthis.updatePoint(this.upPoint);\r\n\r\n\t\t\t\tthis.getRanges();\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerUpReal(point);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.selection.hide(0);\r\n\t\t}\r\n\t\tthis.downPoint = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getPanningRanges() {\r\n\r\n\t\tlet startX = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet startY = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\r\n\t\tlet currentX = $math.round(this.point.x / this.innerWidth, 5);\r\n\t\tlet currentY = $math.round(this.point.y / this.innerHeight, 5);\r\n\r\n\t\tlet deltaX = startX - currentX;\r\n\t\tlet deltaY = -startY + currentY;\r\n\r\n\t\tthis.xRange = { start: deltaX, end: 1 + deltaX };\r\n\t\tthis.yRange = { start: deltaY, end: 1 + deltaY };\r\n\r\n\t\tif (this.behavior == \"panX\") {\r\n\t\t\tthis.yRange.start = 0;\r\n\t\t\tthis.yRange.end = 1;\r\n\t\t}\r\n\t\tif (this.behavior == \"panY\") {\r\n\t\t\tthis.xRange.start = 0;\r\n\t\t\tthis.xRange.end = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges() {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.upPoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.upPoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\r\n\t\t// @todo Is this needed?\r\n\t\tthis.selection;\r\n\r\n\t\tlet startX: number = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet endX: number = $math.round((this.upPoint.x) / this.innerWidth, 5);\r\n\r\n\t\tlet startY: number = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\t\tlet endY: number = $math.round((this.upPoint.y) / this.innerHeight, 5);\r\n\r\n\t\tthis.xRange = { start: $math.min(startX, endX), end: $math.max(startX, endX) };\r\n\t\tthis.yRange = { start: $math.min(startY, endY), end: $math.max(startY, endY) };\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's behavior when it's moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally;\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * E.g. \"zoomXY\" will mean that pressing a mouse (or touching) over plot area\r\n\t * and dragging it will start zooming the chart.\r\n\t *\r\n\t * @param value Bheavior\r\n\t */\r\n\tpublic set behavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\t\tthis.setPropertyValue(\"behavior\", value, true);\r\n\r\n\t\tthis._usesSelection = false;\r\n\r\n\t\tif (value.indexOf(\"zoom\") != -1) {\r\n\t\t\tthis._generalBehavior = \"zoom\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"select\") != -1) {\r\n\t\t\tthis._generalBehavior = \"select\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"pan\") != -1) {\r\n\t\t\tthis._generalBehavior = \"pan\";\r\n\t\t\tthis._usesSelection = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Behavior\r\n\t */\r\n\tpublic get behavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"behavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `xAxis` is set and only in case\r\n\t * `xAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param value Full width?\r\n\t */\r\n\tpublic set fullWidthLineX(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get fullWidthLineX(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `yAxis` is set and only in case\r\n\t * `yAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param value Full width?\r\n\t */\r\n\tpublic set fullWidthLineY(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get fullWidthLineY(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineY\");\r\n\t}\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set maxPanOut(value: number) {\r\n\t\tthis.setPropertyValue(\"maxPanOut\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Full width?\r\n\t */\r\n\tpublic get maxPanOut(): number {\r\n\t\treturn this.getPropertyValue(\"maxPanOut\");\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to X [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `xAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param axis X axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tif (this._xAxis.get() != axis) {\r\n\t\t\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\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\txAxis.title.disabled = true;\r\n\r\n\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.xAxis = xAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\r\n\t\tif (addYAxis) {\r\n\t\t\tlet yAxis: Axis = sourceSeries.yAxis.clone();\r\n\t\t\tscrollbarChart.yAxes.moveValue(yAxis);\r\n\t\t\tyAxis.title.disabled = true;\r\n\t\t\tyAxis.rangeChangeDuration = 0;\r\n\r\n\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.grid.template.stroke = interfaceColors.getFor(\"background\");\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.yAxis = yAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\t\tseries.rangeChangeDuration = 0;\r\n\t\tseries.interpolationDuration = 0;\r\n\t\tseries.defaultState.transitionDuration = 0;\r\n\t\tseries.showOnInit = false;\r\n\r\n\t\tthis._disposers.push(series.events.on(\"validated\", this.zoomOutAxes, this, false));\r\n\r\n\t\t// data might be set drectly on series\r\n\t\tthis._disposers.push(sourceSeries.events.on(\"datavalidated\", () => {\r\n\t\t\tif (series.data != sourceSeries.data) { // data setter doesn't check this\r\n\t\t\t\tseries.data = sourceSeries.data;\r\n\t\t\t}\r\n\t\t}, undefined, false));\r\n\t\tseries.defaultState.properties.visible = true;\r\n\r\n\t\tseries.filters.push(new DesaturateFilter());\r\n\t\tscrollbarChart.series.push(series);\r\n\r\n\t\tthis.updateByOrientation();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateByOrientation() {\r\n\t\tif (this._scrollbarChart) {\r\n\t\t\t$iter.each(this._scrollbarChart.xAxes.iterator(), (xAxis) => {\r\n\t\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = xAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\t$iter.each(this._scrollbarChart.yAxes.iterator(), (yAxis) => {\r\n\t\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = yAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Cleans up after series are removed from Scrollbar.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handleSeriesRemoved(event: IListEvents[\"removed\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.oldValue;\r\n\t\tsourceSeries.events.off(\"validated\", this.zoomOutAxes, this);\r\n\t}\r\n\r\n\t/**\r\n\t * A chart element that is used to display graphs in the Scrollbar.\r\n\t *\r\n\t * This is not the same as `chart`. It's a totally independent instance of\r\n\t * [[XYChart]] with separate config, series, etc.\r\n\t *\r\n\t * It can be configured just like any other [[XYChart]].\r\n\t *\r\n\t * @readonly\r\n\t * @return Scrollbar's internal chart\r\n\t */\r\n\tpublic get scrollbarChart(): XYChart {\r\n\t\treturn this._scrollbarChart;\r\n\t}\r\n\r\n\t/**\r\n\t * A chart that Scrollbar belongs to.\r\n\t *\r\n\t * @param chart Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart) {\r\n\t\tif (this._chart.get() !== chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"datavalidated\", this.handleDataChanged, this, false));\r\n\t\t\tthis.handleDataChanged();\r\n\t\t\tthis._scrollbarChart.dataProvider = chart; // this makes scrollbar chart do not validate data untill charts' data is validated\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Scrollbar's internal chart's data when the main chart's data\r\n\t * changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataChanged() {\r\n\t\t//@todo: what if raw data changed?\r\n\t\tif (this.chart.data != this.scrollbarChart.data) {\r\n\t\t\tthis.scrollbarChart.data = this.chart.data;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms out all axes on the internal chart.\r\n\t */\r\n\tprotected zoomOutAxes() {\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\t$iter.each(scrollbarChart.xAxes.iterator(), (x) => {\r\n\t\t\tx.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t\t$iter.each(scrollbarChart.yAxes.iterator(), (y) => {\r\n\t\t\ty.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates scrollbar thumb.\r\n\t */\r\n\tprotected updateThumb() {\r\n\t\tsuper.updateThumb();\r\n\t\tif (this._unselectedOverlay) {\r\n\t\t\tlet thumb = this.thumb;\r\n\t\t\tlet x: number = thumb.pixelX || 0;\r\n\t\t\tlet y: number = thumb.pixelY || 0;\r\n\t\t\tlet w: number = thumb.pixelWidth || 0;\r\n\t\t\tlet h: number = thumb.pixelHeight || 0;\r\n\r\n\t\t\tlet path: string = \"\";\r\n\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: -1,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: x,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: x + w,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: (this.pixelWidth || 0) - x - w,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: y\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: y + h,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: (this.pixelHeight || 0) - y - h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._unselectedOverlay.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tlet series = config.series[i];\r\n\t\t\t\t\tif ($type.hasValue(series) && $type.isString(series)) {\r\n\t\t\t\t\t\tif (this.map.hasKey(series)) {\r\n\t\t\t\t\t\t\tconfig.series[i] = this.map.getKey(series);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthrow Error(\"XYChartScrollbar error: Series with id `\" + series + \"` does not exist.\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChartScrollbar\"] = XYChartScrollbar;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","/**\r\n * XY Chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Sprite, ISpriteEvents, 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\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\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYChart\";\r\n\r\n\t\t// Set defaults\r\n\t\t//this.margin(10, 10, 10, 10);\r\n\t\tthis.maskBullets = true;\r\n\t\tthis.arrangeTooltips = true;\r\n\r\n\t\t// Create main chart container\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tchartContainer.layout = \"vertical\";\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Create top axes container\r\n\t\tlet topAxesCont = chartContainer.createChild(Container);\r\n\t\ttopAxesCont.shouldClone = false;\r\n\t\ttopAxesCont.layout = \"vertical\";\r\n\t\ttopAxesCont.width = percent(100);\r\n\t\ttopAxesCont.zIndex = 1;\r\n\t\tthis.topAxesContainer = topAxesCont;\r\n\r\n\t\t// Create vertical axes and plot area container\r\n\t\t// Plot area and vertical axes share the whole width of the chart,\r\n\t\t// so we need to put then into a separate container so that layouting\r\n\t\t// engine takes care of the positioning\r\n\t\tlet yAxesAndPlotCont = chartContainer.createChild(Container);\r\n\t\tyAxesAndPlotCont.shouldClone = false;\r\n\t\tyAxesAndPlotCont.layout = \"horizontal\";\r\n\t\tyAxesAndPlotCont.width = percent(100);\r\n\t\tyAxesAndPlotCont.height = percent(100);\r\n\t\tyAxesAndPlotCont.zIndex = 0;\r\n\t\tthis.yAxesAndPlotContainer = yAxesAndPlotCont;\r\n\r\n\t\t// Create a container for bottom axes\r\n\t\tlet bottomAxesCont = chartContainer.createChild(Container);\r\n\t\tbottomAxesCont.shouldClone = false;\r\n\t\tbottomAxesCont.width = percent(100);\r\n\t\tbottomAxesCont.layout = \"vertical\";\r\n\t\tbottomAxesCont.zIndex = 1;\r\n\t\tthis.bottomAxesContainer = bottomAxesCont;\r\n\r\n\t\t// Create a container for left-side axes\r\n\t\tlet leftAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tleftAxesCont.shouldClone = false;\r\n\t\tleftAxesCont.layout = \"horizontal\";\r\n\t\tleftAxesCont.height = percent(100);\r\n\t\tleftAxesCont.contentAlign = \"right\";\r\n\t\tleftAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tleftAxesCont.zIndex = 1;\r\n\t\tthis.leftAxesContainer = leftAxesCont;\r\n\r\n\t\t// Create a container for plot area\r\n\t\tlet plotCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tplotCont.shouldClone = false;\r\n\t\tplotCont.height = percent(100);\r\n\t\tplotCont.width = percent(100);\r\n\t\t// Create transparend background for plot container so that hover works\r\n\t\t// on all of it\r\n\t\tplotCont.background.fillOpacity = 0;\r\n\t\tthis.plotContainer = plotCont;\r\n\r\n\t\t// must go below plot container\r\n\t\tthis.mouseWheelBehavior = \"none\";\r\n\r\n\t\tthis._cursorContainer = plotCont;\r\n\r\n\t\t// Create a container for right-side axes\r\n\t\tlet rightAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\trightAxesCont.shouldClone = false;\r\n\t\trightAxesCont.layout = \"horizontal\";\r\n\t\trightAxesCont.height = percent(100);\r\n\t\trightAxesCont.zIndex = 1;\r\n\t\trightAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tthis.rightAxesContainer = rightAxesCont;\r\n\r\n\t\tthis.seriesContainer.parent = plotCont;\r\n\t\tthis.bulletsContainer.parent = plotCont;\r\n\r\n\t\tlet zoomOutButton = plotCont.createChild(ZoomOutButton);\r\n\t\tzoomOutButton.shouldClone = false;\r\n\t\tzoomOutButton.align = \"right\";\r\n\t\tzoomOutButton.valign = \"top\";\r\n\t\tzoomOutButton.zIndex = Number.MAX_SAFE_INTEGER;\r\n\t\tzoomOutButton.marginTop = 5;\r\n\t\tzoomOutButton.marginRight = 5;\r\n\r\n\t\tzoomOutButton.hide(0);\r\n\t\tthis.zoomOutButton = zoomOutButton;\r\n\r\n\t\tthis._bulletMask = this.plotContainer;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tthis.zoomOutButton.exportable = false;\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tthis.seriesContainer.toFront();\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tif (this.maskBullets) {\r\n\t\t\tthis.bulletsContainer.mask = this._bulletMask;\r\n\t\t}\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers a redrawing of all chart's series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updatePlotElements(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers data (re)validation which in turn can cause a redraw of the\r\n\t * whole chart or just aprticular series / elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\t// tell axes that data changed\r\n\t\tif (this._parseDataFrom == 0) {\r\n\t\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tseries.dataChangeUpdate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates margins for horizontal axes based on settings and available space.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateXAxesMargins(): void {\r\n\r\n\t\tlet leftAxesWidth = this.leftAxesContainer.measuredWidth;\r\n\t\tlet rightAxesWidth = this.rightAxesContainer.measuredWidth;\r\n\t\tlet bottomAxesCont = this.bottomAxesContainer;\r\n\r\n\t\tif (bottomAxesCont.paddingLeft != leftAxesWidth || bottomAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\tbottomAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\tbottomAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\r\n\t\tlet topAxesCont = this.topAxesContainer;\r\n\r\n\t\tif (topAxesCont.paddingLeft != leftAxesWidth || topAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\ttopAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\ttopAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the horizontal axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event object\r\n\t */\r\n\tpublic handleXAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateXAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the vertical axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event object\r\n\t */\r\n\tpublic handleYAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateYAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new horizontal (X) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Axis insert event\r\n\t */\r\n\tpublic processXAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererX();\r\n\t\taxis.axisLetter = \"X\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleXAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleXAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleXAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateXAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new vertical (Y) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Axis insert event\r\n\t */\r\n\tpublic processYAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererY();\r\n\t\taxis.axisLetter = \"Y\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleYAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleYAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleYAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateYAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates horizontal (X) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.zoomAxes(this.xAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarX, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows or hides the Zoom Out button depending on whether the chart is fully\r\n\t * zoomed out or not.\r\n\t */\r\n\tprotected toggleZoomOutButton() {\r\n\t\tif (this.zoomOutButton) {\r\n\t\t\tlet show = false;\r\n\r\n\t\t\t$iter.eachContinue(this.xAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\t$iter.eachContinue(this.yAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tif (!this.seriesAppeared) {\r\n\t\t\t\tshow = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (show) {\r\n\t\t\t\tthis.zoomOutButton.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.zoomOutButton.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * moved this check to a separate method so that we could override it in TreeMapSeries\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\tlet appeared: boolean = false;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (!series.appeared) {\r\n\t\t\t\tappeared = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn appeared;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates vertical (Y) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.zoomAxes(this.yAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarY, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a relative scrollbar whenever data range of the axis changes.\r\n\t *\r\n\t * @param scrollbar Scrollbar instance\r\n\t * @param range New data (values) range of the axis\r\n\t */\r\n\tprotected updateScrollbar(scrollbar: Scrollbar, range: IRange): void {\r\n\t\tif (scrollbar) {\r\n\t\t\tscrollbar.skipRangeEvents();\r\n\t\t\tscrollbar.start = range.start;\r\n\t\t\tscrollbar.end = range.end;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a common range of values between a list of axes.\r\n\t *\r\n\t * This is used to synchronize the zoom between multiple axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axes A list of axes\r\n\t * @return Common value range\r\n\t */\r\n\tpublic getCommonAxisRange(axes: List): IRange {\r\n\t\tlet start: Optional;\r\n\t\tlet end: Optional;\r\n\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tlet axisStart = axis.start;\r\n\t\t\tlet axisEnd = axis.end;\r\n\r\n\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\taxisStart = 1 - axis.end;\r\n\t\t\t\taxisEnd = 1 - axis.start;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNumber(start) || (axisStart < start)) {\r\n\t\t\t\tstart = axisStart;\r\n\t\t\t}\r\n\t\t\tif (!$type.isNumber(end) || (axisEnd > end)) {\r\n\t\t\t\tend = axisEnd;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn { start: start, end: end };\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.topAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.bottomAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.rightAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.leftAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates an Axis for use with this chart, e.g. sets proper renderer\r\n\t * and containers for placement.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\t// Value axis does not use data directly, only category axis does\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\tthis._dataUsers.moveValue(axis);\r\n\t\t}\r\n\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\r\n\t\trenderer.gridContainer.parent = this.plotContainer;\r\n\t\trenderer.gridContainer.toBack();\r\n\r\n\t\trenderer.breakContainer.parent = this.plotContainer;\r\n\t\trenderer.breakContainer.toFront();\r\n\t\trenderer.breakContainer.zIndex = 10;\r\n\r\n\t\taxis.addDisposer(new Disposer(() => {\r\n\t\t\tthis.dataUsers.removeValue(axis);\r\n\t\t}))\r\n\r\n\t\tthis.plotContainer.events.on(\"maxsizechanged\", () => {\r\n\t\t\tif (this.inited) {\r\n\t\t\t\taxis.invalidateDataItems();\r\n\t\t\t}\r\n\t\t}, axis, false);\r\n\t}\r\n\r\n\t/**\r\n\t * A list of horizontal (X) axes.\r\n\t *\r\n\t * @return List of axes\r\n\t */\r\n\tpublic get xAxes(): List> {\r\n\t\tif (!this._xAxes) {\r\n\t\t\tthis._xAxes = new List>();\r\n\t\t\tthis._xAxes.events.on(\"inserted\", this.processXAxis, this, false);\r\n\t\t\tthis._xAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._xAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected handleAxisRemoval(event: IListEvents[\"removed\"]) {\r\n\t\tlet axis = event.oldValue;\r\n\t\tthis.dataUsers.removeValue(axis); // need to remove, as it might not be disposed\r\n\t\tif (axis.autoDispose) {\r\n\t\t\taxis.dispose();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of vertical (Y) axes.\r\n\t *\r\n\t * @return List of axes\r\n\t */\r\n\tpublic get yAxes(): List> {\r\n\t\tif (!this._yAxes) {\r\n\t\t\tthis._yAxes = new List>();\r\n\t\t\tthis._yAxes.events.on(\"inserted\", this.processYAxis, this, false);\r\n\t\t\tthis._yAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._yAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new [[XYSeries]] object with required parameters when it is\r\n\t * added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event Event\r\n\t */\r\n\tpublic handleSeriesAdded(event: IListEvents[\"inserted\"]): void {\r\n\t\ttry {\r\n\t\t\tsuper.handleSeriesAdded(event);\r\n\t\t\tlet series: XYSeries = event.newValue;\r\n\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\tseries.xAxis; // this is enough to get axis, handled in getter\r\n\t\t\tseries.yAxis; // this is enough to get axis, handled in getter\r\n\r\n\t\t\tif (series.fill == undefined) {\r\n\t\t\t\tseries.fill = this.colors.next();\r\n\t\t\t}\r\n\r\n\t\t\tif (series.stroke == undefined) {\r\n\t\t\t\tseries.stroke = series.fill;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Chart's [[Cursor]].\r\n\t *\r\n\t * @param cursor Cursor\r\n\t */\r\n\tpublic set cursor(cursor: this[\"_cursor\"]) {\r\n\t\tif (this._cursor != cursor) {\r\n\t\t\tif (this._cursor) {\r\n\t\t\t\tthis.removeDispose(this._cursor);\r\n\t\t\t}\r\n\r\n\t\t\tthis._cursor = cursor;\r\n\r\n\t\t\tif (cursor) {\r\n\t\t\t\t// TODO this is wrong, fix it\r\n\t\t\t\tthis._disposers.push(cursor);\r\n\t\t\t\tcursor.chart = this;\r\n\t\t\t\tcursor.parent = this._cursorContainer;\r\n\t\t\t\tcursor.events.on(\"cursorpositionchanged\", this.handleCursorPositionChange, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomstarted\", this.handleCursorZoomStart, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomended\", this.handleCursorZoomEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"panstarted\", this.handleCursorPanStart, this, false);\r\n\t\t\t\tcursor.events.on(\"panning\", this.handleCursorPanning, this, false);\r\n\t\t\t\tcursor.events.on(\"panended\", this.handleCursorPanEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"behaviorcanceled\", this.handleCursorCanceled, this, false);\r\n\t\t\t\tcursor.events.on(\"hidden\", this.handleHideCursor, this, false);\r\n\t\t\t\tcursor.zIndex = Number.MAX_SAFE_INTEGER - 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Cursor\r\n\t */\r\n\tpublic get cursor(): this[\"_cursor\"] {\r\n\t\treturn this._cursor;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new [[Cursor]] suitable for this chart type.\r\n\t *\r\n\t * @return New cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new XYCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs tasks when the cursor's position changes, e.g. shows proper\r\n\t * tooltips on axes and series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleCursorPositionChange(): void {\r\n\r\n\t\tlet cursor = this.cursor;\r\n\r\n\t\tif (cursor.visible && !cursor.isHiding) {\r\n\t\t\tlet xPosition: number = this.cursor.xPosition;\r\n\t\t\tlet yPosition: number = this.cursor.yPosition;\r\n\r\n\t\t\tthis.showSeriesTooltip({\r\n\t\t\t\tx: xPosition,\r\n\t\t\t\ty: yPosition\r\n\t\t\t});\r\n\r\n\t\t\tlet exceptAxis: Axis;\r\n\t\t\tlet snapToSeries = cursor.snapToSeries;\r\n\t\t\tif (snapToSeries) {\r\n\t\t\t\tif (snapToSeries.baseAxis == snapToSeries.xAxis) {\r\n\t\t\t\t\texceptAxis = snapToSeries.yAxis;\r\n\t\t\t\t}\r\n\t\t\t\tif (snapToSeries.baseAxis == snapToSeries.yAxis) {\r\n\t\t\t\t\texceptAxis = snapToSeries.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.showAxisTooltip(this.xAxes, xPosition, exceptAxis);\r\n\t\t\tthis.showAxisTooltip(this.yAxes, yPosition, exceptAxis);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides all cursor-related tooltips when the cursor itself is hidden.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleHideCursor(): void {\r\n\t\tthis.hideObjectTooltip(this.xAxes);\r\n\t\tthis.hideObjectTooltip(this.yAxes);\r\n\t\tthis.hideObjectTooltip(this.series);\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates values for each series' legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSeriesLegend(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.updateLegendValue();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hides a tooltip for a list of objects.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param sprites A list of sprites to hide tooltip for\r\n\t */\r\n\tpublic hideObjectTooltip(sprites: List): void {\r\n\t\t$iter.each(sprites.iterator(), (sprite) => {\r\n\t\t\tsprite.hideTooltip(0);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Shows a tooltip for all chart's series, using specific coordinates as a\r\n\t * reference point.\r\n\t *\r\n\t * The tooltip might be shown at different coordinates depending on the\r\n\t * actual data point's position, overlapping with other tooltips, etc.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Reference point\r\n\t */\r\n\tpublic showSeriesTooltip(position?: IPoint): void {\r\n\r\n\t\tif (!position) {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tseries.hideTooltip();\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet seriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\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;\r\n\t\t\t}\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndXRange = undefined;\r\n\t\t\tthis._panStartXRange = undefined;\r\n\t\t}\r\n\t\tif (this._panEndYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndYRange;\r\n\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndYRange = undefined;\r\n\t\t\tthis._panStartYRange = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleCursorCanceled(): void {\r\n\t\tthis._panEndXRange = undefined;\r\n\t\tthis._panStartXRange = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanning(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tlet maxPanOut = cursor.maxPanOut;\r\n\t\tif (this._panStartXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartXRange;\r\n\t\t\tlet range = cursor.xRange;\r\n\r\n\t\t\tlet axisRange = this.getCommonAxisRange(this.xAxes);\r\n\r\n\t\t\tlet difference = (panStartRange.end - panStartRange.start);\r\n\t\t\tlet delta = range.start * (axisRange.end - axisRange.start);\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndXRange = newRange;\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, newRange, false, false, cursor.maxPanOut);\r\n\t\t}\r\n\r\n\t\tif (this._panStartYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartYRange;\r\n\t\t\tlet range = cursor.yRange;\r\n\r\n\t\t\tlet axisRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\t\tlet difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start * (axisRange.end - axisRange.start);\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndYRange = newRange;\r\n\t\t\tthis.zoomAxes(this.yAxes, newRange, false, false, cursor.maxPanOut);\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user starts zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomStart(event: IXYCursorEvents[\"zoomstarted\"]): void {\r\n\r\n\t\t// Nothing here\r\n\t\t// This method is here only as a \"placeholder\" for extending classes to\r\n\t\t// override if necessary\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal (X) scrollbar.\r\n\t *\r\n\t * @param scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarX(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarX) {\r\n\t\t\tthis.removeDispose(this._scrollbarX);\r\n\t\t}\r\n\t\tthis._scrollbarX = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.topAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toBack();\r\n\t\t\tscrollbar.orientation = \"horizontal\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleXScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\t\t\tif (xAxis) {\r\n\t\t\t\t\targ.value = xAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Scrollbar\r\n\t */\r\n\tpublic get scrollbarX(): Scrollbar {\r\n\t\treturn this._scrollbarX;\r\n\t}\r\n\r\n\t/**\r\n\t * Vertical (Y) scrollbar.\r\n\t *\r\n\t * @param scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarY(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarY) {\r\n\t\t\tthis.removeDispose(this._scrollbarY);\r\n\t\t}\r\n\t\tthis._scrollbarY = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.rightAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toFront();\r\n\t\t\tscrollbar.orientation = \"vertical\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleYScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\t\t\tif (yAxis) {\r\n\t\t\t\t\targ.value = yAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Scrollbar\r\n\t */\r\n\tpublic get scrollbarY(): Scrollbar {\r\n\t\treturn this._scrollbarY;\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the horizontal (X) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param event Scrollbar range change event\r\n\t */\r\n\tprotected handleXScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tif (this.inited) {\r\n\t\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\t\tlet range = scrollbar.range;\r\n\t\t\tif (range.end == 1) {\r\n\t\t\t\trange.priority = \"end\";\r\n\t\t\t}\r\n\t\t\tif (range.start == 0) {\r\n\t\t\t\trange.priority = \"start\";\r\n\t\t\t}\r\n\t\t\trange = this.zoomAxes(this.xAxes, range);\r\n\t\t\tscrollbar.fixRange(range);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the vertical (Y) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param event Scrollbar range change event\r\n\t */\r\n\tprotected handleYScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tif (this.inited) {\r\n\t\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\t\tlet range = scrollbar.range;\r\n\t\t\tif (range.end == 1) {\r\n\t\t\t\trange.priority = \"end\";\r\n\t\t\t}\r\n\t\t\tif (range.start == 0) {\r\n\t\t\t\trange.priority = \"start\";\r\n\t\t\t}\r\n\t\t\trange = this.zoomAxes(this.yAxes, range);\r\n\t\t\tscrollbar.fixRange(range);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes that are affected by to specific relative range.\r\n\t *\r\n\t * @param axes List of axes to zoom\r\n\t * @param range Range of values to zoom to (0-1)\r\n\t * @param instantly If set to `true` will skip zooming animation\r\n\t * @return Recalculated range that is common to all involved axes\r\n\t */\r\n\tprotected zoomAxes(axes: List>, range: IRange, instantly?: boolean, round?: boolean, declination?: number): IRange {\r\n\t\tlet realRange: IRange = { start: 0, end: 1 };\r\n\r\n\t\tthis.showSeriesTooltip(); // hides\r\n\r\n\t\tif (!this.dataInvalid) {\r\n\t\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\trange = $math.invertRange(range);\r\n\t\t\t\t}\r\n\r\n\t\t\t\taxis.hideTooltip(0);\r\n\r\n\t\t\t\tif (round) {\r\n\t\t\t\t\tlet diff = range.end - range.start;\r\n\t\t\t\t\trange.start = axis.roundPosition(range.start + 0.0001, 0);\r\n\t\t\t\t\trange.end = range.start + diff;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet axisRange: IRange = axis.zoom(range, instantly, instantly, declination);\r\n\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\taxisRange = $math.invertRange(axisRange);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trealRange = axisRange;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn realRange;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if bullet container is masked.\r\n\t *\r\n\t * If it is set to `true`, any bullets that do not fit into bullet container\r\n\t * will be clipped off. Settting to `false` will allow bullets to \"spill out\"\r\n\t * of the plot area so they are not cut off.\r\n\t *\r\n\t * @param value Mask bullet container?\r\n\t */\r\n\tpublic set maskBullets(value: boolean) {\r\n\t\tthis.setPropertyValue(\"maskBullets\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Mask bullet container?\r\n\t */\r\n\tpublic get maskBullets(): boolean {\r\n\t\treturn this.getPropertyValue(\"maskBullets\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if chart should arrange series tooltips so that they would not\r\n\t * overlap.\r\n\t *\r\n\t * If set to `true` (default), the chart will adjust vertical positions of\r\n\t * all simultaneously shown tooltips to avoid overlapping.\r\n\t *\r\n\t * However, if you have a vertically-arranged chart, it might not make sense,\r\n\t * because tooltips would most probably not be aligned horizontally. In this\r\n\t * case it would probably be a good idea to set this setting to `false`.\r\n\t *\r\n\t * @default true\r\n\t * @param value Arrange tooltips?\r\n\t */\r\n\tpublic set arrangeTooltips(value: boolean) {\r\n\t\tthis.setPropertyValue(\"arrangeTooltips\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Arrange tooltips?\r\n\t */\r\n\tpublic get arrangeTooltips(): boolean {\r\n\t\treturn this.getPropertyValue(\"arrangeTooltips\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Handles mouse wheel event.\r\n\t *\r\n\t * @param event Original event\r\n\t */\r\n\tprotected handleWheel(event: AMEvent[\"wheel\"]) {\r\n\t\tlet plotContainer = this.plotContainer;\r\n\t\tlet svgPoint: IPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n\t\tlet plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n\t\tlet shift = event.shift.y;\r\n\r\n\t\tlet rangeX: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tlet rangeY: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tlet shiftStep = 0.05;\r\n\r\n\t\tlet maxPanOut = 0;\r\n\r\n\t\tlet mouseWheelBehavior = this.mouseWheelBehavior;\r\n\r\n\t\tif (mouseWheelBehavior == \"panX\" || mouseWheelBehavior == \"panXY\") {\r\n\r\n\t\t\tlet differenceX = rangeX.end - rangeX.start;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartX <= 0) {\r\n\t\t\t\tnewEndX = newStartX + differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndX >= 1) {\r\n\t\t\t\tnewStartX = newEndX - differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"panY\" || mouseWheelBehavior == \"panXY\") {\r\n\t\t\tshift *= -1;\r\n\t\t\tlet differenceY = rangeY.end - rangeY.start;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartY <= 0) {\r\n\t\t\t\tnewEndY = newStartY + differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndY >= 1) {\r\n\t\t\t\tnewStartY = newEndY - differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomX\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationX = plotPoint.x / plotContainer.maxWidth;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start - shiftStep * shift / 100 * locationX);\r\n\t\t\tnewStartX = Math.min(newStartX, locationX);\r\n\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100 * (1 - locationX), 1 + maxPanOut);\r\n\t\t\tnewEndX = Math.max(newEndX, locationX);\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomY\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationY = plotPoint.y / plotContainer.maxHeight;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start - shiftStep * shift / 100 * (1 - locationY));\r\n\t\t\tnewStartY = Math.min(newStartY, locationY);\r\n\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * locationY, 1 + maxPanOut);\r\n\t\t\tnewEndY = Math.max(newEndY, locationY);\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies action for when mouse wheel is used when over the chart.\r\n\t *\r\n\t * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`, `\"panXY\"`, `\"none\"` (default).\r\n\t *\r\n\t * @default \"none\"\r\n\t * @param mouse wheel behavior\r\n\t */\r\n\tpublic set mouseWheelBehavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\r\n\t\tif (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n\t\t\tif (value != \"none\") {\r\n\t\t\t\tthis._mouseWheelDisposer = this.plotContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n\t\t\t\tthis._disposers.push(this._mouseWheelDisposer);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this._mouseWheelDisposer) {\r\n\t\t\t\t\tthis.plotContainer.wheelable = false;\r\n\t\t\t\t\tthis.plotContainer.hoverable = false;\r\n\t\t\t\t\tthis._mouseWheelDisposer.dispose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Mouse wheel behavior\r\n\t */\r\n\tpublic get mouseWheelBehavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"mouseWheelBehavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `dateFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-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\t\tsuper.copyFrom(source);\r\n\t\tthis.xAxes.copyFrom(source.xAxes);\r\n\t\tthis.yAxes.copyFrom(source.yAxes);\r\n\r\n\t\tthis.zoomOutButton.copyFrom(source.zoomOutButton);\r\n\t\t//@todo copy all container properties\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\r\n\t\tlet scrollbarX = this.scrollbarX;\r\n\t\tif (scrollbarX && scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarX.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tlet scrollbarY = this.scrollbarY;\r\n\t\tif (scrollbarY && scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarY.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\r\n\t\tthis.yAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Adds one or several (array) of data items to the existing data.\r\n\t *\r\n\t * @param rawDataItem One or many raw data item objects\r\n\t */\r\n\tpublic addData(rawDataItem: Object | Object[], removeCount?: number): void {\r\n\t\tsuper.addData(rawDataItem, removeCount);\r\n\t\tif (this.scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarX.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t\tif (this.scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarY.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart\"] = XYChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesSegmentAdapters extends IContainerAdapters, ILineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link ILineSeriesSegmentEvents} for a list of available events\r\n * @see {@link ILineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class LineSeriesSegment extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesSegment\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.interactionsEnabled = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\t// Create fill element\r\n\t\tlet fillSprite = this.createChild(Sprite);\r\n\t\tthis.fillSprite = fillSprite;\r\n\t\tfillSprite.shouldClone = false;\r\n\t\tfillSprite.setElement(this.paper.add(\"path\"));\r\n\t\tfillSprite.isMeasured = false;\r\n\t\tthis._disposers.push(fillSprite);\r\n\r\n\r\n\t\t// Create line element\r\n\t\tlet strokeSprite = this.createChild(Sprite);\r\n\t\tthis.strokeSprite = strokeSprite;\r\n\t\tstrokeSprite.shouldClone = false;\r\n\t\tstrokeSprite.setElement(this.paper.add(\"path\"));\r\n\t\tstrokeSprite.isMeasured = false;\r\n\t\tthis._disposers.push(strokeSprite);\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param points Points to connect\r\n\t * @param closePoints ?\r\n\t * @param smoothnessX Horizontal bezier setting (?)\r\n\t * @param smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number): void {\r\n\t\tif (!this.disabled) {\r\n\t\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\t\t\t\t// first moveTo helps to avoid Chrome straight line in the mask bug.\r\n\t\t\t\tlet path: string = $path.moveTo({ x: points[0].x - 0.2, y: points[0].y - 0.2 }) + $path.moveTo(points[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(points);\r\n\r\n\t\t\t\tif (this.strokeOpacity == 0 || this.strokeSprite.strokeOpacity == 0) {\r\n\t\t\t\t\t// like this and not if != 0, otherwise ranges stroke won't be drawn.\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.strokeSprite.path = path;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.fillSprite.path = \"\";\r\n\t\t\t\tthis.strokeSprite.path = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Copies properties from a [[Sprite]] to both line and fill elements.\r\n\t *\r\n\t * @param source Source [[Sprite]] to copy properties from\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\r\n\t\tlet lineElement = this.strokeSprite;\r\n\t\t$object.copyProperties(source, lineElement.properties, visualProperties);\r\n\t\tlineElement.fillOpacity = 0;\r\n\r\n\t\tlet fillElement = this.fillSprite;\r\n\t\t$object.copyProperties(source, fillElement.properties, visualProperties);\r\n\t\tfillElement.strokeOpacity = 0;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeriesSegment\"] = LineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeriesSegment.ts","/**\r\n * Line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesDataFields, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, 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 { 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\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[LineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class LineSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: LineSeries;\r\n\r\n\t/**\r\n\t * Point of line series data item\r\n\t */\r\n\tpublic point: IPoint;\r\n\r\n\t/**\r\n\t * A reference to a segment object, used for getting proper colors for tooltips\r\n\t */\r\n\tpublic segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesDataItem\";\r\n\t}\r\n\r\n\t// @todo: minimums/maximums\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Vertical tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionY?: number;\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tconnect?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesAdapters extends IXYSeriesAdapters, ILineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a line graph.\r\n *\r\n * @see {@link ILineSeriesEvents} for a list of available Events\r\n * @see {@link ILineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class LineSeries extends XYSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ILineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: LineSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of line series segments.\r\n\t *\r\n\t * Segments are used in two cases:\r\n\t *\r\n\t * * When we want to change the appearance of a part of the line series;\r\n\t * * When we have an axis range.\r\n\t */\r\n\tpublic segments: ListTemplate;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * A container for segment elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic segmentsContainer: Container;\r\n\r\n\t/**\r\n\t * Minimum distance in pixels between two adjacent points.\r\n\t *\r\n\t * If the distance is less than this setting, a point is skipped.\r\n\t *\r\n\t * This allows acceptable performance with huge amounts of data points.\r\n\t *\r\n\t * @default 0.5\r\n\t */\r\n\tpublic minDistance: number = 0.5;\r\n\r\n\t/**\r\n\t * Iterator for segments.\r\n\t */\r\n\tprotected _segmentsIterator: $iter.ListIterator;\r\n\r\n\tprotected _adjustedStartIndex: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.segments = new ListTemplate(this.createSegment());\r\n\t\tthis.segments.template.applyOnClones = true;\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.segments));\r\n\t\tthis._disposers.push(this.segments.template);\r\n\r\n\t\tthis._segmentsIterator = new $iter.ListIterator(this.segments, () => this.segments.create());\r\n\t\tthis._segmentsIterator.createNewItems = true;\r\n\r\n\t\tthis.className = \"LineSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.fillOpacity = 0;\r\n\r\n\t\tthis.connect = true;\r\n\r\n\t\tthis.tensionX = 1;\r\n\t\tthis.tensionY = 1;\r\n\r\n\t\tthis.segmentsContainer = this.mainContainer.createChild(Container);\r\n\t\tthis.segmentsContainer.isMeasured = false;\r\n\r\n\t\t// line series might have multiple segments and it has a separate sprite for fill and stroke for each segment. So we need to observe all the changes on series and set them on the segments\r\n\t\t// todo: we need list here, otherwise everything will be redrawn event on change of properties like tooltipX or similar.\r\n\t\t// this.addEventListener(SpriteEvent.PROPERTY_CHANGED, this.validateDataElements, false, this);\r\n\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Line Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new LineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new LineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\t// this makes data items animate when added\r\n\t\tif (this.appeared && this.visible) {\r\n\r\n\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\r\n\t\t\tlet previousDataItem: XYSeriesDataItem = this.dataItems.getIndex(dataItem.index - 1);\r\n\r\n\t\t\tdataItem.component = this; // as these values are set before, we don't know component yet\r\n\r\n\t\t\tif (this.baseAxis == xAxis) {\r\n\t\t\t\tif (yAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialY: number = yAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialY = previousDataItem.values[\"valueY\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this makes line animate from previous point to newly added point\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", initialY, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", dataItem.values.valueY.value);\r\n\r\n\t\t\t\t\tif (xAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == yAxis) {\r\n\t\t\t\tif (xAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialX: number = xAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialX = previousDataItem.values[\"valueX\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", initialX, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", dataItem.values.valueX.value);\r\n\r\n\t\t\t\t\tif (yAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates corresponding legend data item with current values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\t\t//This is hack to save some methos, used to set tooltip color source only\r\n\t\tif (dataItem && dataItem.segment) {\r\n\t\t\tthis.tooltipColorSource = dataItem.segment;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tthis._segmentsIterator.reset();\r\n\r\n\t\tthis.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\t\t$array.each(properties, (property) => {\r\n\t\t\tif ($type.hasValue(propertyFields[property])) {\r\n\t\t\t\tfor (let i = startIndex; i >= 0; i--) {\r\n\t\t\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\t\t\tif ($type.hasValue(dataItem.properties[property])) {\r\n\t\t\t\t\t\tif (adjustedIndex > i) {\r\n\t\t\t\t\t\t\tadjustedIndex = i;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn adjustedIndex;\r\n\t}\r\n\r\n\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 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\r\n\t\tlet closeIndex: number;\r\n\t\tlet propertiesChanged: boolean = false;\r\n\r\n\t\tlet segment: LineSeriesSegment = this._segmentsIterator.getFirst();\r\n\t\tsegment.__disabled = false;\r\n\r\n\t\tif (axisRange) {\r\n\t\t\tsegment.parent = axisRange.contents;\r\n\t\t\t$object.copyProperties(axisRange.contents, segment, visualProperties);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$object.copyProperties(this, segment, visualProperties);\r\n\t\t\tsegment.filters.clear();\r\n\t\t\tsegment.parent = this.segmentsContainer;\r\n\t\t}\r\n\r\n\t\tfor (let i: number = openIndex; i < endIndex; i++) {\r\n\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.segment = segment;\r\n\r\n\t\t\tif (dataItem.hasProperties) {\r\n\t\t\t\t// if this is first item of segment\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tthis.updateSegmentProperties(dataItem.properties, segment);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// this time we only need to know if properties changed, so we don't pass segment\r\n\t\t\t\t\tpropertiesChanged = this.updateSegmentProperties(dataItem.properties, segment, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tthis.addPoints(points, dataItem, this.xField, this.yField);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// if no values in first data item, go to next\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlet connect: boolean = this.connect;\r\n\t\t\t\t\t// todo: other connect conditions\r\n\r\n\t\t\t\t\t// stop cycle\r\n\t\t\t\t\tif (!connect) {\r\n\t\t\t\t\t\tcloseIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcloseIndex = i;\r\n\r\n\t\t\tif (propertiesChanged) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.closeSegment(segment, points, openIndex, closeIndex, axisRange);\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points [description]\r\n\t * @param dataItem [description]\r\n\t * @param xField [description]\r\n\t * @param yField [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean) {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.workingLocations[xField], dataItem.workingLocations[yField]);\r\n\t\tif (!backwards) {\r\n\t\t\tdataItem.point = point;\r\n\t\t}\r\n\t\tpoints.push(point);\r\n\t}\r\n\r\n\t/**\r\n\t * [closeSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param segment [description]\r\n\t * @param points [description]\r\n\t * @param openIndex [description]\r\n\t * @param closeIndex [description]\r\n\t * @param axisRange [description]\r\n\t */\r\n\tprotected closeSegment(segment: LineSeriesSegment, points: IPoint[], openIndex: number, closeIndex: number, axisRange?: AxisDataItem) {\r\n\r\n\t\tlet closePoints: IPoint[] = [];\r\n\r\n\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\tthis.stacked) {\r\n\t\t\tfor (let i: number = closeIndex; i >= openIndex; i--) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) { // not sure, this means that open point will only be added if value is also set for this point, but maybe it's ok.\r\n\t\t\t\t\tthis.addPoints(closePoints, dataItem, this.xOpenField, this.yOpenField, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet baseAxis: Axis = this.baseAxis;\r\n\t\t\tlet count: number = points.length;\r\n\t\t\tlet xAxis: Axis = this.xAxis;\r\n\t\t\tlet yAxis: Axis = this.yAxis;\r\n\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 (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\t\t\tif (bullet.copyToLegendMarker) {\r\n\r\n\t\t\t\t// do not copy bullets with labels\r\n\t\t\t\tlet hasLabels: boolean = false;\r\n\t\t\t\t$iter.each(bullet.children.iterator(), (child) => {\r\n\t\t\t\t\tif (child instanceof Label) {\r\n\t\t\t\t\t\thasLabels = true;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (!hasLabels) {\r\n\t\t\t\t\tlet clone: Sprite = bullet.clone();\r\n\t\t\t\t\tclone.parent = marker;\r\n\t\t\t\t\tclone.isMeasured = true;\r\n\t\t\t\t\tclone.tooltipText = undefined;\r\n\t\t\t\t\tclone.x = w / 2;\r\n\t\t\t\t\tif (this.fillOpacity > 0) {\r\n\t\t\t\t\t\tclone.y = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tclone.y = h / 2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tclone.visible = true;\r\n\r\n\t\t\t\t\t// otherwise will not transit to color after hiding\r\n\t\t\t\t\tif (!$type.hasValue(clone.fill)) {\r\n\t\t\t\t\t\tclone.fill = this.fill;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!$type.hasValue(clone.stroke)) {\r\n\t\t\t\t\t\tclone.stroke = this.stroke;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.segments.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeries\"] = LineSeries;\r\nregistry.registeredClasses[\"LineSeriesDataItem\"] = LineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeries.ts","/**\r\n * Radar series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeriesDataItem\";\r\n\r\n\t\tthis.setLocation(\"dateX\", 0, 0);\r\n\t\tthis.setLocation(\"dateY\", 0, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesProperties extends ILineSeriesProperties {\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tconnectEnds?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarSeriesAdapters extends ILineSeriesAdapters, IRadarSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a radar graph.\r\n *\r\n * @see {@link IRadarSeriesEvents} for a list of available Events\r\n * @see {@link IRadarSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IRadarSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: RadarSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeries\";\r\n\t\tthis.connectEnds = true;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new RadarSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\t//\t\tangle = $math.fitToRange(angle, startAngle, endAngle);\r\n\t\tif (angle < startAngle || angle > endAngle) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points [description]\r\n\t * @param dataItem [description]\r\n\t * @param xField [description]\r\n\t * @param yField [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.locations[xField], dataItem.locations[yField]);\r\n\t\tif (point) {\r\n\t\t\tpoints.push(point);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [drawSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param segment [description]\r\n\t * @param points [description]\r\n\t * @param closePoints [description]\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet axis: Axis = this.yAxis;\r\n\t\tlet renderer: AxisRendererRadial = axis.renderer;\r\n\r\n\t\tif (this.connectEnds && Math.abs(renderer.endAngle - renderer.startAngle) == 360) {\r\n\t\t\t// adds one point to the beginning of closePoints array, if needed\r\n\t\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\t\tthis.stacked) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t\tif (closePoints.length > 0) {\r\n\t\t\t\t\tclosePoints.unshift(closePoints[closePoints.length - 1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsuper.drawSegment(segment, points, closePoints);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t * @param value Connect?\r\n\t */\r\n\tpublic set connectEnds(value: boolean) {\r\n\t\tthis.setPropertyValue(\"connectEnds\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Connect?\r\n\t */\r\n\tpublic get connectEnds(): boolean {\r\n\t\treturn this.getPropertyValue(\"connectEnds\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarSeries\"] = RadarSeries;\r\nregistry.registeredClasses[\"RadarSeriesDataItem\"] = RadarSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarSeries.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { XYCursor, IXYCursorAdapters, IXYCursorEvents, IXYCursorProperties } from \"./XYCursor\";\r\nimport { 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 * 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\tvar startAngle = slice.startAngle;\r\n\t\t\t// find quarter\r\n\t\t\t//q0 || q1\r\n\t\t\tif ((startAngle >= -90 && startAngle < 90)) {\r\n\t\t\t\tslice.toFront();\r\n\t\t\t}\r\n\t\t\t//q2 || q3\r\n\t\t\telse if ((startAngle >= 90)) {\r\n\t\t\t\tslice.toBack();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t *\r\n\t * @param value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie. (0-360)\r\n\t *\r\n\t * @param value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet): void {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t\tlet slice = dataItem.slice;\r\n\r\n\t\tbullet.y = bullet.pixelY - slice.depth;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieSeries3D\"] = PieSeries3D;\r\nregistry.registeredClasses[\"PieSeries3DDataItem\"] = PieSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PieSeries3D.ts","/**\r\n * 3D Pie chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieChart, IPieChartProperties, IPieChartDataFields, IPieChartAdapters, IPieChartEvents, PieChartDataItem } from \"./PieChart\";\r\nimport { 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 * 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\tthis.label = this.createChild(AxisLabelCircular);\r\n\t\tthis.label.location = 0.5;\r\n\t\tthis.label.radius = 5;\r\n\t\tthis.label.text = \"{name}\";\r\n\t\tthis.label.zIndex = 1;\r\n\t\tthis.label.shouldClone = false;\r\n\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.events.on(\"positionchanged\", this.updateRotation, this, false);\r\n\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.slice = this.createChild(Slice);\r\n\t\tthis.slice.isMeasured = false;\r\n\r\n\t\tlet hiddenState = this.hiddenState;\r\n\t\thiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n\t\thiddenState.properties.opacity = 0.5;\r\n\t\thiddenState.properties.visible = true;\r\n\r\n\t\tthis.setStateOnChildren = false;\r\n\r\n\t\tthis.slice.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.adapter.add(\"tooltipX\", (tooltipX, target)=>{\r\n\t\t return target.slice.ix * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\r\n\t\tthis.adapter.add(\"tooltipY\", (tooltipY, target)=>{\r\n\t\t return target.slice.iy * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Invalidates all links, attached to this node.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidateLinks(): void {\r\n\t\tsuper.invalidateLinks();\r\n\r\n\t\tlet label = this.label;\r\n\t\tlet slice = this.slice;\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart && slice) {\r\n\r\n\t\t\tlet sum = this.total;\r\n\t\t\tlet arc = slice.arc;\r\n\t\t\tlet sliceStartAngle = slice.startAngle;\r\n\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tif (child instanceof Bullet) {\r\n\t\t\t\t\tlet locationX = child.locationX;\r\n\t\t\t\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\t\t\t\tlocationX = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet locationY = child.locationY;\r\n\t\t\t\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\t\t\t\tlocationY = 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet childAngle = sliceStartAngle + arc * locationX;\r\n\t\t\t\t\tlet childRadius = locationY * slice.radius;\r\n\r\n\t\t\t\t\tchild.x = childRadius * $math.cos(childAngle);\r\n\t\t\t\t\tchild.y = childRadius * $math.sin(childAngle);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\r\n\t\t\tlet labelAngle = sliceStartAngle + arc * label.location;\r\n\t\t\tlet startAngle = sliceStartAngle + (1 - sum / this.adjustedTotal) * arc * 0.5; // if value of a node is > then sum of the links, add to center link\r\n\r\n\t\t\tif ($type.isNaN(startAngle)) {\r\n\t\t\t\tstartAngle = sliceStartAngle;\r\n\t\t\t}\r\n\r\n\t\t\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 * 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;\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\r\n\t\tthis.tooltipColorSource = this.columns.template;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A container that columns are created in.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic get columnsContainer() {\r\n\t\treturn this._columnsContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Column Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ColumnSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\t//@todo Check if we can do better than use `instanceof`\r\n\t\t// find start/end locations based on clustered/stacked settings\r\n\t\t// go through chart series instead of base axis series, because axis series doesn't maintain order\r\n\t\tlet baseAxisSeries = this.chart.series;\r\n\t\tlet clusterCount: number = 0;\r\n\t\tlet index: number = 0;\r\n\r\n\t\t$iter.each(baseAxisSeries.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries) {\r\n\t\t\t\tif (this.baseAxis == series.baseAxis) {\r\n\t\t\t\t\tif ((!series.stacked && series.clustered) || clusterCount === 0) {\r\n\t\t\t\t\t\tclusterCount++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (series == this) {\r\n\t\t\t\t\t\tindex = clusterCount - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet renderer = this.baseAxis.renderer;\r\n\r\n\t\tlet cellStartLocation: number = renderer.cellStartLocation;\r\n\t\tlet cellEndLocation: number = renderer.cellEndLocation;\r\n\r\n\t\tthis._startLocation = cellStartLocation + (index / clusterCount) * (cellEndLocation - cellStartLocation);\r\n\t\tthis._endLocation = cellStartLocation + (index + 1) / clusterCount * (cellEndLocation - cellStartLocation);\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tfor (let i = 0; i < this.startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tfor (let i = this.dataItems.length - 1; i > this.endIndex; i--) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t// important oder here, first real, then super. we need this to know size\r\n\t\tthis.validateDataElementReal(dataItem);\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative start location for the data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getStartLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet startLocation = this._startLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tstartLocation += dataItem.locations[this.xOpenField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstartLocation += dataItem.locations[this.yOpenField] - 0.5;\r\n\t\t}\r\n\t\treturn startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (this.simplifiedProcessing) {\r\n\t\t\tthis.validateDataElement(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative end location for the data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getEndLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet endLocation = this._endLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tendLocation += dataItem.locations[this.xField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tendLocation += dataItem.locations[this.yField] - 0.5;\r\n\t\t}\r\n\t\treturn endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//\tif (dataItem.hasValue([this.xField, this.yField])) { // todo: this doesn't work with categories, think of a better way\r\n\t\tlet l: number;\r\n\t\tlet r: number;\r\n\t\tlet t: number;\r\n\t\tlet b: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet xField = this.xField;\r\n\t\tlet xOpenField = this.xOpenField;\r\n\t\tlet yField = this.yField;\r\n\t\tlet yOpenField = this.yOpenField;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\t\tlet percentHeight: number = template.percentHeight;\r\n\r\n\t\tlet pixelWidth: number = template.pixelWidth;\r\n\t\tlet pixelHeight: number = template.pixelHeight;\r\n\r\n\t\tlet maxWidth: number = template.maxWidth;\r\n\t\tlet maxHeight: number = template.maxHeight;\r\n\r\n\t\tlet paddingLeft: number = template.pixelPaddingLeft;\r\n\t\tlet paddingRight: number = template.pixelPaddingRight;\r\n\t\tlet paddingTop: number = template.pixelPaddingTop;\r\n\t\tlet paddingBottom: number = template.pixelPaddingBottom;\r\n\r\n\t\tlet outOfBounds: boolean = false;\r\n\r\n\t\t// two category axes\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields) || !dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\t\t}\r\n\t\telse if (this.baseAxis == this.xAxis) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in percent\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomLocation = dataItem.locations[yOpenField];\r\n\t\t\tlet topLocation = dataItem.locations[yField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tbottomLocation = 0;\r\n\t\t\t\ttopLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tb = this.yAxis.getY(dataItem, yOpenField, bottomLocation);\r\n\t\t\tt = this.yAxis.getY(dataItem, yField, topLocation);\r\n\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[xField] = startLocation + (endLocation - startLocation) / 2;\r\n\r\n\t\t\tlet axisLenght = this.yAxis.axisLength;\r\n\r\n\t\t\tif ((t < 0 && b < 0) || (t > axisLenght && b > axisLenght)) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\r\n\t\t\tif (Math.abs(r - l) - paddingLeft - paddingRight == 0) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// horizontal bars\r\n\t\telse {\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case height is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case height is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet rightLocation = dataItem.locations[xField];\r\n\t\t\tlet leftLocation = dataItem.locations[xOpenField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.xAxis instanceof ValueAxis) {\r\n\t\t\t\trightLocation = 0;\r\n\t\t\t\tleftLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, rightLocation);\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, leftLocation);\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[yField] = startLocation + (endLocation - startLocation) / 2;\r\n\r\n\t\t\tlet axisLenght = this.xAxis.axisLength;\r\n\r\n\t\t\tif ((r < 0 && l < 0) || (r > axisLenght && l > axisLenght)) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\r\n\t\t\tif (Math.abs(t - b) - paddingTop - paddingBottom == 0) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet w: number = Math.abs(r - l);\r\n\t\tlet h: number = Math.abs(b - t);\r\n\r\n\t\tlet x: number = Math.min(l, r);\r\n\t\tlet y: number = Math.min(t, b);\r\n\r\n\t\tif (!outOfBounds) {\r\n\t\t\tlet column: this[\"_column\"];\r\n\t\t\tif (!dataItem.column) {\r\n\t\t\t\tcolumn = this.columns.create();\r\n\t\t\t\t//$object.forceCopyProperties(this.columns.template, column, visualProperties);\r\n\t\t\t\t$object.copyProperties(this, column, visualProperties); // need this because 3d columns are not in the same container\r\n\t\t\t\t$object.copyProperties(this.columns.template, column, visualProperties); // second time, no force, so that columns.template would override series properties\r\n\t\t\t\tdataItem.addSprite(column);\r\n\r\n\t\t\t\tdataItem.column = column;\r\n\r\n\t\t\t\t// accessibility\r\n\t\t\t\tif (this.itemsFocusable()) {\r\n\t\t\t\t\tcolumn.role = \"menuitem\";\r\n\t\t\t\t\tcolumn.focusable = true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcolumn.role = \"listitem\";\r\n\t\t\t\t\tcolumn.focusable = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (column.focusable) {\r\n\t\t\t\t\tcolumn.events.once(\"focus\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"blur\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t\tif (column.hoverable) {\r\n\t\t\t\t\tcolumn.events.once(\"over\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"out\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn = dataItem.column;\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.width = w;\r\n\t\t\tcolumn.height = h;\r\n\r\n\t\t\tcolumn.x = x;\r\n\t\t\tcolumn.y = y;\r\n\r\n\t\t\tcolumn.realX = l;\r\n\t\t\tcolumn.realY = t;\r\n\r\n\t\t\tcolumn.realWidth = r - l;\r\n\t\t\tcolumn.realHeight = b - t;\r\n\r\n\t\t\tcolumn.parent = this.columnsContainer;\r\n\t\t\tcolumn.virtualParent = this;\r\n\r\n\t\t\tthis.setColumnStates(column);\r\n\r\n\t\t\tif (column.invalid) {\r\n\t\t\t\tcolumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.__disabled = false;\r\n\t\t\t//column.returnAfterTemp();\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: this[\"_column\"] = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t//$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.parent = axisRange.contents;\r\n\r\n\t\t\t\trangeColumn.width = w;\r\n\t\t\t\trangeColumn.height = h;\r\n\t\t\t\trangeColumn.x = x;\r\n\t\t\t\trangeColumn.y = y;\r\n\r\n\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\r\n\t\t\t\tif (rangeColumn.invalid) {\r\n\t\t\t\t\trangeColumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\t//rangeColumn.returnAfterTemp();\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tdataItem.itemWidth = w;\r\n\t\tdataItem.itemHeight = h;\r\n\t}\r\n\r\n\r\n\tdisableUnusedColumns(dataItem: ColumnSeriesDataItem) {\r\n\t\tif (dataItem) {\r\n\t\t\tif (dataItem.column) {\r\n\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\tdataItem.column.width = 0;\r\n\t\t\t\tdataItem.column.height = 0;\r\n\t\t\t\tdataItem.column.__disabled = true;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: Sprite = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\t\trangeColumn.width = 0;\r\n\t\t\t\t\trangeColumn.height = 0;\r\n\t\t\t\t\trangeColumn.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Apply different state/coloring to columns based on the change value.\r\n\t *\r\n\t * @param sprite Sprite to apply state to\r\n\t * @todo Do not apply accessibility to wicks of the candlesticks\r\n\t */\r\n\tprotected setColumnStates(sprite: Sprite): void {\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = sprite.dataItem;\r\n\r\n\t\tif (this.xAxis instanceof ValueAxis || this.yAxis instanceof ValueAxis) {\r\n\t\t\tlet open: number;\r\n\t\t\tlet value: number;\r\n\t\t\tlet change: number;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tif (this.xOpenField && this.xField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.xOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.xField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.xAxis.axisFieldName + \"X\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.yOpenField && this.yField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.yOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.yField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.yAxis.axisFieldName + \"Y\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (value < open) {\r\n\t\t\t\tdataItem.droppedFromOpen = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromOpenState)\r\n\t\t\t\tsprite.setState(this._dropFromOpenState, 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromOpen = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromOpenState)\r\n\t\t\t\tsprite.setState(this._riseFromOpenState, 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (change < 0) {\r\n\t\t\t\tdataItem.droppedFromPrevious = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromPreviousState)\r\n\t\t\t\tsprite.setState((this._dropFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromPrevious = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromPreviousState)\r\n\t\t\t\tsprite.setState((this._riseFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of column elements in the series.\r\n\t *\r\n\t * @return Columns\r\n\t */\r\n\tpublic get columns(): ListTemplate {\r\n\t\tif (!this._columns) {\r\n\t\t\tthis._columns = new ListTemplate(this.createColumnTemplate());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._columns));\r\n\t\t\tthis._disposers.push(this._columns.template);\r\n\t\t}\r\n\t\treturn this._columns;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a column element to use as a template.\r\n\t *\r\n\t * @return Column template\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column();\r\n\t}\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with other series.\r\n\t *\r\n\t * @default true\r\n\t * @param value Clustered?\r\n\t */\r\n\tpublic set clustered(value: boolean) {\r\n\t\tthis.setPropertyValue(\"clustered\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Clustered?\r\n\t */\r\n\tpublic get clustered(): boolean {\r\n\t\treturn this.getPropertyValue(\"clustered\");\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get dropFromOpenState(): SpriteState {\r\n\t\tif (!this._dropFromOpenState) {\r\n\t\t\tthis._dropFromOpenState = this.states.create(\"dropFromOpenState\");\r\n\t\t}\r\n\t\treturn this._dropFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get dropFromPreviousState(): SpriteState {\r\n\t\tif (!this._dropFromPreviousState) {\r\n\t\t\tthis._dropFromPreviousState = this.states.create(\"dropFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._dropFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get riseFromOpenState(): SpriteState {\r\n\t\tif (!this._riseFromOpenState) {\r\n\t\t\tthis._riseFromOpenState = this.states.create(\"riseFromOpenState\");\r\n\t\t}\r\n\t\treturn this._riseFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return State\r\n\t */\r\n\tpublic get riseFromPreviousState(): SpriteState {\r\n\t\tif (!this._riseFromPreviousState) {\r\n\t\t\tthis._riseFromPreviousState = this.states.create(\"riseFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._riseFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates value of the related legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\r\n\t\tif (this.legendDataItem) {\r\n\t\t\tlet marker: Container = this.legendDataItem.marker;\r\n\t\t\tlet fromOpenState: SpriteState;\r\n\t\t\tlet fromPreviousState: SpriteState;\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tif (dataItem.droppedFromOpen) {\r\n\t\t\t\t\tfromOpenState = this._dropFromOpenState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromOpenState = this._riseFromOpenState;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (dataItem.droppedFromPrevious) {\r\n\t\t\t\t\tfromPreviousState = this._dropFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromPreviousState = this._riseFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(marker.children.iterator(), (child) => {\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tchild.setState(fromPreviousState);\r\n\t\t\t\t\tchild.setState(fromOpenState);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// todo: think what to do here, maybe apply above states based on totals?\r\n\t\t\t\t\tchild.setState(this._riseFromPreviousState);\r\n\t\t\t\t\tchild.setState(this._riseFromOpenState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.fill;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[ColumnSeries]].\r\n\t *\r\n\t * @param source Source series\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.columns.template.copyFrom(source.columns.template);\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationX(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet y location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationY(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixVerticalCoordinate(coordinate: number): number {\r\n\t\tlet paddingBottom = this.columns.template.pixelPaddingBottom;\r\n\t\tlet paddingTop = this.columns.template.pixelPaddingTop;\r\n\r\n\t\tlet minY: number = -paddingTop;\r\n\t\tlet maxY: number = this.yAxis.axisLength + paddingBottom;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minY, maxY);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixHorizontalCoordinate(coordinate: number): number {\r\n\t\tlet paddingLeft = this.columns.template.pixelPaddingLeft;\r\n\t\tlet paddingRight = this.columns.template.pixelPaddingRight;\r\n\r\n\t\tlet minX: number = -paddingLeft;\r\n\t\tlet maxX: number = this.xAxis.axisLength + paddingRight;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minX, maxX);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.columns.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries\"] = ColumnSeries;\r\nregistry.registeredClasses[\"ColumnSeriesDataItem\"] = ColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries.ts","/**\r\n * TreeMap series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { 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\treturn this.treeMapDataItem.value;\r\n\t}\r\n\r\n\t/**\r\n\t * A corresponding data item from the tree map.\r\n\t *\r\n\t * @readonly\r\n\t * @return Data item\r\n\t */\r\n\tpublic get treeMapDataItem(): TreeMapDataItem {\r\n\t\treturn this._dataContext;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMapSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapSeriesAdapters extends IColumnSeriesAdapters, ITreeMapSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class TreeMapSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapSeriesEvents;\r\n\r\n\t/**\r\n\t * The level in treemap hierarchy series is at.\r\n\t */\r\n\tpublic level: number;\r\n\r\n\t/**\r\n\t * Type of the data item used by series.\r\n\t */\r\n\tpublic _dataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\r\n\t/**\r\n\t * Parent data item of a series.\r\n\t */\r\n\tpublic parentDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"TreeMapSeries\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.fillOpacity = 1;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.minBulletDistance = 0;\r\n\t\tthis.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n\t\tthis.columns.template.configField = \"config\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"background\");\r\n\t\tthis.dataFields.openValueX = \"x0\";\r\n\t\tthis.dataFields.valueX = \"x1\";\r\n\t\tthis.dataFields.openValueY = \"y0\";\r\n\t\tthis.dataFields.valueY = \"y1\";\r\n\r\n\t\tthis.sequencedInterpolation = false;\r\n\r\n\t\tthis.showOnInit = false;\r\n\r\n\t\t// otherwise nodes don't stack nicely to each other\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t * @param dataContext Raw data\r\n\t * @param index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\t(dataContext).seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows series.\r\n\t *\r\n\t * @param duration Duration of fade in (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n\t\t})\r\n\r\n\t\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 levels the chart will allow drilling down to.\r\n\t *\r\n\t * @default 2\r\n\t */\r\n\tmaxLevels?: number;\r\n\r\n\t/**\r\n\t * Current drill-down level the treemap is at.\r\n\t */\r\n\tcurrentLevel?: number;\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * @default \"descending\"\r\n\t */\r\n\tsorting?: \"none\" | \"ascending\" | \"descending\";\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[TreeMap]].\r\n */\r\nexport interface ITreeMapEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMap]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapAdapters extends IXYChartAdapters, ITreeMapProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapEvents} for a list of available Events\r\n * @see {@link ITreeMapAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/} for documentation\r\n */\r\nexport class TreeMap extends XYChart {\r\n\r\n\t/**\r\n\t * Defines a type of the data item used for this chart.\r\n\t */\r\n\tpublic _dataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ITreeMapDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapEvents;\r\n\r\n\t/**\r\n\t * A horizontal value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic xAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * A vertical value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic yAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * An algorithm used to divide area into squares based on their value.\r\n\t *\r\n\t * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"layoutAlgorithm\": \"sliceDice\",\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n\t * @default squarify\r\n\t */\r\n\tpublic layoutAlgorithm: (parent: TreeMapDataItem) => void = this.squarify;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: TreeMapSeries;\r\n\r\n\t/**\r\n\t * [_homeDataItem description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _homeDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * [_tempSeries description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tempSeries: TreeMapSeries[];\r\n\r\n\t/**\r\n\t * A text dispalyed on the home button in breadcurmb nav control.\r\n\t */\r\n\tprotected _homeText: string;\r\n\r\n\t/**\r\n\t * A set of colors to be applied automatically to each new chart item, if\r\n\t * not explicitly set.\r\n\t */\r\n\tpublic colors: ColorSet;\r\n\r\n\t/**\r\n\t * Holds series object for each TreeMap level.\r\n\t *\r\n\t * \"0\" is the top-level series.\r\n\t * \"1\" is the second level.\r\n\t * Etc.\r\n\t *\r\n\t * @todo Description\r\n\t * @param Templates for each level\r\n\t */\r\n\tpublic seriesTemplates: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * Is the chart zoomable?\r\n\t *\r\n\t * If the chart is `zoomable`, and items have sub-items, the chart will\r\n\t * drill-down to sub-items when click on their parent item.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tpublic zoomable: boolean = true;\r\n\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tprotected _navigationBar: NavigationBar;\r\n\r\n\t/**\r\n\t * Currently selected data item.\r\n\t * @readonly\r\n\t */\r\n\tpublic currentlyZoomed: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMap\";\r\n\r\n\t\tthis.maxLevels = 2;\r\n\t\tthis.currentLevel = 0;\r\n\r\n\t\tthis.colors = new ColorSet();\r\n\t\tthis.sorting = \"descending\";\r\n\r\n\t\t// create two value axes for the chart\r\n\t\tlet xAxis = this.xAxes.push(new ValueAxis());\r\n\t\txAxis.title.disabled = true;\r\n\t\txAxis.strictMinMax = true;\r\n\r\n\t\tlet xRenderer = xAxis.renderer;\r\n\t\txRenderer.inside = true;\r\n\t\txRenderer.labels.template.disabled = true;\r\n\t\txRenderer.ticks.template.disabled = true;\r\n\t\txRenderer.grid.template.disabled = true;\r\n\t\txRenderer.axisFills.template.disabled = true;\r\n\t\txRenderer.minGridDistance = 100;\r\n\t\txRenderer.line.disabled = true;\r\n\t\txRenderer.baseGrid.disabled = true;\r\n\t\t//xRenderer.inversed = true;\r\n\r\n\t\tlet yAxis = this.yAxes.push(new ValueAxis());\r\n\t\tyAxis.title.disabled = true;\r\n\t\tyAxis.strictMinMax = true;\r\n\r\n\t\tlet yRenderer = yAxis.renderer;\r\n\t\tyRenderer.inside = true;\r\n\t\tyRenderer.labels.template.disabled = true;\r\n\t\tyRenderer.ticks.template.disabled = true;\r\n\t\tyRenderer.grid.template.disabled = true;\r\n\t\tyRenderer.axisFills.template.disabled = true;\r\n\t\tyRenderer.minGridDistance = 100;\r\n\t\tyRenderer.line.disabled = true;\r\n\t\tyRenderer.baseGrid.disabled = true;\r\n\t\tyRenderer.inversed = true;\r\n\r\n\t\t// shortcuts\r\n\t\tthis.xAxis = xAxis;\r\n\t\tthis.yAxis = yAxis;\r\n\r\n\t\tconst template = new TreeMapSeries();\r\n\t\tthis.seriesTemplates = new DictionaryTemplate(template);\r\n\t\tthis._disposers.push(new DictionaryDisposer(this.seriesTemplates));\r\n\t\tthis._disposers.push(template);\r\n\r\n\t\tthis.zoomOutButton.events.on(\"hit\", () => {\r\n\t\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis.seriesTemplates.events.on(\"insertKey\", (event) => {\r\n\t\t\tevent.newValue.isTemplate = true;\r\n\t\t}, undefined, false)\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tpublic set navigationBar(navigationBar: NavigationBar) {\r\n\t\tif (this._navigationBar != navigationBar) {\r\n\t\t\tthis._navigationBar = navigationBar;\r\n\t\t\tnavigationBar.parent = this;\r\n\t\t\tnavigationBar.toBack();\r\n\t\t\tnavigationBar.links.template.events.on(\"hit\", (event) => {\r\n\t\t\t\tlet dataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tthis.zoomToChartDataItem(dataItem);\r\n\t\t\t\tthis.createTreeSeries(dataItem);\r\n\t\t\t}, undefined, true);\r\n\r\n\t\t\tthis._disposers.push(navigationBar);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns navigationBar if it is added to a chart\r\n\t */\r\n\tpublic get navigationBar(): NavigationBar {\r\n\t\treturn this._navigationBar;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * (Re)validates chart's data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.dispose();\r\n\t\t}\r\n\r\n\t\tlet homeDataItem = this.dataItems.template.clone(); // cant' use createDataItem here!\r\n\r\n\t\tthis._homeDataItem = homeDataItem;\r\n\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tdataItem.parent = homeDataItem;\r\n\t\t});\r\n\r\n\t\thomeDataItem.children = this.dataItems;\r\n\r\n\t\thomeDataItem.x0 = 0;\r\n\t\thomeDataItem.y0 = 0;\r\n\t\thomeDataItem.name = this._homeText;\r\n\r\n\t\tlet maxX = 1000;\r\n\t\tlet maxY = (maxX * this.pixelHeight / this.pixelWidth) || 1000;\r\n\r\n\t\thomeDataItem.x1 = maxX;\r\n\t\thomeDataItem.y1 = maxY;\r\n\r\n\t\tthis.xAxis.min = 0;\r\n\t\tthis.xAxis.max = maxX;\r\n\r\n\t\tthis.yAxis.min = 0;\r\n\t\tthis.yAxis.max = maxY;\r\n\r\n\t\tthis.layoutItems(homeDataItem);\r\n\r\n\t\tthis.createTreeSeries(homeDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Layouts and sizes all items according to their value and\r\n\t * `layoutAlgorithm`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Parent data item\r\n\t */\r\n\tpublic layoutItems(parent: TreeMapDataItem, sorting?: \"none\" | \"ascending\" | \"descending\"): void {\r\n\t\tif (parent) {\r\n\t\t\tlet children = parent.children;\r\n\r\n\t\t\tif (!sorting) {\r\n\t\t\t\tsorting = this.sorting;\r\n\t\t\t}\r\n\r\n\t\t\tif (sorting == \"ascending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn a.value - b.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (sorting == \"descending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn b.value - a.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._updateDataItemIndexes(0);\r\n\r\n\t\t\tthis.layoutAlgorithm(parent);\r\n\r\n\t\t\tfor (let i = 0, len = children.length; i < len; i++) {\r\n\r\n\t\t\t\tlet node = children.getIndex(i);\r\n\r\n\t\t\t\tif (node.children) {\r\n\t\t\t\t\tthis.layoutItems(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates and returns a new treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem Data item to create series out of\r\n\t */\r\n\tprotected createTreeSeries(dataItem: TreeMapDataItem) {\r\n\t\tthis._tempSeries = [];\r\n\r\n\t\tlet navigationData = [dataItem];\r\n\r\n\t\t// create parent series and navigation data\r\n\t\tlet parentDataItem = dataItem.parent;\r\n\t\twhile (parentDataItem != undefined) {\r\n\t\t\tthis.initSeries(parentDataItem);\r\n\t\t\tnavigationData.push(parentDataItem);\r\n\t\t\tparentDataItem = parentDataItem.parent;\r\n\t\t}\r\n\r\n\t\tnavigationData.reverse();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.data = navigationData;\r\n\t\t}\r\n\r\n\t\t// create series and children series\r\n\t\tthis.createTreeSeriesReal(dataItem);\r\n\r\n\t\t// add those which are not in the list\r\n\t\t$array.each(this._tempSeries, (series) => {\r\n\t\t\tif (this.series.indexOf(series) == -1) {\r\n\t\t\t\tthis.series.push(series);\r\n\t\t\t}\r\n\t\t\tseries.zIndex = series.level;\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * [createTreeSeriesReal description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected createTreeSeriesReal(dataItem: TreeMapDataItem) {\r\n\t\tif (dataItem.children) {\r\n\t\t\tlet level = dataItem.level;\r\n\r\n\t\t\tif (level < this.currentLevel + this.maxLevels) {\r\n\r\n\t\t\t\tthis.initSeries(dataItem);\r\n\r\n\t\t\t\tfor (let i = 0; i < dataItem.children.length; i++) {\r\n\t\t\t\t\tlet child = dataItem.children.getIndex(i);\r\n\t\t\t\t\tif (child.children) {\r\n\t\t\t\t\t\tthis.createTreeSeriesReal(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * Overriding, as tree map series are created on the fly all the time\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Initializes the treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem Chart data item\r\n\t */\r\n\tprotected initSeries(dataItem: TreeMapDataItem) {\r\n\t\tif (!dataItem.series) {\r\n\t\t\tlet series: TreeMapSeries;\r\n\r\n\t\t\tlet template = this.seriesTemplates.getKey(dataItem.level.toString());\r\n\t\t\tif (template) {\r\n\t\t\t\tseries = template.clone();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tseries = this.series.create();\r\n\t\t\t}\r\n\r\n\t\t\tseries.name = dataItem.name;\r\n\t\t\tseries.parentDataItem = dataItem;\r\n\t\t\tdataItem.series = series;\r\n\r\n\t\t\tlet level = dataItem.level;\r\n\t\t\tseries.level = level;\r\n\r\n\t\t\tlet dataContext: any = dataItem.dataContext;\r\n\t\t\tif (dataContext) {\r\n\t\t\t\tseries.config = dataContext.config;\r\n\t\t\t}\r\n\r\n\t\t\tthis.dataUsers.removeValue(series); // series do not use data directly, that's why we remove it\r\n\t\t\tseries.data = dataItem.children.values;\r\n\t\t\tseries.fill = dataItem.color;\r\n\r\n\t\t\tseries.columnsContainer.hide(0);\r\n\t\t\tseries.bulletsContainer.hide(0);\r\n\r\n\t\t\tseries.columns.template.adapter.add(\"fill\", (fill, target) => {\r\n\t\t\t\tlet dataItem = target.dataItem;\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet treeMapDataItem = dataItem.treeMapDataItem;\r\n\t\t\t\t\tif (treeMapDataItem) {\r\n\t\t\t\t\t\ttarget.fill = treeMapDataItem.color;\r\n\t\t\t\t\t\ttarget.adapter.remove(\"fill\"); //@todo: make it possible adapters applied once?\r\n\t\t\t\t\t\treturn treeMapDataItem.color;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.zoomable && (dataItem.level > this.currentLevel || (dataItem.children && dataItem.children.length > 0))) {\r\n\t\t\t\tseries.columns.template.cursorOverStyle = MouseCursorStyle.pointer;\r\n\t\t\t\tif (this.zoomable) {\r\n\t\t\t\t\tseries.columns.template.events.on(\"hit\", (event) => {\r\n\t\t\t\t\t\tlet seriesDataItem = event.target.dataItem;\r\n\r\n\t\t\t\t\t\tif (dataItem.level > this.currentLevel) {\r\n\t\t\t\t\t\t\tthis.zoomToChartDataItem(seriesDataItem.treeMapDataItem.parent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthis.zoomToSeriesDataItem(seriesDataItem);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}, this, undefined);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._tempSeries.push(dataItem.series);\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles bullets so that labels that belong to current drill level are\r\n\t * shown.\r\n\t *\r\n\t * @param duration Animation duration (ms)\r\n\t */\r\n\tprotected toggleBullets(duration?: number): void {\r\n\t\t// hide all series which are not in tempSeries\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (this._tempSeries.indexOf(series) == - 1) {\r\n\t\t\t\t//series.hideReal(duration);\r\n\t\t\t\tseries.columnsContainer.hide();\r\n\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t//series.showReal(duration);\r\n\t\t\t\tseries.columnsContainer.show();\r\n\t\t\t\tseries.bulletsContainer.show(duration);\r\n\r\n\t\t\t\tif (series.level < this.currentLevel) {\r\n\t\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item in series.\r\n\t *\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic zoomToSeriesDataItem(dataItem: TreeMapSeriesDataItem): void {\r\n\t\tthis.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic zoomToChartDataItem(dataItem: TreeMapDataItem): void {\r\n\t\tif (dataItem && dataItem.children) {\r\n\t\t\tthis.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n\t\t\tthis.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n\r\n\t\t\tthis.currentLevel = dataItem.level;\r\n\t\t\tthis.currentlyZoomed = dataItem;\r\n\r\n\t\t\tthis.createTreeSeries(dataItem);\r\n\r\n\t\t\tlet rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n\r\n\t\t\tif (rangeChangeAnimation && !rangeChangeAnimation.isFinished()) {\r\n\t\t\t\tthis._dataDisposers.push(rangeChangeAnimation);\r\n\t\t\t\trangeChangeAnimation.events.once(\"animationended\", () => {\r\n\t\t\t\t\tthis.toggleBullets();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.toggleBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"TreeMap chart\");\r\n\t\t}\r\n\t\t//this.homeText = this.language.translate(\"Home\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Maximum drill-down levels the chart will allow going to.\r\n\t *\r\n\t * If set, the chart will not drill-down further, even if there are sub-items\r\n\t * available.\r\n\t *\r\n\t * Set to `1` to disable drill down functionality.\r\n\t *\r\n\t * @param value Maximum drill-down level\r\n\t */\r\n\tpublic set maxLevels(value: number) {\r\n\t\tthis.setPropertyValue(\"maxLevels\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Maximum drill-down level\r\n\t */\r\n\tpublic get maxLevels(): number {\r\n\t\treturn this.getPropertyValue(\"maxLevels\");\r\n\t}\r\n\r\n\t/**\r\n\t * Current drill-down level the chart is at.\r\n\t *\r\n\t * @param value Current level\r\n\t */\r\n\tpublic set currentLevel(value: number) {\r\n\t\tthis.setPropertyValue(\"currentLevel\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Current level\r\n\t */\r\n\tpublic get currentLevel(): number {\r\n\t\treturn this.getPropertyValue(\"currentLevel\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * Available options: \"none\", \"ascending\", and \"descending\" (default).\r\n\t *\r\n\t * @default \"descending\"\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set sorting(value: \"none\" | \"ascending\" | \"descending\") {\r\n\t\tthis.setPropertyValue(\"sorting\", value, true);\r\n\t}\r\n\r\n\tpublic get sorting(): \"none\" | \"ascending\" | \"descending\" {\r\n\t\treturn this.getPropertyValue(\"sorting\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new series of the suitable type.\r\n\t *\r\n\t * @return new series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new TreeMapSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A text displayed on the \"home\" button which is used to go back to level 0\r\n\t * after drill into sub-items.\r\n\t *\r\n\t * @param value Home text\r\n\t */\r\n\tpublic set homeText(value: string) {\r\n\t\tthis._homeText = value;\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.name = this._homeText;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Home text\r\n\t */\r\n\tpublic get homeText(): string {\r\n\t\treturn this._homeText;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Instantiate layout algorithm\r\n\t\t\tif ($type.hasValue(config[\"layoutAlgorithm\"]) && $type.isString(config[\"layoutAlgorithm\"])) {\r\n\t\t\t\tswitch (config[\"layoutAlgorithm\"]) {\r\n\t\t\t\t\tcase \"squarify\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.squarify;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"binaryTree\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.binaryTree;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"slice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.slice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"dice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.dice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"sliceDice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.sliceDice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdelete config[\"layoutAlgorithm\"];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Set type for navigation bar\r\n\t\t\tif ($type.hasValue(config.navigationBar) && !$type.hasValue(config.navigationBar.type)) {\r\n\t\t\t\tconfig.navigationBar.type = \"NavigationBar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Measures the size of container and informs its children of how much size\r\n\t * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n\t * properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.layoutItems(this.currentlyZoomed);\r\n\t}\r\n\r\n\t/**\r\n\t * Validates (processes) data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\t\tsuper.validateDataItems();\r\n\t\tthis.layoutItems(this._homeDataItem);\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.validateRawData();\r\n\t\t});\r\n\r\n\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * TREEMAP LAYOUT FUNCTIONS\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * The functions below are from D3.js library (https://d3js.org/)\r\n\t *\r\n\t * --------------------------------------------------------------------------\r\n\t * Copyright 2017 Mike Bostock\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t *\r\n\t * 1. Redistributions of source code must retain the above copyright notice,\r\n\t * this list of conditions and the following disclaimer.\r\n\t *\r\n\t * 2. Redistributions in binary form must reproduce the above copyright\r\n\t * notice,this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t *\r\n\t * 3. Neither the name of the copyright holder nor the names of its\r\n\t * contributors may be used to endorse or promote products derived from\r\n\t * this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n\t * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n\t * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n\t * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n\t * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n\t * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n\t * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n\t * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n\t * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n\t * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n\t * POSSIBILITY OF SUCH DAMAGE.\r\n\t * --------------------------------------------------------------------------\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: binaryTree.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic binaryTree(parent: TreeMapDataItem): void {\r\n\t\tlet nodes = parent.children,\r\n\t\t\ti, n = nodes.length,\r\n\t\t\tsum, sums = new Array(n + 1);\r\n\r\n\t\tfor (sums[0] = sum = i = 0; i < n; ++i) {\r\n\t\t\tsums[i + 1] = sum += nodes.getIndex(i).value;\r\n\t\t}\r\n\r\n\t\tpartition(0, n, parent.value, parent.x0, parent.y0, parent.x1, parent.y1);\r\n\r\n\t\tfunction partition(i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) {\r\n\t\t\tif (i >= j - 1) {\r\n\t\t\t\tlet node = nodes.getIndex(i);\r\n\t\t\t\tnode.x0 = x0, node.y0 = y0;\r\n\t\t\t\tnode.x1 = x1, node.y1 = y1;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet valueOffset = sums[i],\r\n\t\t\t\tvalueTarget = (value / 2) + valueOffset,\r\n\t\t\t\tk = i + 1,\r\n\t\t\t\thi = j - 1;\r\n\r\n\t\t\twhile (k < hi) {\r\n\t\t\t\tlet mid = k + hi >>> 1;\r\n\t\t\t\tif (sums[mid] < valueTarget) k = mid + 1;\r\n\t\t\t\telse hi = mid;\r\n\t\t\t}\r\n\r\n\t\t\tif ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k)--k;\r\n\r\n\t\t\tlet valueLeft = sums[k] - valueOffset,\r\n\t\t\t\tvalueRight = value - valueLeft;\r\n\r\n\t\t\tif ((x1 - x0) > (y1 - y0)) {\r\n\t\t\t\tlet xk = (x0 * valueRight + x1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, xk, y1);\r\n\t\t\t\tpartition(k, j, valueRight, xk, y0, x1, y1);\r\n\t\t\t} else {\r\n\t\t\t\tlet yk = (y0 * valueRight + y1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, x1, yk);\r\n\t\t\t\tpartition(k, j, valueRight, x0, yk, x1, y1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic slice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (y1 - y0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.x0 = x0, node.x1 = x1;\r\n\t\t\tnode.y0 = y0, node.y1 = y0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: dice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic dice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (x1 - x0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.y0 = y0, node.y1 = y1;\r\n\t\t\tnode.x0 = x0, node.x1 = x0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slideDice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic sliceDice(parent: TreeMapDataItem): void {\r\n\t\tparent.level & 1 ? this.slice(parent) : this.dice(parent);\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: squarify.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent Data item\r\n\t */\r\n\tpublic squarify(parent: TreeMapDataItem): void {\r\n\t\tlet ratio = (1 + Math.sqrt(5)) / 2;\r\n\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children;\r\n\t\tlet nodeValue;\r\n\t\tlet i0 = 0;\r\n\t\tlet i1 = 0;\r\n\t\tlet n = nodes.length;\r\n\t\tlet dx;\r\n\t\tlet dy;\r\n\t\tlet value = parent.value;\r\n\t\tlet sumValue;\r\n\t\tlet minValue;\r\n\t\tlet maxValue;\r\n\t\tlet newRatio;\r\n\t\tlet minRatio;\r\n\t\tlet alpha;\r\n\t\tlet beta;\r\n\r\n\t\twhile (i0 < n) {\r\n\t\t\tdx = x1 - x0, dy = y1 - y0;\r\n\r\n\t\t\t// Find the next non-empty node.\r\n\t\t\tdo sumValue = nodes.getIndex(i1++).value; while (!sumValue && i1 < n);\r\n\t\t\tminValue = maxValue = sumValue;\r\n\t\t\talpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\tminRatio = Math.max(maxValue / beta, beta / minValue);\r\n\r\n\t\t\t// Keep adding nodes while the aspect ratio maintains or improves.\r\n\t\t\tfor (; i1 < n; ++i1) {\r\n\t\t\t\tsumValue += nodeValue = nodes.getIndex(i1).value;\r\n\t\t\t\tif (nodeValue < minValue) {\r\n\t\t\t\t\tminValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tif (nodeValue > maxValue) {\r\n\t\t\t\t\tmaxValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\t\tnewRatio = Math.max(maxValue / beta, beta / minValue);\r\n\t\t\t\tif (newRatio > minRatio) {\r\n\t\t\t\t\tsumValue -= nodeValue; break;\r\n\t\t\t\t}\r\n\t\t\t\tminRatio = newRatio;\r\n\t\t\t}\r\n\r\n\t\t\t// Position and record the row orientation.\r\n\t\t\tlet row = this.dataItems.template.clone();\r\n\t\t\trow.value = sumValue;\r\n\t\t\trow.dice = dx < dy;\r\n\t\t\trow.children = nodes.slice(i0, i1);\r\n\t\t\trow.x0 = x0;\r\n\t\t\trow.y0 = y0;\r\n\t\t\trow.x1 = x1;\r\n\t\t\trow.y1 = y1;\r\n\r\n\t\t\tif (row.dice) {\r\n\t\t\t\trow.y1 = value ? y0 += dy * sumValue / value : y1;\r\n\t\t\t\tthis.dice(row);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\trow.x1 = value ? x0 += dx * sumValue / value : x1, y1;\r\n\t\t\t\tthis.slice(row);\r\n\t\t\t}\r\n\t\t\tvalue -= sumValue, i0 = i1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleDataItemValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (name == \"value\") {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (name == \"value\") {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\t\t\tlet legendData: Array = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tif (series.level == 1) {\r\n\t\t\t\t\tif (!series.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(series);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\t\t\tlegend.data = legendData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\r\n\t\tsuper.disposeData();\r\n\r\n\t\tthis._homeDataItem = undefined;\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxis.disposeData();\r\n\t\tthis.yAxis.disposeData();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMap\"] = TreeMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/TreeMap.ts","/**\r\n * Module, defining Axis Renderer for horizontal 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererX, IAxisRendererXProperties, IAxisRendererXAdapters, IAxisRendererXEvents } from \"../axes/AxisRendererX\";\r\nimport { Sprite, ISpriteEvents, 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;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet h: number = this.getHeight();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement() {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet h = this.getHeight();\r\n\t\tlet dx = this.chart.dx3D;\r\n\t\tlet dy = this.chart.dy3D;\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererX3D\"] = AxisRendererX3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","/**\r\n * Module, defining Axis Renderer for vertical 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"../axes/AxisRendererY\";\r\nimport { Sprite, ISpriteEvents, 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;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet w: number = this.getWidth();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet w: number = this.getWidth();\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: 0, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w + this.chart.dx3D, y: this.chart.dy3D });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","/**\r\n * 3D column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { 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 i: number = 1;\r\n\t\t\t\tseries.columns.each((column) => {\r\n\t\t\t\t\tcolumn.zIndex = 1000 * i + s - series.depthIndex * 100;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t});\r\n\r\n\t\t\t\ts++;\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.maskColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\tprotected maskColumns() {\r\n\t\tlet w: number = this.plotContainer.pixelWidth;\r\n\t\tlet h: number = this.plotContainer.pixelHeight;\r\n\r\n\t\tlet dx: number = this.dx3D;\r\n\t\tlet dy: number = this.dy3D;\r\n\r\n\t\tlet path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy }) + $path.lineTo({ x: w + dx, y: h + dy }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: 0, y: h }) + $path.closePath();\r\n\r\n\t\tlet columnsContainer = this.columnsContainer;\r\n\t\tif (columnsContainer && columnsContainer.mask) {\r\n\t\t\tcolumnsContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart3D\"] = XYChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart3D.ts","/**\r\n * Module that defines everything related to building Candlesticks.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { 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\tstartAngle = startAngle + startLocation * cellAngle;\r\n\t\tendAngle = endAngle - (1 - endLocation) * cellAngle;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\r\n\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\tpercentWidth = 100;\r\n\t\t}\r\n\r\n\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\tstartLocation += offset;\r\n\t\tendLocation -= offset;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, dataItem.locations[yField], \"valueY\"), y: this.yAxis.getY(dataItem, yField, dataItem.locations[yField], \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xOpenField, startLocation, \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xField, endLocation, \"valueX\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, startLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yField, startLocation, \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, endLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, endLocation, \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xField, dataItem.locations[xField], \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xOpenField, dataItem.locations[xOpenField], \"valueX\");\r\n\t\t}\r\n\r\n\t\tif (rAngle < lAngle) {\r\n\t\t\tlet temp = rAngle;\r\n\t\t\trAngle = lAngle;\r\n\t\t\tlAngle = temp;\r\n\t\t}\r\n\r\n\t\tlAngle = $math.fitToRange(lAngle, startAngle, endAngle);\r\n\t\trAngle = $math.fitToRange(rAngle, startAngle, endAngle);\r\n\r\n\t\tlet radarColumn = dataItem.column;\r\n\t\tif (!radarColumn) {\r\n\t\t\tradarColumn = this.columns.create();\r\n\t\t\tdataItem.column = radarColumn;\r\n\t\t\t$object.forceCopyProperties(this.columns.template, radarColumn, visualProperties);\r\n\t\t\tdataItem.addSprite(radarColumn);\r\n\t\t\tthis.setColumnStates(radarColumn);\r\n\t\t}\r\n\r\n\t\tlet slice = radarColumn.radarColumn;\r\n\r\n\t\tslice.startAngle = lAngle;\r\n\r\n\t\tlet arc = rAngle - lAngle;\r\n\r\n\t\tif (arc > 0) {\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.radius = tRadius;\r\n\t\t\tslice.innerRadius = bRadius;\r\n\t\t\tradarColumn.__disabled = false;\r\n\r\n\t\t\tradarColumn.parent = this.columnsContainer;\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tif (rangeColumn.dataItem) {\r\n\t\t\t\t\t\t$array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet slice = radarColumn.radarColumn;\r\n\t\t\t\tslice.startAngle = lAngle;\r\n\t\t\t\tslice.arc = arc;\r\n\t\t\t\tslice.radius = tRadius;\r\n\t\t\t\tslice.innerRadius = bRadius;\r\n\r\n\t\t\t\tif (slice.invalid) {\r\n\t\t\t\t\tslice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\trangeColumn.parent = this.columnsContainer;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param xKey [description]\r\n\t * @param yKey [description]\r\n\t * @param locationX [description]\r\n\t * @param locationY [description]\r\n\t * @param stackKeyX [description]\r\n\t * @param stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarColumnSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumnSeries\"] = RadarColumnSeries;\r\nregistry.registeredClasses[\"RadarColumnSeriesDataItem\"] = RadarColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarColumnSeries.ts","/**\r\n * Defines Pyramid Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IFunnelSeriesAdapters, IFunnelSeriesDataFields, IFunnelSeriesEvents, IFunnelSeriesProperties, FunnelSeries, FunnelSeriesDataItem } from \"./FunnelSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PyramidSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PyramidSeriesDataItem extends FunnelSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PyramidSeries;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PyramidSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesDataFields extends IFunnelSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesProperties extends IFunnelSeriesProperties {\r\n\r\n\t/**\r\n\t * Bottom width in pixels or percent\r\n\t */\r\n\tbottomWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Top width in pixels or percent\r\n\t */\r\n\ttopWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t */\r\n\tpyramidHeight?: number | Percent;\r\n\r\n\t/**\r\n\t * Indicates whether slice value should sould influence its height or area\r\n\t * size.\r\n\t *\r\n\t * @default \"area\"\r\n\t */\r\n\tvalueIs?: \"height\" | \"area\";\r\n}\r\n\r\n/**\r\n * Defines events for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesEvents extends IFunnelSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PyramidSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPyramidSeriesAdapters extends IFunnelSeriesAdapters, IPyramidSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPyramidSeriesEvents} for a list of available Events\r\n * @see {@link IPyramidSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PyramidSeries extends FunnelSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPyramidSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPyramidSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPyramidSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPyramidSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PyramidSeriesDataItem;\r\n\r\n\t/**\r\n\t * [_nextWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextWidth: number;\r\n\r\n\tprotected _pyramidHeight: number;\r\n\r\n\tprotected _pyramidWidth: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PyramidSeries\";\r\n\t\tthis.topWidth = percent(0);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.pyramidHeight = percent(100);\r\n\t\tthis.valueIs = \"area\";\r\n\r\n\t\tthis.sliceLinks.template.width = 0;\r\n\t\tthis.sliceLinks.template.height = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PyramidSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t\tthis._nextWidth = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * [getNextValue description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getNextValue(dataItem: FunnelSeriesDataItem): number {\r\n\t\tlet index = dataItem.index;\r\n\t\tlet nextValue: number = dataItem.getWorkingValue(\"value\");\r\n\t\tif (index < this.dataItems.length - 1) {\r\n\t\t\tlet nextItem = this.dataItems.getIndex(index + 1);\r\n\t\t\tnextValue = nextItem.getWorkingValue(\"value\");\r\n\t\t}\r\n\t\tif (nextValue == 0) {\r\n\t\t\tnextValue = 0.000001;\r\n\t\t}\r\n\t\treturn nextValue;\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElements description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements() {\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\tlet relValue = dataItem.getWorkingValue(\"value\") / dataItem.value;\r\n\t\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\tmaxHeight -= (sliceLink.pixelHeight * relValue);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tmaxWidth -= (sliceLink.pixelWidth * relValue);\r\n\t\t\t}\r\n\r\n\t\t})\r\n\r\n\t\tthis._pyramidHeight = $utils.relativeToValue(this.pyramidHeight, maxHeight);\r\n\t\tthis._pyramidWidth = $utils.relativeToValue(this.pyramidHeight, maxWidth);\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet y = (maxHeight - this._pyramidHeight) / 2;\r\n\t\t\tthis.slicesContainer.y = y\r\n\t\t\tthis.labelsContainer.y = y;\r\n\t\t\tthis.ticksContainer.y = y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet x = (maxWidth - this._pyramidWidth) / 2;\r\n\t\t\tthis.slicesContainer.x = x;\r\n\t\t\tthis.labelsContainer.x = x;\r\n\t\t\tthis.ticksContainer.x = x;\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElements();\r\n\t}\r\n\r\n\t/**\r\n\t * [decorateSlice description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected decorateSlice(dataItem: this[\"_dataItem\"]) {\r\n\r\n\t\tlet sum = this.dataItem.values.value.sum;\r\n\r\n\t\tif(sum == 0){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet slice = dataItem.slice;\r\n\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\tlet label = dataItem.label;\r\n\t\tlet tick = dataItem.tick;\r\n\r\n\t\t// TODO can this be removed ?\r\n\t\tthis.getNextValue(dataItem);\r\n\r\n\t\tlet workingValue = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\tif (workingValue == 0) {\r\n\t\t\tworkingValue = 0.000001;\r\n\t\t}\r\n\r\n\t\tlet pyramidWidth = this._pyramidWidth;\r\n\t\tlet pyramidHeight = this._pyramidHeight;\r\n\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tlet linkWidth = sliceLink.pixelWidth;\r\n\t\tlet linkHeight = sliceLink.pixelHeight;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxWidth);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxWidth);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceHeight: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\r\n\t\t\t\tlet square = totalSquare * workingValue / sum;\r\n\r\n\t\t\t\tlet s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\r\n\r\n\t\t\t\tsliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet sum = this.dataItem.values.value.sum;\r\n\t\t\t\tsliceHeight = pyramidHeight * workingValue / sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceHeight * c;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tslice.height = sliceHeight;\r\n\t\t\tslice.width = maxWidth;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.y = this._nextY;\r\n\t\t\t//slice.x = maxWidth / 2;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.x = maxWidth / 2;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.x = 0;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.y = slice.pixelY + slice.pixelHeight * tick.locationY + slice.dy;\r\n\r\n\t\t\tthis._nextY += slice.pixelHeight + linkHeight * workingValue / dataItem.value;\r\n\t\t\tsliceLink.y = this._nextY - linkHeight;\r\n\t\t\tsliceLink.x = maxWidth / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxHeight);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxHeight);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidWidth, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceWidth: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidWidth;\r\n\t\t\t\tlet square = totalSquare * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceWidth = (sliceTopWidth - Math.sqrt(sliceTopWidth * sliceTopWidth - 2 * square * c)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceWidth * sliceTopWidth) / sliceWidth;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsliceWidth = pyramidWidth * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceWidth * c;\r\n\t\t\t}\r\n\r\n\t\t\tslice.width = sliceWidth;\r\n\t\t\tslice.height = maxHeight;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.x = this._nextY;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.y = maxHeight / 2;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tlabel.y = this.labelsContainer.measuredHeight;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.x = slice.pixelX + slice.pixelWidth * tick.locationX + slice.dx;\r\n\r\n\t\t\tthis._nextY += slice.pixelWidth + linkWidth * workingValue / dataItem.value;\r\n\t\t\tsliceLink.x = this._nextY - linkWidth;\r\n\t\t\tsliceLink.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tthis._nextWidth = slice.bottomWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's tip in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` (default) means the pyramid will be perfectly pointy.\r\n\t * `50%` will have a cut off / blunt top that is half the width of the chart.\r\n\t * `100%` will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @default 0%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set topWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"topWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get topWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"topWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t *\r\n\t *\r\n\t * @default 100%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set pyramidHeight(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"pyramidHeight\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get pyramidHeight(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"pyramidHeight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's bottom (bsae) in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` means the pyramid's botto will be pointy.\r\n\t * `50%` will have a cut off / blunt bottom that is half the width of the chart.\r\n\t * `100%` (default) will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set bottomWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"bottomWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get bottomWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"bottomWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates how slice's value will influence its size.\r\n\t *\r\n\t * `\"area\"` (default) means that the whole area of the pyramid (counting in\r\n\t * modifications by `topWidth` and `bottomWidth`) will be divvied up between\r\n\t * slices based on their value.\r\n\t *\r\n\t * With this setting at `\"area\"` the area of the trapezoids of each slice\r\n\t * will represent their value relatively to values of the other slices.\r\n\t *\r\n\t * This is a correct way to depict \"weight\" of each slice based on their\r\n\t * values.\r\n\t *\r\n\t * `\"height\"` means whole height (as opposed to area) of the pyramid will be\r\n\t * divvied up between slices. Actual slice width or area is not counted in.\r\n\t *\r\n\t * From the data-viz standpoint this does not make a lot of sense, since\r\n\t * slices with lesser values might appear more prominent if they are placed\r\n\t * towards thick end of the pyramid since their areas will be bigger.\r\n\t *\r\n\t * @default \"area\"\r\n\t * @param {\"area\" | \"height\"}\r\n\t */\r\n\tpublic set valueIs(value: \"area\" | \"height\") {\r\n\t\tif (this.setPropertyValue(\"valueIs\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"area\" | \"height\"}\r\n\t */\r\n\tpublic get valueIs(): \"area\" | \"height\" {\r\n\t\treturn this.getPropertyValue(\"valueIs\");\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PyramidSeries\"] = PyramidSeries;\r\nregistry.registeredClasses[\"PyramidSeriesDataItem\"] = PyramidSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PyramidSeries.ts","/**\r\n * Defines Pictorial Stacked Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPyramidSeriesAdapters, IPyramidSeriesDataFields, IPyramidSeriesEvents, IPyramidSeriesProperties, PyramidSeries, PyramidSeriesDataItem } from \"./PyramidSeries\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PictorialStackedSeriesDataItem extends PyramidSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PictorialStackedSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PictorialStackedSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesDataFields extends IPyramidSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesProperties extends IPyramidSeriesProperties {\r\n\r\n\t/**\r\n\t * Relative location to start series from.\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\tstartLocation?: number;\r\n\r\n\t/**\r\n\t * Relative location to end series at.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\tendLocation?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesEvents extends IPyramidSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPictorialStackedSeriesAdapters extends IPyramidSeriesAdapters, IPictorialStackedSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a PictorialStacked series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPictorialStackedSeriesEvents} for a list of available Events\r\n * @see {@link IPictorialStackedSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PictorialStackedSeries extends PyramidSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPictorialStackedSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPictorialStackedSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPictorialStackedSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPictorialStackedSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PictorialStackedSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds a Sprite that acts as an intelligent mask for the serries.\r\n\t */\r\n\tprotected _maskSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PictorialStackedSeries\";\r\n\t\tthis.topWidth = percent(100);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.valueIs = \"height\";\r\n\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.startLocation = 0;\r\n\t\tthis.endLocation = 1;\r\n\r\n\t\tthis._maskSprite = this.slicesContainer.createChild(Sprite);\r\n\t\tthis._maskSprite.visible = false;\r\n\t\tthis._maskSprite.zIndex = 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Sizes the mask to fit the series.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\r\n\t\tlet maxWidth = this.slicesContainer.maxWidth;\r\n\t\tlet maxHeight = this.slicesContainer.maxHeight;\r\n\r\n\t\tlet maskSprite = this._maskSprite;\r\n\t\t//maskSprite.validatePosition(); // for some reason size of the maskSprite is 0x0 after we removed validatePosition in afterdraw\r\n\r\n\t\tlet pictureWidth = maskSprite.measuredWidth / maskSprite.scale;\r\n\t\tlet pictureHeight = maskSprite.measuredHeight / maskSprite.scale;\r\n\r\n\t\tlet scale = $math.min(maxHeight / pictureHeight, maxWidth / pictureWidth);\r\n\r\n\t\tif (scale == Infinity) {\r\n\t\t\tscale = 1; // can't return here, won't draw legend properly\r\n\t\t}\r\n\r\n\t\tscale = $math.max(0.001, scale);\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tlet newWidth = $math.min(maxWidth, pictureWidth * scale);\r\n\t\tlet newHeight = $math.min(maxHeight, pictureHeight * scale);\r\n\r\n\t\tmaskSprite.scale = scale;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tthis.topWidth = newWidth + 4;\r\n\t\t\tthis.bottomWidth = newWidth + 4;\r\n\t\t\tthis.pyramidHeight = newHeight * (endLocation - startLocation);\r\n\t\t\tmaskSprite.x = maxWidth / 2;\r\n\t\t\tmaskSprite.y = newHeight / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.topWidth = newHeight + 4;\r\n\t\t\tthis.bottomWidth = newHeight + 4;\r\n\t\t\tthis.pyramidHeight = newWidth * (endLocation - startLocation);\r\n\t\t\tmaskSprite.valign = \"middle\";\r\n\t\t\tmaskSprite.x = newWidth / 2;\r\n\t\t\tmaskSprite.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tmaskSprite.verticalCenter = \"middle\";\r\n\t\tmaskSprite.horizontalCenter = \"middle\";\r\n\r\n\t\tsuper.validateDataElements();\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet y = (maxHeight - newHeight) / 2;\r\n\t\t\tthis.slicesContainer.y = y;\r\n\t\t\tthis.labelsContainer.y = y;\r\n\t\t\tthis.ticksContainer.y = y;\r\n\t\t\tthis.slices.template.dy = startLocation * newHeight;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet x = (maxWidth - newWidth) / 2;\r\n\t\t\tthis.slicesContainer.x = x;\r\n\t\t\tthis.labelsContainer.x = x;\r\n\t\t\tthis.ticksContainer.x = x;\r\n\t\t\tthis.slices.template.dx = startLocation * newWidth;\r\n\t\t}\r\n\r\n\t\tthis.slicesContainer.mask = this._maskSprite;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PictorialStackedSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Sprite]] element that is used as a series mask.\r\n\t *\r\n\t * If set, this element's shape will be used to apply shape to the whole\r\n\t * stacked pictorial series.\r\n\t *\r\n\t * You can use this element's `path` property to set an SVG path for the\r\n\t * shape:\r\n\t *\r\n\t * ```TypeScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JSON\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * \"type\": \"PictorialStackedSeries\",\r\n\t * // ...\r\n\t * \"maskSprite\": {\r\n\t * \"path\": iconPath\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @return Mask sprite\r\n\t */\r\n\tpublic get maskSprite(): Sprite {\r\n\t\treturn this._maskSprite;\r\n\t}\r\n\r\n\t/**\r\n\t * Inits FunnelSlice.\r\n\t *\r\n\t * @param slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tsuper.initSlice(slice);\r\n\r\n\t\tlet hs = slice.states.getKey(\"hover\");\r\n\t\tif (hs) {\r\n\t\t\ths.properties.expandDistance = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Relative location to start series from.\r\n\t *\r\n\t * Range of values: 0 to 1.\r\n\t *\r\n\t * This setting indicates where actual slices will start relatively to the\r\n\t * whole height/width of the series.\r\n\t *\r\n\t * For example, if we want slices to start at 30% from the top/left of the\r\n\t * series, we can set `startLocation = 0.3`.\r\n\t *\r\n\t * To fill shape outside of the location range, use background of the\r\n\t * property `slicesContainer`.\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.startLocation = 0.2;\r\n\t * series.endLocation = 0.8;\r\n\t * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.startLocation = 0.2;\r\n\t * series.endLocation = 0.8;\r\n\t * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * // ...\r\n\t * \"startLocation\": 0.2,\r\n\t * \"endLocation\": 0.8,\r\n\t * \"slicesContainer\": {\r\n\t * \"background\": {\r\n\t * \"fill\": \"#eee\"\r\n\t * }\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @default 0\r\n\t * @since 4.1.13\r\n\t * @param value Start location\r\n\t */\r\n\tpublic set startLocation(value: number) {\r\n\t\tif (this.setPropertyValue(\"startLocation\", value)) {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start location\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 * Relative location to end series at.\r\n\t *\r\n\t * Range of values: 0 to 1.\r\n\t *\r\n\t * This setting indicates where actual slices will end relatively to the\r\n\t * whole height/width of the series.\r\n\t *\r\n\t * For example, if we want slices to end at 70% from the top/left of the\r\n\t * series, we can set `endLocation = 0.7`.\r\n\t *\r\n\t * To fill shape outside of the location range, use background of the\r\n\t * property `slicesContainer`.\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.startLocation = 0.2;\r\n\t * series.endLocation = 0.8;\r\n\t * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.startLocation = 0.2;\r\n\t * series.endLocation = 0.8;\r\n\t * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * // ...\r\n\t * \"startLocation\": 0.2,\r\n\t * \"endLocation\": 0.8,\r\n\t * \"slicesContainer\": {\r\n\t * \"background\": {\r\n\t * \"fill\": \"#eee\"\r\n\t * }\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @default 1\r\n\t * @since 4.1.13\r\n\t * @param value End location\r\n\t */\r\n\tpublic set endLocation(value: number) {\r\n\t\tif (this.setPropertyValue(\"endLocation\", value)) {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End location\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 * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PictorialStackedSeries\"] = PictorialStackedSeries;\r\nregistry.registeredClasses[\"PictorialStackedSeriesDataItem\"] = PictorialStackedSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","/**\r\n * Module that defines everything related to building Cone Columns.\r\n * It is a container which has coneColumn element which is a Cone.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Cone } from \"../../core/elements/3d/Cone\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeColumnAdapters extends IColumnAdapters, IConeColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates ConeColumns.\r\n *\r\n * @see {@link IConeColumnEvents} for a list of available events\r\n * @see {@link IConeColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ConeColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IConeColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IConeColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IConeColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Cone column element\r\n\t */\r\n\tpublic coneColumn: Cone;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tcreateAssets() {\r\n\t\tthis.coneColumn = this.createChild(Cone);\r\n\t\tthis.coneColumn.shouldClone = false;\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.coneColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[ConeColumn]].\r\n\t *\r\n\t * @param source Source ConeColumn\r\n\t */\r\n\tcopyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.coneColumn) {\r\n\t\t\tthis.coneColumn.copyFrom(source.coneColumn);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeColumn\"] = ConeColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ConeColumn.ts","/**\r\n * ConeSeries module\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { ConeColumn } from \"../elements/ConeColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ConeSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ConeSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: ConeColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: ConeSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeSeriesAdapters extends IColumnSeriesAdapters, IConeSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a cone graph.\r\n *\r\n * @see {@link IConeSeriesEvents} for a list of available Events\r\n * @see {@link IConeSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ConeSeries extends ColumnSeries {\r\n\r\n\tpublic _column: ConeColumn;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ConeSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IConeSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IConeSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IConeSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IConeSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ConeSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new ConeColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet dx = 0;\r\n\t\tlet dy = 0;\r\n\t\tlet column = this.columns.getIndex(0);\r\n\t\tif(column){\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tdy = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdx = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn $path.rectToPath({\r\n\t\t\t\tx: -dx,\r\n\t\t\t\ty: 0,\r\n\t\t\t\twidth: this.xAxis.axisLength + dx,\r\n\t\t\t\theight: this.yAxis.axisLength + dy\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tlet column = dataItem.column;\r\n\t\tif(column){\r\n\t\t\tlet coneColumn = dataItem.column.coneColumn;\r\n\r\n\t\t\tconeColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tconeColumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconeColumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeSeries\"] = ConeSeries;\r\nregistry.registeredClasses[\"ConeSeriesDataItem\"] = ConeSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ConeSeries.ts","/**\r\n * Module that defines everything related to building Curved Columns.\r\n * It is a container which has CurvedColumn element which is a Sprite.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnProperties extends IColumnProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Tension\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * Orientation of the column\r\n\t *\r\n\t * @default \"vertical\"\r\n\t */\r\n\torientation?: Orientation;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnAdapters extends IColumnAdapters, ICurvedColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates CurvedColumns.\r\n *\r\n * @see {@link ICurvedColumnEvents} for a list of available events\r\n * @see {@link ICurvedColumnAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICurvedColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICurvedColumnEvents;\r\n\r\n\t/**\r\n\t * The element that holds curved column shape.\r\n\t */\r\n\tpublic curvedColumn: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * [createAssets description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected createAssets(): void {\r\n\t\tthis.curvedColumn = this.createChild(Sprite);\r\n\t\tthis.curvedColumn.shouldClone = false;\r\n\r\n\t\tthis.setPropertyValue(\"tension\", 0.7);\r\n\r\n\t\tthis.width = percent(120);\r\n\t\tthis.height = percent(120);\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.curvedColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tlet w = this.realWidth;\r\n\t\tlet h = this.realHeight;\r\n\t\tlet x = this.realX - this.pixelX;\r\n\t\tlet y = this.realY - this.pixelY;\r\n\r\n\t\tlet points: IPoint[];\r\n\r\n\t\t// TODO can this be removed ?\r\n\t\t$utils.used(this.width);\r\n\r\n\t\tlet tensionX = 1;\r\n\t\tlet tensionY = 1;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\ttensionX = this.tension;\r\n\t\t\tpoints = [{ x: 0, y: h + y }, { x: w / 2, y: y }, { x: w, y: h + y }];\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttensionY = this.tension;\r\n\t\t\tpoints = [{ x: x, y: 0 }, { x: x + w, y: h / 2 }, { x: x, y: h }];\r\n\t\t}\r\n\r\n\t\tlet path = $path.moveTo(points[0]) + new $smoothing.Tension(tensionX, tensionY).smooth(points);\r\n\t\tthis.column.path = path;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[CurvedColumn]].\r\n\t *\r\n\t * @param source Source CurvedColumn\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.curvedColumn) {\r\n\t\t\tthis.curvedColumn.copyFrom(source.curvedColumn);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension of the curve.\r\n\t *\r\n\t * Tension defines how \"lose\" the line will be.\r\n\t *\r\n\t * 1 is the maximum tension which would result in pointy columns with\r\n\t * straight edges.\r\n\t *\r\n\t * The smaller the tension th wider the column will be.\r\n\t *\r\n\t * @default 0.7\r\n\t * @param value tension (0-1)\r\n\t */\r\n\tpublic set tension(value: number) {\r\n\t\tthis.setPropertyValue(\"tension\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tension (0-1)\r\n\t */\r\n\tpublic get tension(): number {\r\n\t\treturn this.getPropertyValue(\"tension\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the column.\r\n\t *\r\n\t * Available options: \"vertical\" (default) and \"horizontal\".\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @param value Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tthis.setPropertyValue(\"orientation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumn\"] = CurvedColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CurvedColumn.ts","/**\r\n * CurvedColumnSeries module.\r\n *\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { CurvedColumn } from \"../elements/CurvedColumn\";\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\n/**\r\n * Defines a [[DataItem]] for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CurvedColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: CurvedColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnSeriesAdapters extends IColumnSeriesAdapters, ICurvedColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a curved columns graph.\r\n *\r\n * @see {@link ICurvedColumnSeriesEvents} for a list of available Events\r\n * @see {@link ICurvedColumnSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Dfines type of the column.\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\t/**\r\n\t * Defines type of the data item.\r\n\t */\r\n\tpublic _dataItem: CurvedColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ICurvedColumnSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICurvedColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICurvedColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CurvedColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for the curved column.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new CurvedColumn();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\tlet column = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet curvedColumn = dataItem.column.curvedColumn;\r\n\r\n\t\t\tcurvedColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tcolumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumnSeries\"] = CurvedColumnSeries;\r\nregistry.registeredClasses[\"CurvedColumnSeriesDataItem\"] = CurvedColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","/**\r\n * DurationAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\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 data item for [[DurationAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DurationAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: DurationAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisDataFields extends IValueAxisDataFields { }\r\n\r\n/**\r\n * Defines properties for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisProperties extends IValueAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DurationAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDurationAxisAdapters extends IValueAxisAdapters, IDurationAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create an axis that shows time durations.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DurationAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information about duration formatters.\r\n * @see {@link IDurationAxisEvents} for a list of available Events\r\n * @see {@link IDurationAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DurationAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: IDurationAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDurationAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDurationAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDurationAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: DurationAxisDataItem;\r\n\r\n\t/**\r\n\t * A base unit (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t */\r\n\tprotected _baseUnit: TimeUnit = \"second\";\r\n\r\n\t/**\r\n\t * A special duration format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t */\r\n\tprotected _tooltipDurationFormat: string;\r\n\r\n\t/**\r\n\t * Axis date format chosen dynamically based on min/max and baseUnit.\r\n\t *\r\n\t * @readonly\r\n\t */\r\n\tpublic axisDurationFormat: string;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"maxZoomFactor\", 1000000);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DurationFormatter]].\r\n\t *\r\n\t * @param value Source value\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number, format?: string): string {\r\n\t\treturn this.durationFormatter.format(value, format || this.axisDurationFormat);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts actual min and max scale values so that the axis starts and ends\r\n\t * at \"nice\" values, unless `strictMinMax` is set.\r\n\t *\r\n\t * The `difference` can be something else than `max - min`, because of the\r\n\t * axis breaks.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param min [description]\r\n\t * @param max [description]\r\n\t * @param difference [description]\r\n\t * @param gridCount [description]\r\n\t * @param strictMode [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number, difference: number, gridCount: number, strictMode?: boolean): IMinMaxStep {\r\n\r\n\t\tlet minMaxStep: IMinMaxStep;\r\n\r\n\t\tlet timeUnit = this.baseUnit;\r\n\t\t// we don't allow to go to smaller units, setting so to avoid invalidation\r\n\t\tthis.setPropertyValue(\"maxPrecision\", 0);\r\n\r\n\t\tif (timeUnit == \"millisecond\" || timeUnit == \"second\" || timeUnit == \"minute\" || timeUnit == \"hour\") {\r\n\t\t\t// will fail if 0\r\n\t\t\tif (gridCount <= 1) {\r\n\t\t\t\tgridCount = 1;\r\n\t\t\t}\r\n\r\n\t\t\tgridCount = Math.round(gridCount);\r\n\r\n\t\t\tlet initialMin: number = min;\r\n\t\t\tlet initialMax: number = max;\r\n\r\n\t\t\t// in case min and max is the same, use max\r\n\t\t\tif (difference === 0) {\r\n\t\t\t\tdifference = Math.abs(max);\r\n\t\t\t}\r\n\r\n\t\t\tlet step = difference / gridCount;\r\n\r\n\t\t\tlet divisors = [60, 30, 20, 15, 10, 2, 1];\r\n\t\t\tlet realDivisor = 1;\r\n\r\n\t\t\tif (timeUnit == \"hour\") {\r\n\t\t\t\tdivisors = [24, 12, 6, 4, 2, 1];\r\n\t\t\t}\r\n\r\n\t\t\tfor (let divisor of divisors) {\r\n\t\t\t\tif (difference / divisor > gridCount) {\r\n\t\t\t\t\trealDivisor = divisor;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet count = Math.ceil(((max - min) / realDivisor) / gridCount);\r\n\r\n\t\t\tlet exponent: number = Math.log(Math.abs(count)) * Math.LOG10E;\r\n\t\t\tlet power = Math.pow(10, Math.floor(exponent)) / 10;\r\n\t\t\tlet reducedCount = count / power;\r\n\r\n\t\t\t// find closest to divisor\r\n\t\t\tlet closest = $math.closest(divisors, reducedCount);\r\n\t\t\tcount = closest * power;\r\n\r\n\t\t\tstep = realDivisor * count;\r\n\r\n\t\t\t// TODO can this be removed ?\r\n\t\t\tthis.durationFormatter.getValueUnit(step, this.baseUnit);\r\n\r\n\t\t\tmin = Math.floor(min / step) * step;\r\n\t\t\tmax = Math.ceil(max / step) * step;\r\n\r\n\t\t\tif (strictMode) {\r\n\t\t\t\tmin -= step;\r\n\t\t\t\tif (min < 0 && initialMin >= 0) {\r\n\t\t\t\t\tmin = 0;\r\n\t\t\t\t}\r\n\t\t\t\tmax += step;\r\n\r\n\t\t\t\tif (max > 0 && initialMax <= 0) {\r\n\t\t\t\t\tmax = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tminMaxStep = { min: min, max: max, step: step };\r\n\t\t}\r\n\t\telse {\r\n\t\t\tminMaxStep = super.adjustMinMax(min, max, difference, gridCount, strictMode);\r\n\t\t}\r\n\r\n\t\t// choose duration formatter based on step\r\n\t\tthis.axisDurationFormat = this.durationFormatter.getFormat(minMaxStep.step, minMaxStep.max, this.baseUnit);\r\n\r\n\t\treturn minMaxStep;\r\n\t}\r\n\r\n\t/**\r\n\t * A special duration format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information.\r\n\t * @param value Duration format for axis labels\r\n\t */\r\n\tpublic set tooltipDurationFormat(value: string) {\r\n\t\tthis._tooltipDurationFormat = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Duration format for axis labels\r\n\t */\r\n\tpublic get tooltipDurationFormat(): string {\r\n\t\treturn this._tooltipDurationFormat;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a axis tooltip, based on specific position within\r\n\t * axis.\r\n\t *\r\n\t * The label will be formatted as per [[NumberFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position (px)\r\n\t * @return Label (numeric value)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet value: number = $math.round(this.positionToValue(position), this._stepDecimalPlaces);\r\n\t\treturn this.adapter.apply(\"getTooltipText\", this.formatLabel(value, this.tooltipDurationFormat));\r\n\t}\r\n\r\n\t/**\r\n\t * A base unit (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * Available options: \"millisecond\", \"second\" (default), \"minute\", \"hour\",\r\n\t * \"day\", \"week\", \"month\", \"year\".\r\n\t *\r\n\t * @default \"second\"\r\n\t * @param timeUnit\r\n\t */\r\n\tpublic set baseUnit(timeUnit: TimeUnit) {\r\n\t\tif (this._baseUnit != timeUnit) {\r\n\t\t\tthis._baseUnit = timeUnit;\r\n\t\t\tthis.durationFormatter.baseUnit = timeUnit;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Base unit\r\n\t */\r\n\tpublic get baseUnit(): TimeUnit {\r\n\t\treturn this._baseUnit;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.baseUnit = source.baseUnit;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DurationAxis\"] = DurationAxis;\r\nregistry.registeredClasses[\"DurationAxisDataItem\"] = DurationAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DurationAxis.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface ICircleBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface ICircleBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICircleBulletAdapters extends IBulletAdapters, ICircleBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class CircleBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICircleBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICircleBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICircleBulletEvents;\r\n\r\n\t/**\r\n\t * A label (textual) element for the bullet.\r\n\t */\r\n\tpublic circle: Circle;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CircleBullet\";\r\n\r\n\t\tlet circle = this.createChild(Circle);\r\n\t\tcircle.shouldClone = false;\r\n\t\tcircle.radius = 5;\r\n\t\tcircle.isMeasured = false;\r\n\t\tthis.circle = circle;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[CircleBullet]].\r\n\t *\r\n\t * @param source Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.circle.copyFrom(source.circle);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CircleBullet\"] = CircleBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CircleBullet.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface IErrorBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface IErrorBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface IErrorBulletAdapters extends IBulletAdapters, IErrorBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ErrorBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IErrorBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IErrorBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IErrorBulletEvents;\r\n\r\n\tpublic errorLine:Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ErrorBullet\";\r\n\t\tthis.errorLine = this.createChild(Sprite);\r\n\t\tthis.errorLine.shouldClone = false;\r\n\t\tthis.width = 20;\r\n\t\tthis.height = 20;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.isDynamic = true;\r\n\t}\r\n\r\n\r\n\tvalidatePosition(){\r\n\t\tsuper.validatePosition();\r\n\t\tlet w = this.pixelWidth / 2;\r\n\t\tlet h = this.pixelHeight / 2;\r\n\r\n\t\tthis.errorLine.path = $path.moveTo({x:-w, y:-h}) + $path.lineTo({x:w, y:-h}) + $path.moveTo({x:0, y:-h}) + $path.lineTo({x:0, y:h}) + $path.moveTo({x:-w, y:h}) + $path.lineTo({x:w, y:h});\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[ErrorBullet]].\r\n\t *\r\n\t * @param source Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.errorLine.copyFrom(source.errorLine);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ErrorBullet\"] = ErrorBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ErrorBullet.ts","/**\r\n * Functionality for drawing simple NavigationBar.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Component, IComponentProperties, IComponentAdapters, IComponentEvents, IComponentDataFields } from \"../../core/Component\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { DataItem } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { TextLink } from \"../../core/elements/TextLink\";\r\nimport { Triangle } from \"../../core/elements/Triangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[NavigationBar]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class NavigationBarDataItem extends DataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: NavigationBar;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBarDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Name of the navigation bar item.\r\n\t *\r\n\t * @param value Name\r\n\t */\r\n\tpublic set name(value: string) {\r\n\t\tthis.setProperty(\"name\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties[\"name\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarDataFields extends IComponentDataFields {\r\n\r\n\t/**\r\n\t * Name of nav var item.\r\n\t */\r\n\tname?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarProperties extends IComponentProperties {\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarEvents extends IComponentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[NavigationBar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface INavigationBarAdapters extends IComponentAdapters, INavigationBarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * NavigationBar class can be used to create a multi-level breadcrumb-style\r\n * navigation control.\r\n *\r\n * @see {@link INavigationBarEvents} for a list of available events\r\n * @see {@link INavigationBarAdapters} for a list of available Adapters\r\n * @todo Implement better\r\n * @important\r\n */\r\nexport class NavigationBar extends Component {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: INavigationBarDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: INavigationBarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: INavigationBarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: INavigationBarEvents;\r\n\r\n\t/**\r\n\t * A list of breadcrumbs (links) in the nav bar.\r\n\t */\r\n\tpublic links: ListTemplate;\r\n\r\n\t/**\r\n\t * [_linksIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _linksIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * [_separatorsIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _separatorsIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * A reference to the link which is currently active.\r\n\t */\r\n\tpublic activeLink: TextLink;\r\n\r\n\t/**\r\n\t * A list of elements used as nav bar item separators.\r\n\t */\r\n\tpublic separators: ListTemplate;\r\n\r\n\t/**\r\n\t * Identifies the type of the [[DataItem]] used in this element.\r\n\t */\r\n\tpublic _dataItem!: NavigationBarDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet textLink = new TextLink();\r\n\t\ttextLink.valign = \"middle\";\r\n\t\ttextLink.paddingTop = 8;\r\n\t\ttextLink.paddingBottom = 8;\r\n\r\n\t\tthis.paddingBottom = 2;\r\n\r\n\t\tthis.links = new ListTemplate(textLink);\r\n\t\tthis._disposers.push(new ListDisposer(this.links));\r\n\t\tthis._disposers.push(textLink);\r\n\r\n\t\tthis._linksIterator = new $iter.ListIterator(this.links, () => this.links.create());\r\n\t\tthis._linksIterator.createNewItems = true;\r\n\r\n\t\tlet triangle = new Triangle();\r\n\t\ttriangle.direction = \"right\";\r\n\t\ttriangle.width = 8;\r\n\t\ttriangle.height = 12;\r\n\t\ttriangle.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\ttriangle.fillOpacity = 0.5;\r\n\t\ttriangle.valign = \"middle\";\r\n\t\ttriangle.marginLeft = 10;\r\n\t\ttriangle.marginRight = 10;\r\n\r\n\t\tthis.separators = new ListTemplate(triangle);\r\n\t\tthis._disposers.push(new ListDisposer(this.separators));\r\n\t\tthis._disposers.push(triangle);\r\n\r\n\t\tlet activeLink = new TextLink();\r\n\t\tthis.activeLink = activeLink;\r\n\t\tactiveLink.copyFrom(textLink);\r\n\t\tactiveLink.valign = \"middle\";\r\n\t\tactiveLink.fontWeight = \"bold\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.layout = \"grid\";\r\n\t\tthis.dataFields.name = \"name\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Completely redraws the navigation bar.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tthis.removeChildren();\r\n\t\tthis._linksIterator.reset();\r\n\t\tsuper.validateDataElements();\r\n\t\t//@todo: dispose\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a visual element for a data item (nav item).\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\tlet textLink: TextLink;\r\n\t\tif (dataItem.index < this.dataItems.length - 1) {\r\n\t\t\ttextLink = this._linksIterator.getLast();\r\n\t\t\ttextLink.parent = this;\r\n\t\t\tlet separator = this.separators.create();\r\n\t\t\tseparator.parent = this;\r\n\t\t\tseparator.valign = \"middle\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttextLink = this.activeLink;\r\n\t\t\ttextLink.events.copyFrom(this.links.template.events);\r\n\t\t\ttextLink.hide(0);\r\n\t\t\ttextLink.show();\r\n\t\t\ttextLink.parent = this;\r\n\t\t}\r\n\t\ttextLink.dataItem = dataItem;\r\n\t\ttextLink.text = dataItem.name;\r\n\t\ttextLink.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"NavigationBar\"] = NavigationBar;\r\nregistry.registeredClasses[\"NavigationBarDataItem\"] = NavigationBarDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/NavigationBar.ts","import * as m from \"../es2015/charts\";\nwindow.am4charts = m;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./charts.js\n// module id = null\n// module chunks = ","/**\r\n * A module defining functionality for circular axis grid elements.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { 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"],"sourceRoot":""}