{"version":3,"sources":["webpack:///../../../../../src/.internal/charts/types/XYChart.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxis.ts","webpack:///../../../../../src/.internal/charts/axes/AxisLabelCircular.ts","webpack:///../../../../../src/.internal/charts/series/XYSeries.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxis.ts","webpack:///../../../../../src/.internal/charts/cursors/XYCursor.ts","webpack:///../../../../../src/.internal/charts/series/LineSeries.ts","webpack:///../../../../../src/.internal/charts/series/LineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries.ts","webpack:///../../../../../src/.internal/charts/elements/Candlestick.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisFillCircular.ts","webpack:///../../../../../src/.internal/charts/axes/GridCircular.ts","webpack:///../../../../../src/.internal/charts/types/RadarChart.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxisBreak.ts","webpack:///../../../../../src/.internal/charts/cursors/Cursor.ts","webpack:///../../../../../src/.internal/charts/elements/XYChartScrollbar.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/elements/ClockHand.ts","webpack:///../../../../../src/.internal/charts/types/PieChart.ts","webpack:///../../../../../src/.internal/charts/types/PercentChart.ts","webpack:///../../../../../src/.internal/charts/elements/PieTick.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries3D.ts","webpack:///../../../../../src/.internal/charts/elements/ChordNode.ts","webpack:///../../../../../src/.internal/charts/elements/ChordLink.ts","webpack:///../../../../../src/.internal/charts/series/TreeMapSeries.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/series/CandlestickSeries.ts","webpack:///../../../../../src/.internal/charts/elements/OHLC.ts","webpack:///../../../../../src/.internal/charts/elements/RadarColumn.ts","webpack:///../../../../../src/.internal/charts/series/PyramidSeries.ts","webpack:///../../../../../src/.internal/charts/elements/ConeColumn.ts","webpack:///../../../../../src/.internal/charts/elements/CurvedColumn.ts","webpack:///./charts.js","webpack:///../../src/charts.ts","webpack:///../../../../../src/.internal/charts/types/GaugeChart.ts","webpack:///../../../../../src/.internal/charts/types/PieChart3D.ts","webpack:///../../../../../src/.internal/charts/types/SlicedChart.ts","webpack:///../../../../../src/.internal/charts/types/ChordDiagram.ts","webpack:///../../../../../src/.internal/core/elements/QuadraticCurve.ts","webpack:///../../../../../src/.internal/charts/types/TreeMap.ts","webpack:///../../../../../src/.internal/charts/types/XYChart3D.ts","webpack:///../../../../../src/.internal/charts/series/OHLCSeries.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeries.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/RadarColumnSeries.ts","webpack:///../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","webpack:///../../../../../src/.internal/charts/series/ConeSeries.ts","webpack:///../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","webpack:///../../../../../src/.internal/charts/axes/DurationAxis.ts","webpack:///../../../../../src/.internal/charts/elements/CircleBullet.ts","webpack:///../../../../../src/.internal/charts/elements/ErrorBullet.ts","webpack:///../../../../../src/.internal/charts/elements/NavigationBar.ts","webpack:///../../../../../src/.internal/charts/series/ColumnSeries.ts"],"names":["__webpack_require__","d","__webpack_exports__","XYChartDataItem","XYChart","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_1__SerialChart__","__WEBPACK_IMPORTED_MODULE_2__core_Container__","__WEBPACK_IMPORTED_MODULE_3__core_utils_List__","__WEBPACK_IMPORTED_MODULE_4__axes_AxisRendererX__","__WEBPACK_IMPORTED_MODULE_5__axes_AxisRendererY__","__WEBPACK_IMPORTED_MODULE_6__axes_CategoryAxis__","__WEBPACK_IMPORTED_MODULE_7__series_XYSeries__","__WEBPACK_IMPORTED_MODULE_8__cursors_XYCursor__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Disposer__","__WEBPACK_IMPORTED_MODULE_10__core_elements_ZoomOutButton__","__WEBPACK_IMPORTED_MODULE_11__core_utils_Percent__","__WEBPACK_IMPORTED_MODULE_12__core_Registry__","__WEBPACK_IMPORTED_MODULE_13__elements_XYChartScrollbar__","__WEBPACK_IMPORTED_MODULE_14__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_15__core_utils_Iterator__","__WEBPACK_IMPORTED_MODULE_16__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_17__core_utils_Utils__","_super","_this","call","this","className","applyTheme","_axisRendererX","_axisRendererY","maskBullets","chartContainer","layout","padding","topAxesCont","createChild","shouldClone","width","Object","zIndex","topAxesContainer","yAxesAndPlotCont","height","yAxesAndPlotContainer","bottomAxesCont","bottomAxesContainer","leftAxesCont","contentAlign","events","on","updateXAxesMargins","leftAxesContainer","plotCont","background","fillOpacity","plotContainer","mouseWheelBehavior","_cursorContainer","rightAxesCont","rightAxesContainer","seriesContainer","parent","bulletsContainer","zoomOutButton","align","valign","Number","MAX_SAFE_INTEGER","marginTop","marginRight","hide","_bulletMask","prototype","applyInternalDefaults","exportable","readerTitle","language","translate","draw","toFront","mask","updateSeriesLegend","updatePlotElements","series","iterator","invalidate","validateData","_parseDataFrom","xAxes","axis","dataChangeUpdate","yAxes","leftAxesWidth","measuredWidth","rightAxesWidth","paddingLeft","paddingRight","handleXAxisChange","event","updateXAxis","target","handleYAxisChange","updateYAxis","processXAxis","newValue","chart","renderer","axisLetter","observe","handleXAxisRangeChange","dataProvider","processAxis","processYAxis","handleYAxisRangeChange","range","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","start","end","seriesAppeared","show","appeared","scrollbarY","scrollbar","skipRangeEvents","axes","axisStart","axisEnd","inversed","opposite","toBack","processRenderer","_dataUsers","moveValue","gridContainer","breakContainer","addDisposer","dataUsers","removeValue","inited","invalidateDataItems","defineProperty","_xAxes","handleAxisRemoval","oldValue","autoDispose","dispose","_yAxes","handleSeriesAdded","xAxis","yAxis","undefined","fill","colors","next","stroke","e","raiseCriticalError","_cursor","cursor","removeDispose","_disposers","push","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","createCursor","visible","isHiding","xPosition","yPosition","showSeriesTooltip","x","y","showAxisTooltip","hideObjectTooltip","updateLegendValue","sprites","sprite","hideTooltip","position","topLeft","bottomRight","pixelWidth","pixelHeight","seriesPoints","sum","each","tooltip","setBounds","point","showTooltipAtPosition","sort","a","b","averageY","length","maxY","svgContainer","SVGContainer","top_1","bottom","dropped","nextHeight","i","pointY","invalid","validate","label","pixelY","pixelMarginTop","nextY","len","measuredHeight","pixelMarginBottom","dataItems","getUpdatedRange","difference","behavior","xRange","getIndex","priority","yRange","_panStartXRange","_panStartYRange","_panEndXRange","delta","panEndRange","_panEndYRange","maxPanOut","panStartRange","newStart","Math","max","newEnd","min","newRange","_scrollbarX","startGrip","endGrip","orientation","handleXScrollbarChange","adapter","add","arg","value","getPositionLabel","_scrollbarY","handleYScrollbarChange","fixRange","instantly","round","realRange","dataInvalid","diff","roundPosition","axisRange","zoom","getPropertyValue","setPropertyValue","handleWheel","svgPoint","htmlContainer","plotPoint","shift","rangeX","rangeY","differenceX","newStartX","newEndX","differenceY","newStartY","newEndY","locationX","maxWidth","locationY","maxHeight","_mouseWheelDisposer","wheelable","hoverable","dataSourceDateFields","fields","populateDataSourceFields","dataFields","dataSourceNumberFields","processConfig","config","type","Error","axisRanges","index","configOrder","createSeries","_zoomOutButton","button","copyFrom","source","disposeData","scrollbarChart","addData","rawDataItem","removeCount","registeredClasses","CategoryAxisDataItem","CategoryAxis","__WEBPACK_IMPORTED_MODULE_1__Axis__","__WEBPACK_IMPORTED_MODULE_2__core_Registry__","__WEBPACK_IMPORTED_MODULE_3__core_utils_Dictionary__","__WEBPACK_IMPORTED_MODULE_4__CategoryAxisBreak__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Iterator__","__WEBPACK_IMPORTED_MODULE_8__core_utils_Adapter__","text","locations","category","endCategory","isEnabled","apply","properties","setProperty","dataItemsByCategory","axisFieldName","_lastDataItem","createDataItem","component","createAxisBreak","validateDataRange","_series","invalidateDataRange","axisBreaks","dataCount","startIndex","floor","endIndex","ceil","maxCount","axisLength","minGridDistance","frequency","_startIndex","_endIndex","fixAxisBreaks","_frequency","maxZoomFactor","resetIterators","itemIndex","dataItem","__disabled","isInBreak","appendDataItem","validateDataElement","axisBreak","adjustedStartValue","adjustedEndValue","frequency_1","breakSize","itemIndex_1","validateBreaks","validateAxisRanges","ghostLabel","invalidateLayout","categoryToIndex","fillEndIndex","fillPosition","fillEndPosition","indexToPosition","endPosition","isRange","axisFill","location","positionToPoint","tick","disabled","updateTickElement","grid","updateGridElement","updateLabelElement","currentText","updateFillElement","fillRule","processDataItem","dataContext","existingDataItem","getKey","remove","setKey","adjustDifference","startLocation","endLocation","breakStartIndex","breakEndIndex","categoryToPosition","categoryToPoint","angle","positionToAngle","anyToPoint","anyToPosition","zoomToCategories","startCategory","zoomToIndexes","getAnyRangePath","startPos","endPos","getPositionRangePath","positionToIndex","getSeriesDataItem","getX","key","categories","basePoint","getY","getAngle","stackKey","getCellStartPosition","getCellEndPosition","getTooltipText","breakStartPosition","startPosition","breakEndPosition","breakPosition","initRenderer","baseGrid","AxisLabelCircular","__WEBPACK_IMPORTED_MODULE_1__AxisLabel__","__WEBPACK_IMPORTED_MODULE_3__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Utils__","fdx","fdy","radius","isMeasured","setPercentProperty","pixelRadius","axisRadius","sign","inside","fixPoint","atan2","relativeRotation","dy","_measuredHeight","dx","_measuredWidth","labelRadius","bbox","rotation","dH","dW","pixelPaddingBottom","pixelPaddingTop","pixelPaddingLeft","pixelPaddingRight","XYSeriesDataItem","XYSeries","__WEBPACK_IMPORTED_MODULE_1__Series__","__WEBPACK_IMPORTED_MODULE_2__core_Sprite__","__WEBPACK_IMPORTED_MODULE_3__axes_ValueAxis__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Dictionary__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Disposer__","__WEBPACK_IMPORTED_MODULE_7__axes_DateAxis__","__WEBPACK_IMPORTED_MODULE_8__core_Registry__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Iterator__","__WEBPACK_IMPORTED_MODULE_10__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_11__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_12__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_13__core_utils_Array__","__WEBPACK_IMPORTED_MODULE_14__core_utils_Object__","__WEBPACK_IMPORTED_MODULE_15__core_rendering_Path__","values","valueX","stack","valueY","openValueX","openValueY","dateX","dateY","openDateX","openDateY","setLocation","setValue","getDate","date","setDate","categoryX","setCategory","categoryY","openCategoryX","openCategoryY","getMin","working","stackValue","field","getWorkingValue","getValue","getMax","_xAxis","_yAxis","mainContainer","setElement","paper","stacked","snapTooltip","pointerOrientation","returnBulletDefaultState","_tmin","clear","_tmax","_smin","_smax","seriesDataChangeUpdate","defineFields","data","updateItemReaderText","_xField","_yField","name","uid","disable","processSeriesDataItem","enable","setInitialWorkingValues","_chart","dataItemsX","dataItemsByAxis","dataItemsY","xAxisFieldName","xField","xOpenField","yAxisFieldName","yField","yOpenField","_xOpenField","_yOpenField","baseAxis","_xValueFields","_yValueFields","addValueField","indexOf","setCategoryAxisField","setDateAxisField","afterDraw","createMask","path_1","getMaskPath","fillPath","path","getAxisField","validateDataItems","updateAxisBySeries","postProcessSeriesDataItems","dataRangeInvalid","_showBullets","minBulletDistance","get","oldAxis","removeKey","set","registerSeries","invalidateData","_baseAxis","processValues","minX","Infinity","maxX","minY","getStackValue","stackX","stackY","processSeriesDataItems","xAxisId","yAxisId","stackedSeries","dispatchImmediately","_prevTooltipDataItem","toAxisPosition","tooltipDataItem","tooltipXField","tooltipYField","tooltipPoint","getPoint","tooltipX","tooltipY","_a","bullets","_b","done","isHover","showTooltip","tooltipText","bullet","isDisposed","positionBullet","hasValue","bulletLocationX","getBulletLocationX","bulletLocationY","getBulletLocationY","moveTo","bulletLocation","workingLocations","duration","anim","delay","interpolationDuration","defaultState","transitionDuration","sequencedInterpolation","sequencedInterpolationDelay","animation","isFinished","minZoomed","maxZoomed","hiddenState","validateDataElements","handleDataItemWorkingValueChange","axisSeries","invalidateProcessedData","field_1","setCalculatedValue","backwards","prevSeries","prevDataItem","prevValue","_tooltipXField","_tooltipYField","selectionMin","selectionMax","map","hasKey","xKey","yKey","stackKeyX","stackKeyY","val","itemReaderText","DateAxisDataItem","DateAxis","__WEBPACK_IMPORTED_MODULE_1__ValueAxis__","__WEBPACK_IMPORTED_MODULE_2__core_utils_List__","__WEBPACK_IMPORTED_MODULE_4__DateAxisBreak__","__WEBPACK_IMPORTED_MODULE_5__core_Registry__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Time__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_8__core_utils_Iterator__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_10__core_utils_Object__","endDate","dates","getTime","endValue","gridIntervals","dateFormats","periodChangeDateFormats","_baseIntervalReal","timeUnit","count","_minDifference","gridInterval","_gridInterval","gridDuration","pushAll","periodCount","baseDuration","handleSelectionExtremesChange","calculateZoom","chooseInterval","_minZoomed","_maxZoomed","_gridCount","baseInterval","_gridDate","Date","_nextGridUnit","_intervalDuration","_difference","findClosestIndex","minDifference","MAX_VALUE","postProcessSeriesDataItem","addEmptyUnitsBreaks","startDate","toString","skipEmptyPeriods","startTime","startTimeStr","this_1","create","_axisBreaks","breakGridCount","gridDate","getGridDate","intervalCount","realIntervalCount","prevTimestamp","newDate","timestamp","durationBreaksRemoved","getBreaklessDate","validateAxisElements","prevGridDate","dataItemsIterator_1","_dataItemsIterator","this_2","format","markUnitChange","dateFormatter","find","renderer_1","timeUnit_1","intervalCount_1","startPoint","endPoint","prevGridDate_1","timestamp_1","text_1","adjustedMax","endTimestamp","valueToPosition","location_1","adjustMinMax","step","fixMin","fixMax","gridCount","intervalDuration","lastIndex","formatLabel","dateToPosition","dateToPoint","valueToPoint","positionToDate","positionToValue","getTimeByLocation","baseValue","endTime","time","openTime","openDate","prevSeriesTime","_prevSeriesTime","abs","differece","_baseInterval","timeInterval","breakTemplate","template","startLine","endLine","fillShape","tooltipDateFormat","dateFormat","findNearest","leftCount","leftDataItem","leftDate","rightCount","rightDataItem","rightDate","getCurrentLabelFormat","ticks","labels","zoomToDates","skipRangeEvent","parse","zoomToValues","asIs","local","closestDate_1","actualTime_1","globalPosition","toGlobalPosition","XYCursor","__WEBPACK_IMPORTED_MODULE_1__Cursor__","__WEBPACK_IMPORTED_MODULE_3__core_utils_Disposer__","__WEBPACK_IMPORTED_MODULE_4__core_Registry__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Color__","__WEBPACK_IMPORTED_MODULE_6__core_utils_InterfaceColorSet__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_8__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_10__core_rendering_Path__","_lineX","_lineY","interfaceColors","selection","getFor","interactionsEnabled","lineX","strokeDasharray","strokeOpacity","lineY","updateSize","innerHeight","innerWidth","updateSelection","_usesSelection","downPoint","pixelX","w","_positionPrecision","h","validatePosition","triggerMoveReal","updateLinePositions","_generalBehavior","getPanningRanges","dispatch","triggerDownReal","fitsToBounds","updatePoint","selectionX","selectionY","triggerUpReal","upPoint","getRanges","startX","startY","deltaX","deltaY","endX","endY","handleXTooltipPosition","handleYTooltipPosition","fullWidthLineX","currentItemStartPoint","currentItemEndPoint","fullWidthLineY","reset","_selection","element","LineSeriesDataItem","LineSeries","__WEBPACK_IMPORTED_MODULE_1__XYSeries__","__WEBPACK_IMPORTED_MODULE_3__core_Container__","__WEBPACK_IMPORTED_MODULE_4__core_utils_List__","__WEBPACK_IMPORTED_MODULE_5__LineSeriesSegment__","__WEBPACK_IMPORTED_MODULE_6__axes_ValueAxis__","__WEBPACK_IMPORTED_MODULE_9__core_elements_Line__","__WEBPACK_IMPORTED_MODULE_10__core_elements_Label__","__WEBPACK_IMPORTED_MODULE_11__core_elements_Rectangle__","__WEBPACK_IMPORTED_MODULE_12__core_utils_Iterator__","__WEBPACK_IMPORTED_MODULE_13__core_utils_Object__","__WEBPACK_IMPORTED_MODULE_14__core_utils_Type__","minDistance","segments","createSegment","applyOnClones","_segmentsIterator","createNewItems","connect","tensionX","tensionY","segmentsContainer","previousDataItem","initialY","workingValue","setWorkingValue","setWorkingLocation","initialX","segment","tooltipColorSource","openSegment","_workingStartIndex","sliceData","_workingEndIndex","openIndex","closeIndex","points","propertiesChanged","getFirst","contents","filters","hasProperties","updateSegmentProperties","addPoints","closeSegment","closePoints","drawSegment","itemProperties","checkOnly","changed","propertyName","currentValue","currentValueStr","valueStr","createLegendMarker","marker","disposeChildren","line","x2","copyToLegendMarker","hasLabels_1","children","child","clone","LineSeriesSegment","__WEBPACK_IMPORTED_MODULE_1__core_Container__","__WEBPACK_IMPORTED_MODULE_3__core_Registry__","__WEBPACK_IMPORTED_MODULE_4__core_rendering_Path__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Object__","__WEBPACK_IMPORTED_MODULE_6__core_rendering_Smoothing__","fillSprite","strokeSprite","smoothnessX","smoothnessY","smooth","lineElement","fillElement","PieSeriesDataItem","PieSeries","__WEBPACK_IMPORTED_MODULE_1__PercentSeries__","__WEBPACK_IMPORTED_MODULE_2__core_elements_Slice__","__WEBPACK_IMPORTED_MODULE_3__axes_AxisLabelCircular__","__WEBPACK_IMPORTED_MODULE_4__elements_PieTick__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_8__core_utils_Percent__","radiusValue","toValue","alignLabels","startAngle","endAngle","createSlice","createTick","createLabel","initSlice","slice","scale","handleSliceScale","handleSliceMove","states","shiftRadius","togglable","_leftItems","_rightItems","_currentStartAngle","_arcRect","_maxRadiusPercent","radiusValuePercent","percent","reverse","aAngle","middleAngle","bAngle","arrangeLabels","innerRadius","pixelInnerRadius","arc","normalizedMiddleAngle","verticalCenter","arcRect","horizontalCenter","distance","iy","ix","radiusY","_pixelRadius","_pixelInnerRadius","definedBBox","Candlestick","__WEBPACK_IMPORTED_MODULE_1__Column__","__WEBPACK_IMPORTED_MODULE_2__core_elements_Line__","createAssets","lowLine","highLine","AxisRendererCircular","__WEBPACK_IMPORTED_MODULE_1__AxisRenderer__","__WEBPACK_IMPORTED_MODULE_2__AxisFillCircular__","__WEBPACK_IMPORTED_MODULE_3__GridCircular__","__WEBPACK_IMPORTED_MODULE_4__AxisLabelCircular__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Percent__","__WEBPACK_IMPORTED_MODULE_8__core_rendering_Path__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_10__core_utils_Type__","pixelRadiusReal","useChartAngles","pixelPerfect","tooltipLocation","setAxis","cos","sin","PI","coordinate","positionToCoordinate","updateAxisLine","gridInnerRadius","toggleVisibility","tickLength","positionItem","minLabelPosition","maxLabelPosition","cornerRadius","createGrid","createFill","pointToPosition","coordinateToPosition","AxisFillCircular","__WEBPACK_IMPORTED_MODULE_2__core_utils_Percent__","__WEBPACK_IMPORTED_MODULE_1__AxisFill__","GridCircular","__WEBPACK_IMPORTED_MODULE_1__Grid__","RadarChartDataItem","RadarChart","__WEBPACK_IMPORTED_MODULE_1__XYChart__","__WEBPACK_IMPORTED_MODULE_3__series_RadarSeries__","__WEBPACK_IMPORTED_MODULE_4__core_Container__","__WEBPACK_IMPORTED_MODULE_5__core_elements_Circle__","__WEBPACK_IMPORTED_MODULE_6__core_Registry__","__WEBPACK_IMPORTED_MODULE_7__cursors_RadarCursor__","__WEBPACK_IMPORTED_MODULE_8__axes_AxisRendererCircular__","__WEBPACK_IMPORTED_MODULE_9__axes_AxisRendererRadial__","__WEBPACK_IMPORTED_MODULE_10__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_11__core_utils_Iterator__","__WEBPACK_IMPORTED_MODULE_13__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_14__core_rendering_Path__","innerRadiusModifyer","radarContainer","opacity","beforeDraw","rect","innerRect","wr","hr","mr","maxRadius","diameter","CategoryAxisBreak","__WEBPACK_IMPORTED_MODULE_1__AxisBreak__","invalidateSeries","DateAxisBreak","__WEBPACK_IMPORTED_MODULE_1__ValueAxisBreak__","startValue","Cursor","__WEBPACK_IMPORTED_MODULE_2__core_interaction_Interaction__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Percent__","__WEBPACK_IMPORTED_MODULE_5__core_interaction_Mouse__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_8__core_utils_Type__","_stick","trackable","clickable","interaction","body","handleCursorDown","handleCursorUp","handleCursorMove","isLocalElement","pointer","svg","_stickPoint","triggerMove","isHidden","hideReal","stick","invalidatePosition","getPositions","triggerDown","setGlobalStyle","grabbing","triggerUp","getHitOption","interactions","default","cancelable","preventDefault","lockElement","XYChartScrollbar","__WEBPACK_IMPORTED_MODULE_1__core_elements_Scrollbar__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Disposer__","__WEBPACK_IMPORTED_MODULE_5__types_XYChart__","__WEBPACK_IMPORTED_MODULE_7__core_utils_InterfaceColorSet__","__WEBPACK_IMPORTED_MODULE_8__core_rendering_filters_DesaturateFilter__","__WEBPACK_IMPORTED_MODULE_11__core_rendering_Path__","margin","_scrollbarChart","minHeight","minWidth","unselectedOverlay","_unselectedOverlay","thumbBackground","thumb","hoverState","downState","handleSeriesRemoved","sourceSeries","addXAxis","addYAxis","title","rangeChangeDuration","id","axisFills","showOnInit","zoomOutAxes","updateByOrientation","off","handleDataChanged","updateThumb","RadarSeriesDataItem","RadarSeries","__WEBPACK_IMPORTED_MODULE_1__LineSeries__","connectEnds","unshift","RadarCursor","truePixelRadius","cursorTooltipEnabled","updateLineX","updateLineY","fillStartAngle","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","__WEBPACK_IMPORTED_MODULE_6__core_utils_Utils__","upAngle","upRadius","__WEBPACK_IMPORTED_MODULE_1__XYCursor__","AxisRendererRadial","__WEBPACK_IMPORTED_MODULE_1__AxisRendererY__","__WEBPACK_IMPORTED_MODULE_2__CategoryAxis__","__WEBPACK_IMPORTED_MODULE_3__core_elements_WavedCircle__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Percent__","gridType","axisAngle","gridLocation","count_1","cellEndLocation","updateBaseGridElement","invalidateAxisItems","count_2","updateBreakElement","createBreakSprites","updateTooltip","tooltipOrientation","bigNum","axisFullLength","ClockHand","__WEBPACK_IMPORTED_MODULE_2__core_elements_Circle__","__WEBPACK_IMPORTED_MODULE_3__core_elements_Trapezoid__","_axis","pin","startWidth","endWidth","hand","leftSide","rightSide","x0","x1","_pin","_hand","showValue","easing","_value","newAngle","currentAngle","rotationDirection","animate","property","to","updateValue","PieChartDataItem","PieChart","__WEBPACK_IMPORTED_MODULE_1__PercentChart__","__WEBPACK_IMPORTED_MODULE_3__series_PieSeries__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Iterator__","updateRadius","validateLayout","updateSeriesAngles","chartCont","chartRadius","chartPixelInnerRadius","seriesRadius","PercentChartDataItem","PercentChart","__WEBPACK_IMPORTED_MODULE_2__series_PercentSeries__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Iterator__","feedLegend","legend","legendData_1","hiddenInLegend","legendSettings","labelText","itemLabelText","valueText","valueLabels","itemValueText","setLegend","itemContainers","PercentSeriesDataItem","PieTick","__WEBPACK_IMPORTED_MODULE_1__elements_Tick__","__WEBPACK_IMPORTED_MODULE_2__core_utils_Disposer__","_label","_slice","y0","y1","y2","r","attr","PieSeries3DDataItem","PieSeries3D","__WEBPACK_IMPORTED_MODULE_1__series_PieSeries__","__WEBPACK_IMPORTED_MODULE_2__core_elements_3d_Slice3D__","depthValue","depth","depthPercent","ChordNode","__WEBPACK_IMPORTED_MODULE_1__FlowDiagramNode__","__WEBPACK_IMPORTED_MODULE_2__axes_AxisLabelCircular__","__WEBPACK_IMPORTED_MODULE_4__core_elements_Slice__","__WEBPACK_IMPORTED_MODULE_5__core_utils_InterfaceColorSet__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Iterator__","__WEBPACK_IMPORTED_MODULE_9__elements_Bullet__","updateRotation","setStateOnChildren","invalidateLinks","total","arc_1","sliceStartAngle_1","childAngle","childRadius","labelAngle","adjustedTotal","nextAngle","_outgoingSorted","link","linksContainer","nonRibbon","percentWidth","valueAngle","toNode","_incomingSorted","fromNode","mAngle","trueStartAngle","tx","ty","ChordLink","__WEBPACK_IMPORTED_MODULE_1__FlowDiagramLink__","__WEBPACK_IMPORTED_MODULE_3__core_elements_QuadraticCurve__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_5__core_rendering_Path__","middleLine","isTemplate","fromX","fromY","toX","toY","cp","bulletsMask","mAngle1","mAngle2","cpx","cpy","positionBullets","TreeMapSeriesDataItem","TreeMapSeries","__WEBPACK_IMPORTED_MODULE_1__ColumnSeries__","__WEBPACK_IMPORTED_MODULE_4__core_utils_InterfaceColorSet__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_6__core_elements_RoundedRectangle__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Object__","treeMapDataItem","_dataContext","columns","configField","seriesDataItem","showReal","removeChildren","column","AxisRendererX3D","__WEBPACK_IMPORTED_MODULE_1__axes_AxisRendererX__","dx3D","dy3D","getHeight","handle3DChanged","AxisRendererY3D","__WEBPACK_IMPORTED_MODULE_1__axes_AxisRendererY__","__WEBPACK_IMPORTED_MODULE_3__core_rendering_Path__","getWidth","ColumnSeries3DDataItem","ColumnSeries3D","__WEBPACK_IMPORTED_MODULE_1__series_ColumnSeries__","__WEBPACK_IMPORTED_MODULE_2__elements_Column3D__","column3D","columnsContainer","_columnsContainer","validateDataElementReal","createColumnTemplate","CandlestickSeriesDataItem","CandlestickSeries","__WEBPACK_IMPORTED_MODULE_3__elements_Candlestick__","lowValueX","lowValueY","highValueX","highValueY","positiveColor","negativeColor","dropFromOpenState","riseFromOpenState","validateCandlestick","lowLine_1","highLine_1","open_1","close_1","yOpen","yClose","yLow","yLowField","yHigh","yHighField","open_2","close_2","xOpen","xClose","xLow","xLowField","xHigh","xHighField","rangeColumn","rangesColumns","rangeLowLine","rangehighLine","_xLowField","_yLowField","_xHighField","_yHighField","cw","ch","OHLC","__WEBPACK_IMPORTED_MODULE_1__Candlestick__","openLine","highLowLine","closeLine","RadarColumn","radarColumn","getTooltipX","getTooltipY","PyramidSeriesDataItem","PyramidSeries","__WEBPACK_IMPORTED_MODULE_1__FunnelSeries__","__WEBPACK_IMPORTED_MODULE_3__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Utils__","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","s","sqrt","_nextY","sliceWidth","ConeColumn","__WEBPACK_IMPORTED_MODULE_2__core_elements_3d_Cone__","coneColumn","CurvedColumn","__WEBPACK_IMPORTED_MODULE_5__core_rendering_Smoothing__","curvedColumn","realWidth","realHeight","realX","realY","tension","__WEBPACK_IMPORTED_MODULE_0__es2015_charts__","window","am4charts","__WEBPACK_IMPORTED_MODULE_0__internal_charts_types_GaugeChart__","__WEBPACK_IMPORTED_MODULE_1__internal_charts_types_RadarChart__","__WEBPACK_IMPORTED_MODULE_2__internal_charts_types_XYChart__","__WEBPACK_IMPORTED_MODULE_3__internal_charts_types_SerialChart__","__WEBPACK_IMPORTED_MODULE_4__internal_charts_types_PieChart3D__","__WEBPACK_IMPORTED_MODULE_5__internal_charts_types_PieChart__","__WEBPACK_IMPORTED_MODULE_6__internal_charts_types_SlicedChart__","__WEBPACK_IMPORTED_MODULE_7__internal_charts_types_FlowDiagram__","__WEBPACK_IMPORTED_MODULE_8__internal_charts_types_SankeyDiagram__","__WEBPACK_IMPORTED_MODULE_9__internal_charts_types_ChordDiagram__","__WEBPACK_IMPORTED_MODULE_10__internal_charts_types_TreeMap__","__WEBPACK_IMPORTED_MODULE_11__internal_charts_types_XYChart3D__","__WEBPACK_IMPORTED_MODULE_12__internal_charts_Chart__","__WEBPACK_IMPORTED_MODULE_13__internal_charts_Legend__","__WEBPACK_IMPORTED_MODULE_14__internal_charts_elements_HeatLegend__","__WEBPACK_IMPORTED_MODULE_15__internal_charts_series_Series__","__WEBPACK_IMPORTED_MODULE_16__internal_charts_series_XYSeries__","__WEBPACK_IMPORTED_MODULE_17__internal_charts_series_LineSeries__","__WEBPACK_IMPORTED_MODULE_18__internal_charts_series_LineSeriesSegment__","__WEBPACK_IMPORTED_MODULE_19__internal_charts_series_CandlestickSeries__","__WEBPACK_IMPORTED_MODULE_20__internal_charts_series_OHLCSeries__","__WEBPACK_IMPORTED_MODULE_21__internal_charts_series_ColumnSeries__","__WEBPACK_IMPORTED_MODULE_22__internal_charts_series_StepLineSeries__","__WEBPACK_IMPORTED_MODULE_23__internal_charts_series_RadarSeries__","__WEBPACK_IMPORTED_MODULE_24__internal_charts_series_RadarColumnSeries__","__WEBPACK_IMPORTED_MODULE_25__internal_charts_series_PieSeries__","__WEBPACK_IMPORTED_MODULE_26__internal_charts_series_FunnelSeries__","__WEBPACK_IMPORTED_MODULE_27__internal_charts_series_PyramidSeries__","__WEBPACK_IMPORTED_MODULE_28__internal_charts_series_PictorialStackedSeries__","__WEBPACK_IMPORTED_MODULE_29__internal_charts_elements_PieTick__","__WEBPACK_IMPORTED_MODULE_30__internal_charts_elements_FunnelSlice__","__WEBPACK_IMPORTED_MODULE_31__internal_charts_series_PieSeries3D__","__WEBPACK_IMPORTED_MODULE_32__internal_charts_series_TreeMapSeries__","__WEBPACK_IMPORTED_MODULE_33__internal_charts_series_ColumnSeries3D__","__WEBPACK_IMPORTED_MODULE_34__internal_charts_series_ConeSeries__","__WEBPACK_IMPORTED_MODULE_35__internal_charts_series_CurvedColumnSeries__","__WEBPACK_IMPORTED_MODULE_36__internal_charts_axes_Axis__","__WEBPACK_IMPORTED_MODULE_37__internal_charts_axes_Grid__","__WEBPACK_IMPORTED_MODULE_38__internal_charts_axes_AxisTick__","__WEBPACK_IMPORTED_MODULE_39__internal_charts_axes_AxisLabel__","__WEBPACK_IMPORTED_MODULE_40__internal_charts_axes_AxisLine__","__WEBPACK_IMPORTED_MODULE_41__internal_charts_axes_AxisFill__","__WEBPACK_IMPORTED_MODULE_42__internal_charts_axes_AxisRenderer__","__WEBPACK_IMPORTED_MODULE_43__internal_charts_axes_AxisBreak__","__WEBPACK_IMPORTED_MODULE_44__internal_charts_axes_ValueAxis__","__WEBPACK_IMPORTED_MODULE_45__internal_charts_axes_CategoryAxis__","__WEBPACK_IMPORTED_MODULE_46__internal_charts_axes_CategoryAxisBreak__","__WEBPACK_IMPORTED_MODULE_47__internal_charts_axes_DateAxis__","__WEBPACK_IMPORTED_MODULE_48__internal_charts_axes_DurationAxis__","__WEBPACK_IMPORTED_MODULE_49__internal_charts_axes_DateAxisBreak__","__WEBPACK_IMPORTED_MODULE_50__internal_charts_axes_ValueAxisBreak__","__WEBPACK_IMPORTED_MODULE_51__internal_charts_axes_AxisRendererX__","__WEBPACK_IMPORTED_MODULE_52__internal_charts_axes_AxisRendererY__","__WEBPACK_IMPORTED_MODULE_53__internal_charts_axes_AxisRendererRadial__","__WEBPACK_IMPORTED_MODULE_54__internal_charts_axes_AxisLabelCircular__","__WEBPACK_IMPORTED_MODULE_55__internal_charts_axes_AxisRendererCircular__","__WEBPACK_IMPORTED_MODULE_56__internal_charts_axes_AxisFillCircular__","__WEBPACK_IMPORTED_MODULE_57__internal_charts_axes_GridCircular__","__WEBPACK_IMPORTED_MODULE_58__internal_charts_axes_AxisRendererX3D__","__WEBPACK_IMPORTED_MODULE_59__internal_charts_axes_AxisRendererY3D__","__WEBPACK_IMPORTED_MODULE_60__internal_charts_elements_Tick__","__WEBPACK_IMPORTED_MODULE_61__internal_charts_elements_Bullet__","__WEBPACK_IMPORTED_MODULE_62__internal_charts_elements_LabelBullet__","__WEBPACK_IMPORTED_MODULE_63__internal_charts_elements_CircleBullet__","__WEBPACK_IMPORTED_MODULE_64__internal_charts_elements_ErrorBullet__","__WEBPACK_IMPORTED_MODULE_65__internal_charts_elements_XYChartScrollbar__","__WEBPACK_IMPORTED_MODULE_66__internal_charts_elements_ClockHand__","__WEBPACK_IMPORTED_MODULE_67__internal_charts_elements_FlowDiagramNode__","__WEBPACK_IMPORTED_MODULE_68__internal_charts_elements_FlowDiagramLink__","__WEBPACK_IMPORTED_MODULE_69__internal_charts_elements_SankeyNode__","__WEBPACK_IMPORTED_MODULE_70__internal_charts_elements_SankeyLink__","__WEBPACK_IMPORTED_MODULE_71__internal_charts_elements_ChordNode__","__WEBPACK_IMPORTED_MODULE_72__internal_charts_elements_ChordLink__","__WEBPACK_IMPORTED_MODULE_73__internal_charts_elements_NavigationBar__","__WEBPACK_IMPORTED_MODULE_74__internal_charts_elements_Column__","__WEBPACK_IMPORTED_MODULE_75__internal_charts_elements_Candlestick__","__WEBPACK_IMPORTED_MODULE_76__internal_charts_elements_OHLC__","__WEBPACK_IMPORTED_MODULE_77__internal_charts_elements_RadarColumn__","__WEBPACK_IMPORTED_MODULE_78__internal_charts_elements_Column3D__","__WEBPACK_IMPORTED_MODULE_79__internal_charts_elements_ConeColumn__","__WEBPACK_IMPORTED_MODULE_80__internal_charts_elements_CurvedColumn__","__WEBPACK_IMPORTED_MODULE_81__internal_charts_cursors_XYCursor__","__WEBPACK_IMPORTED_MODULE_82__internal_charts_cursors_Cursor__","__WEBPACK_IMPORTED_MODULE_83__internal_charts_cursors_RadarCursor__","GaugeChartDataItem","GaugeChart","__WEBPACK_IMPORTED_MODULE_1__RadarChart__","__WEBPACK_IMPORTED_MODULE_3__elements_ClockHand__","hands","processHand","PieChart3DDataItem","PieChart3D","__WEBPACK_IMPORTED_MODULE_1__PieChart__","__WEBPACK_IMPORTED_MODULE_2__series_PieSeries3D__","invalidateDataUsers","SlicedChartDataItem","SlicedChart","ChordDiagramDataItem","ChordDiagram","__WEBPACK_IMPORTED_MODULE_1__FlowDiagram__","__WEBPACK_IMPORTED_MODULE_5__elements_ChordNode__","__WEBPACK_IMPORTED_MODULE_6__elements_ChordLink__","__WEBPACK_IMPORTED_MODULE_8__core_utils_Math__","nodePadding","chordContainer","nodesContainer","newTotal","_sorted","strNode","node","getNodeValue","minNodeSize","links","createNode","createLink","QuadraticCurve","__WEBPACK_IMPORTED_MODULE_1__Line__","__WEBPACK_IMPORTED_MODULE_2__utils_Color__","__WEBPACK_IMPORTED_MODULE_3__rendering_Path__","__WEBPACK_IMPORTED_MODULE_4__utils_Math__","__WEBPACK_IMPORTED_MODULE_5__utils_Type__","p1","p2","point1","point2","TreeMapDataItem","TreeMap","__WEBPACK_IMPORTED_MODULE_4__axes_ValueAxis__","__WEBPACK_IMPORTED_MODULE_5__series_TreeMapSeries__","__WEBPACK_IMPORTED_MODULE_6__core_utils_ColorSet__","__WEBPACK_IMPORTED_MODULE_7__core_interaction_Mouse__","__WEBPACK_IMPORTED_MODULE_10__core_utils_Array__","rows","hasChildren","level","color","layoutAlgorithm","squarify","zoomable","maxLevels","currentLevel","sorting","strictMinMax","xRenderer","yRenderer","seriesTemplates","zoomToChartDataItem","_homeDataItem","_navigationBar","navigationBar","createTreeSeries","homeDataItem","_homeText","layoutItems","_tempSeries","navigationData","parentDataItem","initSeries","createTreeSeriesReal","cursorOverStyle","zoomToSeriesDataItem","toggleBullets","currentlyZoomed","rangeChangeAnimation","_dataDisposers","once","binaryTree","dice","sliceDice","validateRawData","nodes","n","sums","Array","partition","j","valueOffset","valueTarget","k","hi","mid","valueLeft","valueRight","xk","yk","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","ratio","i0","i1","row","handleDataItemValueChange","XYChart3DDataItem","XYChart3D","__WEBPACK_IMPORTED_MODULE_3__core_Sprite__","__WEBPACK_IMPORTED_MODULE_4__axes_AxisRendererX3D__","__WEBPACK_IMPORTED_MODULE_5__axes_AxisRendererY3D__","__WEBPACK_IMPORTED_MODULE_6__series_ColumnSeries3D__","__WEBPACK_IMPORTED_MODULE_7__core_Registry__","fixLayout","fixColumns","clustered","depthIndex","i_1","maskColumns","OHLCSeriesDataItem","OHLCSeries","__WEBPACK_IMPORTED_MODULE_1__CandlestickSeries__","__WEBPACK_IMPORTED_MODULE_3__elements_OHLC__","openLine_1","highLowLine_1","closeLine_1","rangeOpenLine","rangeCloseLine","rangeHighLowLine","StepLineSeriesDataItem","StepLineSeries","__WEBPACK_IMPORTED_MODULE_2__StepLineSeriesSegment__","noRisers","prevPoint","point0","vertical","StepLineSeriesSegment","__WEBPACK_IMPORTED_MODULE_1__LineSeriesSegment__","RadarColumnSeriesDataItem","RadarColumnSeries","__WEBPACK_IMPORTED_MODULE_3__elements_RadarColumn__","lAngle","rAngle","tRadius","bRadius","getStartLocation","getEndLocation","cellAngle","offset","temp","addSprite","setColumnStates","disableUnusedColumns","PictorialStackedSeriesDataItem","PictorialStackedSeries","__WEBPACK_IMPORTED_MODULE_1__PyramidSeries__","_maskSprite","maskSprite","pictureWidth","pictureHeight","newWidth","newHeight","hs","expandDistance","ConeSeriesDataItem","ConeSeries","__WEBPACK_IMPORTED_MODULE_2__elements_ConeColumn__","CurvedColumnSeriesDataItem","CurvedColumnSeries","__WEBPACK_IMPORTED_MODULE_2__elements_CurvedColumn__","DurationAxisDataItem","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","__WEBPACK_IMPORTED_MODULE_1__Bullet__","circle","ErrorBullet","errorLine","isDynamic","NavigationBarDataItem","NavigationBar","__WEBPACK_IMPORTED_MODULE_1__core_Component__","__WEBPACK_IMPORTED_MODULE_2__core_DataItem__","__WEBPACK_IMPORTED_MODULE_4__core_elements_TextLink__","__WEBPACK_IMPORTED_MODULE_5__core_elements_Triangle__","textLink","paddingTop","paddingBottom","_linksIterator","triangle","direction","marginLeft","separators","activeLink","fontWeight","getLast","separator","ColumnSeriesDataItem","ColumnSeries","__WEBPACK_IMPORTED_MODULE_5__core_utils_Dictionary__","__WEBPACK_IMPORTED_MODULE_7__axes_CategoryAxis__","__WEBPACK_IMPORTED_MODULE_9__elements_Column__","__WEBPACK_IMPORTED_MODULE_10__core_elements_RoundedRectangle__","__WEBPACK_IMPORTED_MODULE_12__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_14__core_utils_Iterator__","__WEBPACK_IMPORTED_MODULE_15__core_utils_Array__","__WEBPACK_IMPORTED_MODULE_17__core_utils_Disposer__","_column","setColumn","_rangesColumns","_startLocation","_endLocation","simplifiedProcessing","baseAxisSeries","clusterCount","cellStartLocation","l","t","percentHeight","outOfBounds","fixHorizontalCoordinate","fixVerticalCoordinate","bottomLocation","topLocation","rightLocation","leftLocation","column_1","itemsFocusable","role","focusable","ev","populateString","virtualParent","itemWidth","itemHeight","change","droppedFromOpen","_dropFromOpenState","setState","_riseFromOpenState","droppedFromPrevious","_dropFromPreviousState","_riseFromPreviousState","_columns","legendDataItem","fromOpenState_1","fromPreviousState_1"],"mappings":"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","file":"charts.js","sourcesContent":["/**\r\n * XY Chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IComponentEvents } from \"../../core/Component\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { Optional } from \"../../core/utils/Type\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererX } from \"../axes/AxisRendererX\";\r\nimport { AxisRendererY } from \"../axes/AxisRendererY\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { Scrollbar, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { XYCursor, IXYCursorEvents } from \"../cursors/XYCursor\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IDisposer, MultiDisposer, MutableValueDisposer, Disposer } from \"../../core/utils/Disposer\";\r\nimport { Button } from \"../../core/elements/Button\";\r\nimport { ZoomOutButton } from \"../../core/elements/ZoomOutButton\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { Ordering } from \"../../core/utils/Order\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { XYChartScrollbar } from \"../elements/XYChartScrollbar\";\r\n\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChartDataItem extends SerialChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {XYChart}\r\n\t */\r\n\tpublic _component!: XYChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart]].\r\n */\r\nexport interface IXYChartDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[XYChart]].\r\n */\r\nexport interface IXYChartProperties extends ISerialChartProperties {\r\n\r\n\t/**\r\n\t * A container that is used as a maske for bullets so that they can't\r\n\t * \"spill\" outside of the plot area.\r\n\t *\r\n\t * @type {[type]}\r\n\t */\r\n\tmaskBullets?: boolean;\r\n\r\n\t/**\r\n\t * Specifies what should chart do if when mouse wheel is rotated.\r\n\t *\r\n\t * @default \"none\"\r\n\t */\r\n\tmouseWheelBehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart]].\r\n */\r\nexport interface IXYChartEvents extends ISerialChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartAdapters extends ISerialChartAdapters, IXYChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates an XY chart, and any derivative chart, like Serial, Date-based, etc.\r\n *\r\n * Basically this is a chart type, that is used to display any chart\r\n * information in a square plot area.\r\n *\r\n * The horizontal and vertical scale is determined by the type of Axis.\r\n *\r\n * The plot types are determined by type of Series.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * let categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * let series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"XYChart\");\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * var series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Category axis\r\n * \t\"xAxes\": [{\r\n * \t\t\"type\": \"CategoryAxis\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Value axis\r\n * \t\"yAxes\": [{\r\n * \t\t\"type\": \"ValueAxis\"\r\n * \t}],\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"ColumnSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"categoryX\": \"country\",\r\n * \t\t\t\"valueY\": \"visits\"\r\n * \t\t},\r\n * \t\t\"name\": \"Web Traffic\"\r\n * \t}],\r\n *\r\n * \t// Cursor\r\n * \t\"cursor\": {},\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"USA\",\r\n * \t\t\"visits\": 3025\r\n * \t}, {\r\n * \t\t\"country\": \"China\",\r\n * \t\t\"visits\": 1882\r\n * \t}, {\r\n * \t\t\"country\": \"Japan\",\r\n * \t\t\"visits\": 1809\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"XYChart\");\r\n * ```\r\n *\r\n *\r\n * @see {@link IXYChartEvents} for a list of available Events\r\n * @see {@link IXYChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart extends SerialChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IXYChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYChartProperties}\r\n\t */\r\n\tpublic _properties!: IXYChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChartAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChartEvents}\r\n\t */\r\n\tpublic _events!: IXYChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {XYSeries}\r\n\t */\r\n\tpublic _seriesType: XYSeries;\r\n\r\n\t/**\r\n\t * A list of horizontal axes.\r\n\t *\r\n\t * @type {List>}\r\n\t */\r\n\tprotected _xAxes: List>;\r\n\r\n\t/**\r\n\t * A list of vertical axes.\r\n\t *\r\n\t * @type {List>}\r\n\t */\r\n\tprotected _yAxes: List>;\r\n\r\n\t/**\r\n\t * A container that holds vertical axes and plot area.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic yAxesAndPlotContainer: Container\r\n\r\n\t/**\r\n\t * A container that holds top axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic topAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds bottom axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic bottomAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds left axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic leftAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds right axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic rightAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container for plot area.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic plotContainer: Container;\r\n\r\n\t/**\r\n\t * A reference to horizontal [[Scrollbar]].\r\n\t *\r\n\t * @type {Scrollbar}\r\n\t */\r\n\tprotected _scrollbarX: Scrollbar;\r\n\r\n\t/**\r\n\t * A reference to vertical [[Scrollbar]].\r\n\t *\r\n\t * @type {Scrollbar}\r\n\t */\r\n\tprotected _scrollbarY: Scrollbar;\r\n\r\n\t/**\r\n\t * A reference to chart's cursor.\r\n\t *\r\n\t * @type {XYCursor}\r\n\t */\r\n\tpublic _cursor: XYCursor;\r\n\r\n\t/**\r\n\t * A container that chart's cursor is placed in.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tprotected _cursorContainer: Container;\r\n\r\n\t/**\r\n\t * Defines the type of horizontal axis rederer.\r\n\t *\r\n\t * @type {typeof AxisRendererX}\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX = AxisRendererX;\r\n\r\n\t/**\r\n\t * Defines the type of vertical axis rederer.\r\n\t *\r\n\t * @type {typeof AxisRendererY}\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY = AxisRendererY;\r\n\r\n\t/**\r\n\t * Defines the type horizontal axis renderer.\r\n\t *\r\n\t * @type {AxisRendererX}\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererX;\r\n\r\n\t/**\r\n\t * Defines the type of vertical axis renderer.\r\n\t *\r\n\t * @type {AxisRendererY}\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererY;\r\n\r\n\t/**\r\n\t * A button which is used to zoom out the chart.\r\n\t *\r\n\t * @type {Button}\r\n\t */\r\n\tprotected _zoomOutButton: Button;\r\n\r\n\t/**\r\n\t * An element that is used as a mask to contain bullets from spilling out of\r\n\t * the plot area.\r\n\t *\r\n\t * @type {Sprite}\r\n\t */\r\n\tprotected _bulletMask: Sprite;\r\n\r\n\r\n\tprotected _panStartXRange: IRange;\r\n\r\n\tprotected _panStartYRange: IRange;\r\n\r\n\tprotected _panEndXRange: IRange;\r\n\r\n\tprotected _panEndYRange: IRange;\r\n\r\n\tprotected _mouseWheelDisposer: IDisposer;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYChart\";\r\n\r\n\t\t// Set defaults\r\n\t\t//this.margin(10, 10, 10, 10);\r\n\t\tthis.maskBullets = true;\r\n\r\n\t\t// Create main chart container\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tchartContainer.layout = \"vertical\";\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Create top axes container\r\n\t\tlet topAxesCont = chartContainer.createChild(Container);\r\n\t\ttopAxesCont.shouldClone = false;\r\n\t\ttopAxesCont.layout = \"vertical\";\r\n\t\ttopAxesCont.width = percent(100);\r\n\t\ttopAxesCont.zIndex = 1;\r\n\t\tthis.topAxesContainer = topAxesCont;\r\n\r\n\t\t// Create vertical axes and plot area container\r\n\t\t// Plot area and vertical axes share the whole width of the chart,\r\n\t\t// so we need to put then into a separate container so that layouting\r\n\t\t// engine takes care of the positioning\r\n\t\tlet yAxesAndPlotCont = chartContainer.createChild(Container);\r\n\t\tyAxesAndPlotCont.shouldClone = false;\r\n\t\tyAxesAndPlotCont.layout = \"horizontal\";\r\n\t\tyAxesAndPlotCont.width = percent(100);\r\n\t\tyAxesAndPlotCont.height = percent(100);\r\n\t\tyAxesAndPlotCont.zIndex = 0;\r\n\t\tthis.yAxesAndPlotContainer = yAxesAndPlotCont;\r\n\r\n\t\t// Create a container for bottom axes\r\n\t\tlet bottomAxesCont = chartContainer.createChild(Container);\r\n\t\tbottomAxesCont.shouldClone = false;\r\n\t\tbottomAxesCont.width = percent(100);\r\n\t\tbottomAxesCont.layout = \"vertical\";\r\n\t\tbottomAxesCont.zIndex = 1;\r\n\t\tthis.bottomAxesContainer = bottomAxesCont;\r\n\r\n\t\t// Create a container for left-side axes\r\n\t\tlet leftAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tleftAxesCont.shouldClone = false;\r\n\t\tleftAxesCont.layout = \"horizontal\";\r\n\t\tleftAxesCont.height = percent(100);\r\n\t\tleftAxesCont.contentAlign = \"right\";\r\n\t\tleftAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tleftAxesCont.zIndex = 1;\r\n\t\tthis.leftAxesContainer = leftAxesCont;\r\n\r\n\t\t// Create a container for plot area\r\n\t\tlet plotCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tplotCont.shouldClone = false;\r\n\t\tplotCont.height = percent(100);\r\n\t\tplotCont.width = percent(100);\r\n\t\t// Create transparend background for plot container so that hover works\r\n\t\t// on all of it\r\n\t\tplotCont.background.fillOpacity = 0;\r\n\t\tthis.plotContainer = plotCont;\r\n\r\n\t\t// must go below plot container\r\n\t\tthis.mouseWheelBehavior = \"none\";\r\n\r\n\t\tthis._cursorContainer = plotCont;\r\n\r\n\t\t// Create a container for right-side axes\r\n\t\tlet rightAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\trightAxesCont.shouldClone = false;\r\n\t\trightAxesCont.layout = \"horizontal\";\r\n\t\trightAxesCont.height = percent(100);\r\n\t\trightAxesCont.zIndex = 1;\r\n\t\trightAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tthis.rightAxesContainer = rightAxesCont;\r\n\r\n\t\tthis.seriesContainer.parent = plotCont;\r\n\t\tthis.bulletsContainer.parent = plotCont;\r\n\r\n\t\tlet zoomOutButton = plotCont.createChild(ZoomOutButton);\r\n\t\tzoomOutButton.shouldClone = false;\r\n\t\tzoomOutButton.align = \"right\";\r\n\t\tzoomOutButton.valign = \"top\";\r\n\t\tzoomOutButton.zIndex = Number.MAX_SAFE_INTEGER;\r\n\t\tzoomOutButton.marginTop = 5;\r\n\t\tzoomOutButton.marginRight = 5;\r\n\r\n\t\tzoomOutButton.hide(0);\r\n\t\tthis.zoomOutButton = zoomOutButton;\r\n\r\n\t\tthis._bulletMask = this.plotContainer;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tthis.zoomOutButton.exportable = false;\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tthis.seriesContainer.toFront();\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tif (this.maskBullets) {\r\n\t\t\tthis.bulletsContainer.mask = this._bulletMask;\r\n\t\t}\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers a redrawing of all chart's series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updatePlotElements(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers data (re)validation which in turn can cause a redraw of the\r\n\t * whole chart or just aprticular series / elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\t// tell axes that data changed\r\n\t\tif (this._parseDataFrom == 0) {\r\n\t\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tseries.dataChangeUpdate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates margins for horizontal axes based on settings and available space.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateXAxesMargins(): void {\r\n\r\n\t\tlet leftAxesWidth = this.leftAxesContainer.measuredWidth;\r\n\t\tlet rightAxesWidth = this.rightAxesContainer.measuredWidth;\r\n\t\tlet bottomAxesCont = this.bottomAxesContainer;\r\n\r\n\t\tif (bottomAxesCont.paddingLeft != leftAxesWidth || bottomAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\tbottomAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\tbottomAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\r\n\t\tlet topAxesCont = this.topAxesContainer;\r\n\r\n\t\tif (topAxesCont.paddingLeft != leftAxesWidth || topAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\ttopAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\ttopAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the horizontal axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"propertychanged\"]} event An event object\r\n\t */\r\n\tpublic handleXAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateXAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the vertical axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"propertychanged\"]} event An event object\r\n\t */\r\n\tpublic handleYAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateYAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new horizontal (X) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IListEvents[\"inserted\"]} event Axis insert event\r\n\t */\r\n\tpublic processXAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererX();\r\n\t\taxis.axisLetter = \"X\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleXAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleXAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleXAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateXAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new vertical (Y) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IListEvents[\"inserted\"]} event Axis insert event\r\n\t */\r\n\tpublic processYAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererY();\r\n\t\taxis.axisLetter = \"Y\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleYAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleYAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleYAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateYAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates horizontal (X) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.zoomAxes(this.xAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarX, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows or hides the Zoom Out button depending on whether the chart is fully\r\n\t * zoomed out or not.\r\n\t */\r\n\tprotected toggleZoomOutButton() {\r\n\t\tif (this.zoomOutButton) {\r\n\t\t\tlet show = false;\r\n\r\n\t\t\t$iter.eachContinue(this.xAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\t$iter.eachContinue(this.yAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tif (!this.seriesAppeared) {\r\n\t\t\t\tshow = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (show) {\r\n\t\t\t\tthis.zoomOutButton.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.zoomOutButton.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * moved this check to a separate method so that we could override it in TreeMapSeries\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\tlet appeared: boolean = false;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (!series.appeared) {\r\n\t\t\t\tappeared = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn appeared;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates vertical (Y) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.zoomAxes(this.yAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarY, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a relative scrollbar whenever data range of the axis changes.\r\n\t *\r\n\t * @param {Scrollbar} scrollbar Scrollbar instance\r\n\t * @param {IRange} range New data (values) range of the axis\r\n\t */\r\n\tprotected updateScrollbar(scrollbar: Scrollbar, range: IRange): void {\r\n\t\tif (scrollbar) {\r\n\t\t\tscrollbar.skipRangeEvents();\r\n\t\t\tscrollbar.start = range.start;\r\n\t\t\tscrollbar.end = range.end;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a common range of values between a list of axes.\r\n\t *\r\n\t * This is used to synchronize the zoom between multiple axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {List} axes A list of axes\r\n\t * @return {IRange} Common value range\r\n\t */\r\n\tpublic getCommonAxisRange(axes: List): IRange {\r\n\t\tlet start: Optional;\r\n\t\tlet end: Optional;\r\n\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tlet axisStart = axis.start;\r\n\t\t\tlet axisEnd = axis.end;\r\n\r\n\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\taxisStart = 1 - axis.end;\r\n\t\t\t\taxisEnd = 1 - axis.start;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNumber(start) || (axisStart < start)) {\r\n\t\t\t\tstart = axisStart;\r\n\t\t\t}\r\n\t\t\tif (!$type.isNumber(end) || (axisEnd > end)) {\r\n\t\t\t\tend = axisEnd;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn { start: start, end: end };\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.topAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.bottomAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.rightAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.leftAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates an Axis for use with this chart, e.g. sets proper renderer\r\n\t * and containers for placement.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\t// Value axis does not use data directly, only category axis does\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\tthis._dataUsers.moveValue(axis);\r\n\t\t}\r\n\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\r\n\t\trenderer.gridContainer.parent = this.plotContainer;\r\n\t\trenderer.gridContainer.toBack();\r\n\r\n\t\trenderer.breakContainer.parent = this.plotContainer;\r\n\t\trenderer.breakContainer.toFront();\r\n\t\trenderer.breakContainer.zIndex = 10;\r\n\r\n\t\taxis.addDisposer(new Disposer(() => {\r\n\t\t\tthis.dataUsers.removeValue(axis);\r\n\t\t}))\r\n\r\n\t\tthis.plotContainer.events.on(\"maxsizechanged\", () => {\r\n\t\t\tif (this.inited) {\r\n\t\t\t\taxis.invalidateDataItems();\r\n\t\t\t}\r\n\t\t}, axis, false);\r\n\t}\r\n\r\n\t/**\r\n\t * A list of horizontal (X) axes.\r\n\t *\r\n\t * @return {List} List of axes\r\n\t */\r\n\tpublic get xAxes(): List> {\r\n\t\tif (!this._xAxes) {\r\n\t\t\tthis._xAxes = new List>();\r\n\t\t\tthis._xAxes.events.on(\"inserted\", this.processXAxis, this, false);\r\n\t\t\tthis._xAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._xAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected handleAxisRemoval(event: IListEvents[\"removed\"]) {\r\n\t\tlet axis = event.oldValue;\r\n\t\tthis.dataUsers.removeValue(axis); // need to remove, as it might not be disposed\r\n\t\tif (axis.autoDispose) {\r\n\t\t\taxis.dispose();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of vertical (Y) axes.\r\n\t *\r\n\t * @return {List} List of axes\r\n\t */\r\n\tpublic get yAxes(): List> {\r\n\t\tif (!this._yAxes) {\r\n\t\t\tthis._yAxes = new List>();\r\n\t\t\tthis._yAxes.events.on(\"inserted\", this.processYAxis, this, false);\r\n\t\t\tthis._yAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._yAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new [[XYSeries]] object with required parameters when it is\r\n\t * added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tpublic handleSeriesAdded(event: IListEvents[\"inserted\"]): void {\r\n\t\ttry {\r\n\t\t\tsuper.handleSeriesAdded(event);\r\n\t\t\tlet series: XYSeries = event.newValue;\r\n\t\t\tseries.xAxis; // this is enough to get axis, handled in getter\r\n\t\t\tseries.yAxis; // this is enough to get axis, handled in getter\r\n\r\n\t\t\tif (series.fill == undefined) {\r\n\t\t\t\tseries.fill = this.colors.next();\r\n\t\t\t}\r\n\r\n\t\t\tif (series.stroke == undefined) {\r\n\t\t\t\tseries.stroke = series.fill;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Chart's [[Cursor]].\r\n\t *\r\n\t * @param {XYCursor} cursor Cursor\r\n\t */\r\n\tpublic set cursor(cursor: this[\"_cursor\"]) {\r\n\t\tif (this._cursor != cursor) {\r\n\t\t\tif (this._cursor) {\r\n\t\t\t\tthis.removeDispose(this._cursor);\r\n\t\t\t}\r\n\r\n\t\t\tthis._cursor = cursor;\r\n\r\n\t\t\tif (cursor) {\r\n\t\t\t\t// TODO this is wrong, fix it\r\n\t\t\t\tthis._disposers.push(cursor);\r\n\t\t\t\tcursor.chart = this;\r\n\t\t\t\tcursor.parent = this._cursorContainer;\r\n\t\t\t\tcursor.events.on(\"cursorpositionchanged\", this.handleCursorPositionChange, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomstarted\", this.handleCursorZoomStart, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomended\", this.handleCursorZoomEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"panstarted\", this.handleCursorPanStart, this, false);\r\n\t\t\t\tcursor.events.on(\"panning\", this.handleCursorPanning, this, false);\r\n\t\t\t\tcursor.events.on(\"panended\", this.handleCursorPanEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"behaviorcanceled\", this.handleCursorCanceled, this, false);\r\n\t\t\t\tcursor.events.on(\"hidden\", this.handleHideCursor, this, false);\r\n\t\t\t\tcursor.zIndex = Number.MAX_SAFE_INTEGER - 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {XYCursor} Cursor\r\n\t */\r\n\tpublic get cursor(): this[\"_cursor\"] {\r\n\t\treturn this._cursor;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new [[Cursor]] suitable for this chart type.\r\n\t *\r\n\t * @return {this} New cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new XYCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs tasks when the cursor's position changes, e.g. shows proper\r\n\t * tooltips on axes and series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleCursorPositionChange(): void {\r\n\r\n\t\tif (this.cursor.visible && !this.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\tthis.showAxisTooltip(this.xAxes, xPosition);\r\n\t\t\tthis.showAxisTooltip(this.yAxes, yPosition);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides all cursor-related tooltips when the cursor itself is hidden.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleHideCursor(): void {\r\n\t\tthis.hideObjectTooltip(this.xAxes);\r\n\t\tthis.hideObjectTooltip(this.yAxes);\r\n\t\tthis.hideObjectTooltip(this.series);\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates values for each series' legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSeriesLegend(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.updateLegendValue();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hides a tooltip for a list of objects.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {List} sprites A list of sprites to hide tooltip for\r\n\t */\r\n\tpublic hideObjectTooltip(sprites: List): void {\r\n\t\t$iter.each(sprites.iterator(), (sprite) => {\r\n\t\t\tsprite.hideTooltip(0);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Shows a tooltip for all chart's series, using specific coordinates as a\r\n\t * reference point.\r\n\t *\r\n\t * The tooltip might be shown at different coordinates depending on the\r\n\t * actual data point's position, overlapping with other tooltips, etc.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint} position Reference point\r\n\t */\r\n\tpublic showSeriesTooltip(position?: IPoint): void {\r\n\r\n\t\tif (!position) {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tseries.hideTooltip();\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet 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 seriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\t\tlet sum = 0;\r\n\t\tthis.series.each((series) => {\r\n\t\t\t//if (series.tooltipText || series.tooltipHTML) { // not good, bullets are not hovered then\r\n\t\t\tseries.tooltip.setBounds({ x: 0, y: 0, width: this.pixelWidth, height: this.pixelHeight });\r\n\t\t\tlet point = series.showTooltipAtPosition(position.x, position.y);\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\tseriesPoints.push({ point: point, series: series });\r\n\t\t\t\tsum += point.y;\r\n\t\t\t}\r\n\t\t\t//}\r\n\t\t});\r\n\r\n\t\tseriesPoints.sort((a, b) => {\r\n\t\t\tif (a.point.y > b.point.y) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\telse if (a.point.y < b.point.y) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tlet averageY = sum / seriesPoints.length;\r\n\t\tlet maxY = $utils.svgPointToDocument({ x: 0, y: 0 }, this.svgContainer.SVGContainer).y;\r\n\r\n\t\tif (seriesPoints.length > 0) {\r\n\r\n\t\t\tlet top = topLeft.y;\r\n\t\t\tlet bottom = bottomRight.y;\r\n\r\n\t\t\tlet topPoint = $utils.spritePointToDocument({ x: 0, y: top }, this);\r\n\r\n\t\t\tlet dropped = false;\r\n\r\n\t\t\tif (averageY > top + (bottom - top) / 2) {\r\n\t\t\t\tlet nextHeight = bottom;\r\n\t\t\t\tfor (let i = seriesPoints.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tlet series = seriesPoints[i].series;\r\n\t\t\t\t\tlet tooltip = series.tooltip;\r\n\t\t\t\t\tlet pointY = seriesPoints[i].point.y;\r\n\r\n\t\t\t\t\ttooltip.setBounds({ x: 0, y: -maxY, width: this.pixelWidth, height: nextHeight + maxY });\r\n\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\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\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 {List} axes List of axes to show tooltip on\r\n\t * @param {number} position Position (px)\r\n\t */\r\n\tpublic showAxisTooltip(axes: List, position: number): void {\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tif (this.dataItems.length > 0 || axis.dataItems.length > 0) {\r\n\t\t\t\taxis.showTooltipAtPosition(position);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Recalculates the value range for the axis taking into account zoom level & inversed.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t * @param {IRange} range Range\r\n\t * @return {IRange} Modified range\r\n\t */\r\n\tpublic getUpdatedRange(axis: Axis, range: IRange): IRange {\r\n\r\n\t\tif (!axis) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet start: number;\r\n\t\tlet end: number;\r\n\t\tlet inversed = axis.renderer.inversed;\r\n\r\n\t\tif (axis.renderer instanceof AxisRendererY) {\r\n\t\t\trange = $math.invertRange(range);\r\n\t\t}\r\n\r\n\t\tif (inversed) {\r\n\t\t\t$math.invertRange(range);\r\n\r\n\t\t\tstart = 1 - axis.end;\r\n\t\t\tend = 1 - axis.start;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstart = axis.start;\r\n\t\t\tend = axis.end;\r\n\t\t}\r\n\r\n\t\tlet difference: number = end - start;\r\n\r\n\t\treturn {\r\n\t\t\tstart: start + range.start * difference,\r\n\t\t\tend: start + range.end * difference\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user finishes zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param {IXYCursorEvents[\"zoomended\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomEnd(event: IXYCursorEvents[\"zoomended\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tif (behavior == \"zoomX\" || behavior == \"zoomXY\") {\r\n\t\t\tlet xRange: IRange = cursor.xRange;\r\n\t\t\tif (xRange && this.xAxes.length > 0) {\r\n\t\t\t\txRange = this.getUpdatedRange(this.xAxes.getIndex(0), xRange);\r\n\t\t\t\txRange.priority = \"start\";\r\n\t\t\t\tthis.zoomAxes(this.xAxes, xRange);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (behavior == \"zoomY\" || behavior == \"zoomXY\") {\r\n\t\t\tlet yRange: IRange = cursor.yRange;\r\n\t\t\tif (yRange && this.yAxes.length > 0) {\r\n\t\t\t\tyRange = this.getUpdatedRange(this.yAxes.getIndex(0), yRange);\r\n\t\t\t\tyRange.priority = \"start\";\r\n\t\t\t\tthis.zoomAxes(this.yAxes, yRange);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param {IXYCursorEvents[\"panning\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanStart(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\tif (xAxis) {\r\n\t\t\tthis._panStartXRange = { start: xAxis.start, end: xAxis.end };\r\n\t\t}\r\n\r\n\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\tif (yAxis) {\r\n\t\t\tthis._panStartYRange = { start: yAxis.start, end: yAxis.end };\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user ends panning\r\n\t *\r\n\t * @param {IXYCursorEvents[\"panning\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanEnd(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\r\n\t\tif (this._panEndXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndXRange;\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndXRange = undefined;\r\n\t\t\tthis._panStartXRange = undefined;\r\n\t\t}\r\n\t\tif (this._panEndYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndYRange;\r\n\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndYRange = undefined;\r\n\t\t\tthis._panStartYRange = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleCursorCanceled(): void {\r\n\t\tthis._panEndXRange = undefined;\r\n\t\tthis._panStartXRange = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param {IXYCursorEvents[\"panning\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanning(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tlet maxPanOut = cursor.maxPanOut;\r\n\t\tif (this._panStartXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartXRange;\r\n\t\t\tlet range = cursor.xRange;\r\n\r\n\t\t\tlet difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start;\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(range.start + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndXRange = newRange;\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, newRange);\r\n\t\t}\r\n\r\n\t\tif (this._panStartYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartYRange;\r\n\t\t\tlet range = cursor.yRange;\r\n\r\n\t\t\tlet difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start;\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(range.start + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndYRange = newRange;\r\n\t\t\tthis.zoomAxes(this.yAxes, newRange);\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user starts zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param {IXYCursorEvents[\"zoomended\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomStart(event: IXYCursorEvents[\"zoomstarted\"]): void {\r\n\r\n\t\t// Nothing here\r\n\t\t// This method is here only as a \"placeholder\" for extending classes to\r\n\t\t// override if necessary\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal (X) scrollbar.\r\n\t *\r\n\t * @param {Scrollbar} scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarX(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarX) {\r\n\t\t\tthis.removeDispose(this._scrollbarX);\r\n\t\t}\r\n\t\tthis._scrollbarX = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.topAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toBack();\r\n\t\t\tscrollbar.orientation = \"horizontal\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleXScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\t\t\tif (xAxis) {\r\n\t\t\t\t\targ.value = xAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Scrollbar} Scrollbar\r\n\t */\r\n\tpublic get scrollbarX(): Scrollbar {\r\n\t\treturn this._scrollbarX;\r\n\t}\r\n\r\n\t/**\r\n\t * Vertical (Y) scrollbar.\r\n\t *\r\n\t * @param {Scrollbar} scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarY(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarY) {\r\n\t\t\tthis.removeDispose(this._scrollbarY);\r\n\t\t}\r\n\t\tthis._scrollbarY = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.rightAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toFront();\r\n\t\t\tscrollbar.orientation = \"vertical\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleYScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\t\t\tif (yAxis) {\r\n\t\t\t\t\targ.value = yAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Scrollbar} Scrollbar\r\n\t */\r\n\tpublic get scrollbarY(): Scrollbar {\r\n\t\treturn this._scrollbarY;\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the horizontal (X) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param {AMEvent[\"rangechanged\"]} event Scrollbar range change event\r\n\t */\r\n\tprotected handleXScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\tlet range: IRange = this.zoomAxes(this.xAxes, scrollbar.range);\r\n\t\tscrollbar.fixRange(range);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the vertical (Y) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param {AMEvent[\"rangechanged\"]} event Scrollbar range change event\r\n\t */\r\n\tprotected handleYScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\tlet range: IRange = this.zoomAxes(this.yAxes, scrollbar.range);\r\n\t\tscrollbar.fixRange(range);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes that are affected by to specific relative range.\r\n\t *\r\n\t * @param {List} axes List of axes to zoom\r\n\t * @param {IRange} range Range of values to zoom to (0-1)\r\n\t * @param {boolean} instantly If set to `true` will skip zooming animation\r\n\t * @return {IRange} Recalculated range that is common to all involved axes\r\n\t */\r\n\tprotected zoomAxes(axes: List, range: IRange, instantly?: boolean, round?: boolean): 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);\r\n\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\taxisRange = $math.invertRange(axisRange);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trealRange = axisRange;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn realRange;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if bullet container is masked.\r\n\t *\r\n\t * If it is set to `true`, any bullets that do not fit into bullet container\r\n\t * will be clipped off. Settting to `false` will allow bullets to \"spill out\"\r\n\t * of the plot area so they are not cut off.\r\n\t *\r\n\t * @param {boolean} value Mask bullet container?\r\n\t */\r\n\tpublic set maskBullets(value: boolean) {\r\n\t\tthis.setPropertyValue(\"maskBullets\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Mask bullet container?\r\n\t */\r\n\tpublic get maskBullets(): boolean {\r\n\t\treturn this.getPropertyValue(\"maskBullets\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Handles mouse wheel event.\r\n\t *\r\n\t * @param {AMEvent[\"wheel\"]} event Original event\r\n\t */\r\n\tprotected handleWheel(event: AMEvent[\"wheel\"]) {\r\n\t\tlet plotContainer = this.plotContainer;\r\n\t\tlet svgPoint: IPoint = $utils.documentPointToSvg(event.point, this.htmlContainer);\r\n\t\tlet plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n\t\tlet shift = event.shift.y;\r\n\r\n\t\tlet rangeX: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tlet rangeY: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tlet shiftStep = 0.05;\r\n\r\n\t\tlet maxPanOut = 0;\r\n\r\n\t\tlet mouseWheelBehavior = this.mouseWheelBehavior;\r\n\r\n\t\tif (mouseWheelBehavior == \"panX\" || mouseWheelBehavior == \"panXY\") {\r\n\r\n\t\t\tlet differenceX = rangeX.end - rangeX.start;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartX <= 0) {\r\n\t\t\t\tnewEndX = newStartX + differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndX >= 1) {\r\n\t\t\t\tnewStartX = newEndX - differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"panY\" || mouseWheelBehavior == \"panXY\") {\r\n\t\t\tshift *= -1;\r\n\t\t\tlet differenceY = rangeY.end - rangeY.start;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartY <= 0) {\r\n\t\t\t\tnewEndY = newStartY + differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndY >= 1) {\r\n\t\t\t\tnewStartY = newEndY - differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomX\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationX = plotPoint.x / plotContainer.maxWidth;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start - shiftStep * shift / 100 * locationX);\r\n\t\t\tnewStartX = Math.min(newStartX, locationX);\r\n\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100 * (1 - locationX), 1 + maxPanOut);\r\n\t\t\tnewEndX = Math.max(newEndX, locationX);\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomY\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationY = plotPoint.y / plotContainer.maxHeight;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start - shiftStep * shift / 100 * (1 - locationY));\r\n\t\t\tnewStartY = Math.min(newStartY, locationY);\r\n\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * locationY, 1 + maxPanOut);\r\n\t\t\tnewEndY = Math.max(newEndY, locationY);\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies action for when mouse wheel is used when over the chart.\r\n\t *\r\n\t * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`, `\"panXY\"`, `\"none\"` (default).\r\n\t *\r\n\t * @default \"none\"\r\n\t * @param {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} mouse wheel behavior\r\n\t */\r\n\tpublic set mouseWheelBehavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\r\n\t\tif (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n\t\t\tif (value != \"none\") {\r\n\t\t\t\tthis._mouseWheelDisposer = this.plotContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n\t\t\t\tthis._disposers.push(this._mouseWheelDisposer);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this._mouseWheelDisposer) {\r\n\t\t\t\t\tthis.plotContainer.wheelable = false;\r\n\t\t\t\t\tthis.plotContainer.hoverable = false;\r\n\t\t\t\t\tthis._mouseWheelDisposer.dispose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} Mouse wheel behavior\r\n\t */\r\n\tpublic get mouseWheelBehavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"mouseWheelBehavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `dateFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-speicifc data fields so they are parsed properly.\r\n\t *\r\n\t * @param {string[]} fields Array of date fields\r\n\t * @return {string[]} Array of date fields populated with chart's date fields\r\n\t */\r\n\tprotected dataSourceDateFields(fields: string[]): string[] {\r\n\t\t// Process parent\r\n\t\tfields = super.dataSourceDateFields(fields);\r\n\r\n\t\t// Check if we have any series with date-fields\r\n\t\t$iter.each(this.series.iterator(), (series: this[\"_seriesType\"]) => {\r\n\t\t\tfields = this.populateDataSourceFields(\r\n\t\t\t\tfields,\r\n\t\t\t\tseries.dataFields,\r\n\t\t\t\t[\"dateX\", \"dateY\", \"openDateX\", \"openDateY\"]\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn fields;\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `numberFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-specific data fields so they are parsed properly.\r\n\t *\r\n\t * @param {string[]} value Array of number fields\r\n\t * @return {string[]} Array of number fields populated with chart's number fields\r\n\t */\r\n\tprotected dataSourceNumberFields(fields: string[]): string[] {\r\n\t\tfields = super.dataSourceDateFields(fields);\r\n\r\n\t\t// Check if we have any series with date-fields\r\n\t\t$iter.each(this.series.iterator(), (series: this[\"_seriesType\"]) => {\r\n\t\t\tfields = this.populateDataSourceFields(\r\n\t\t\t\tfields,\r\n\t\t\t\tseries.dataFields,\r\n\t\t\t\t[\"valueX\", \"valueY\", \"openValueX\", \"openValueY\"]\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn fields;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Save axis ranges for later processing\r\n\t\t\tlet xAxes: any[] = [];\r\n\t\t\tlet yAxes: any[] = [];\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tif (!config.xAxes[i].type) {\r\n\t\t\t\t\t\tthrow Error(\"[XYChart error] No type set for xAxes[\" + i + \"].\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(config.xAxes[i][\"axisRanges\"])) {\r\n\t\t\t\t\t\txAxes.push({\r\n\t\t\t\t\t\t\taxisRanges: config.xAxes[i][\"axisRanges\"],\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete (config.xAxes[i][\"axisRanges\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tif (!config.yAxes[i].type) {\r\n\t\t\t\t\t\tthrow Error(\"[XYChart error] No type set for yAxes[\" + i + \"].\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(config.yAxes[i][\"axisRanges\"])) {\r\n\t\t\t\t\t\tyAxes.push({\r\n\t\t\t\t\t\t\taxisRanges: config.yAxes[i][\"axisRanges\"],\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete (config.yAxes[i][\"axisRanges\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"LineSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"XYCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up scrollbars\r\n\t\t\tif ($type.hasValue(config.scrollbarX) && !$type.hasValue(config.scrollbarX.type)) {\r\n\t\t\t\tconfig.scrollbarX.type = \"Scrollbar\";\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.hasValue(config.scrollbarY) && !$type.hasValue(config.scrollbarY.type)) {\r\n\t\t\t\tconfig.scrollbarY.type = \"Scrollbar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\r\n\t\t\t// Finish up with ranges.\r\n\t\t\t// We need to do this here because series are processed last in JSON\r\n\t\t\t// config. Therefore their respective objects are not yet are available\r\n\t\t\t// when axis (and respectively their ranges) are being processed.\r\n\t\t\tif (yAxes.length) {\r\n\t\t\t\tfor (let i = 0, len = yAxes.length; i < len; i++) {\r\n\t\t\t\t\tthis.yAxes.getIndex(yAxes[i].index).config = {\r\n\t\t\t\t\t\taxisRanges: yAxes[i].axisRanges\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (xAxes.length) {\r\n\t\t\t\tfor (let i = 0, len = xAxes.length; i < len; i++) {\r\n\t\t\t\t\tthis.xAxes.getIndex(xAxes[i].index).config = {\r\n\t\t\t\t\t\taxisRanges: xAxes[i].axisRanges\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * This function is used to sort element's JSON config properties, so that\r\n\t * some properties that absolutely need to be processed last, can be put at\r\n\t * the end.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {string} a Element 1\r\n\t * @param {string} b Element 2\r\n\t * @return {Ordering} Sorting number\r\n\t */\r\n\tprotected configOrder(a: string, b: string): Ordering {\r\n\t\tif (a == b) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t// Must come last\r\n\t\telse if (a == \"scrollbarX\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"scrollbarX\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"scrollbarY\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"scrollbarY\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"series\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"series\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.configOrder(a, b);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new Series of type suitable for this chart.\r\n\t *\r\n\t * @return {this} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new XYSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Button]] element that is used for zooming out the chart.\r\n\t *\r\n\t * This button appears only when chart is zoomed in, and disappears\r\n\t * autoamatically when it is zoome dout.\r\n\t *\r\n\t * @param {Button} button Zoom out button\r\n\t */\r\n\tpublic set zoomOutButton(button: Button) {\r\n\t\tthis._zoomOutButton = button;\r\n\t\tif (button) {\r\n\t\t\tbutton.events.on(\"hit\", () => {\r\n\t\t\t\tthis.zoomAxes(this.xAxes, { start: 0, end: 1 });\r\n\t\t\t\tthis.zoomAxes(this.yAxes, { start: 0, end: 1 });\r\n\t\t\t}, undefined, false);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Button} Zoom out button\r\n\t */\r\n\tpublic get zoomOutButton(): Button {\r\n\t\treturn this._zoomOutButton;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[XYChart]].\r\n\t *\r\n\t * @param {XYChart} source Source XYChart\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.xAxes.copyFrom(source.xAxes);\r\n\t\tthis.yAxes.copyFrom(source.yAxes);\r\n\r\n\t\tthis.zoomOutButton.copyFrom(source.zoomOutButton);\r\n\t\t//@todo copy all container properties\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\r\n\t\tlet scrollbarX = this.scrollbarX;\r\n\t\tif (scrollbarX && scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarX.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tlet scrollbarY = this.scrollbarY;\r\n\t\tif (scrollbarY && scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarY.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\r\n\t\tthis.yAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Adds one or several (array) of data items to the existing data.\r\n\t *\r\n\t * @param {Object | Object[]} rawDataItem One or many raw data item objects\r\n\t */\r\n\tpublic addData(rawDataItem: Object | Object[], removeCount?: number): void {\r\n\t\tsuper.addData(rawDataItem, removeCount);\r\n\t\tif (this.scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarX.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t\tif (this.scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarY.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart\"] = XYChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart.ts","/**\r\n * Category axis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Axis, AxisItemLocation, AxisDataItem, IAxisProperties, IAxisDataFields, IAxisAdapters, IAxisEvents, IAxisDataItemAdapters } from \"./Axis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { SerialChart } from \"../types/SerialChart\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { CategoryAxisBreak } from \"./CategoryAxisBreak\";\r\nimport { IDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { Adapter } from \"../../core/utils/Adapter\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CategoryAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CategoryAxisDataItem extends AxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {CategoryAxis}\r\n\t */\r\n\tpublic _component!: CategoryAxis;\r\n\r\n\t/**\r\n\t * Holds Adapter.\r\n\t *\r\n\t * @type {Adapter}\r\n\t */\r\n\tpublic adapter = new Adapter(this);\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisDataItem\";\r\n\t\tthis.text = \"{category}\";\r\n\r\n\t\tthis.locations.category = 0;\r\n\t\tthis.locations.endCategory = 1;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Category.\r\n\t *\r\n\t * @param {string} value Category\r\n\t */\r\n\tpublic set category(value: string) {\r\n\t\tthis.setProperty(\"category\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get category(): string {\r\n\t\tif (this.adapter.isEnabled(\"category\")) {\r\n\t\t\treturn this.adapter.apply(\"category\", this.properties[\"category\"]);\r\n\t\t}\r\n\t\treturn this.properties[\"category\"];\r\n\t}\r\n\r\n\t/**\r\n\t * End category.\r\n\t *\r\n\t * Used for items that span several categories, like [[CategoryAxisBreak]].\r\n\t *\r\n\t * @param {string} value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tthis.setProperty(\"endCategory\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.properties[\"endCategory\"];\r\n\t}\r\n}\r\n\r\n/**\r\n * Defines adapters for [[DataItem]]\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisDataItemAdapters extends IAxisDataItemAdapters {\r\n\tcategory: string;\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CategoryAxis]].\r\n *\r\n */\r\nexport interface ICategoryAxisDataFields extends IAxisDataFields {\r\n\r\n\t/**\r\n\t * A field that holds category information.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CategoryAxis]].\r\n *\r\n */\r\nexport interface ICategoryAxisProperties extends IAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[CategoryAxis]].\r\n *\r\n */\r\nexport interface ICategoryAxisEvents extends IAxisEvents { }\r\n\r\n/**\r\n * Defines adapter for [[CategoryAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisAdapters extends IAxisAdapters, ICategoryAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a category-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"CategoryAxis\",\r\n * \"title\": {\r\n * \"text\": \"Clients\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link ICategoryAxisEvents} for a list of available Events\r\n * @see {@link ICategoryAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CategoryAxis extends Axis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t *\r\n\t * @type {CategoryAxisDataFIelds}\r\n\t */\r\n\tpublic _dataFields: ICategoryAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICategoryAxisProperties}\r\n\t */\r\n\tpublic _properties!: ICategoryAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICategoryAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICategoryAxisEvents}\r\n\t */\r\n\tpublic _events!: ICategoryAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t *\r\n\t * @type {CategoryAxisDataItem}\r\n\t */\r\n\tpublic _dataItem: CategoryAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t *\r\n\t * @type {CategoryAxisBreak}\r\n\t */\r\n\tpublic _axisBreak: CategoryAxisBreak;\r\n\r\n\t/**\r\n\t * A reference to chart the axis is for.\r\n\t *\r\n\t * @type {SerialChart}\r\n\t */\r\n\tpublic chart: SerialChart;\r\n\r\n\t/**\r\n\t * Frequency of the labels on axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _frequency: number;\r\n\r\n\t/**\r\n\t * A collection that holds Axis' data items sorted by each category.\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tpublic dataItemsByCategory: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * last data item is used for the closing grid\r\n\t */\r\n\tprotected _lastDataItem: CategoryAxisDataItem;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxis\";\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"category\";\r\n\r\n\t\tthis._lastDataItem = this.createDataItem();\r\n\t\tthis._lastDataItem.component = this;\r\n\t\tthis._disposers.push(this._lastDataItem);\r\n\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {CategoryAxisDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CategoryAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return {CategoryAxisBreak} Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new CategoryAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateDataRange(): void {\r\n\r\n\t\tsuper.validateDataRange();\r\n\r\n\t\t$iter.each(this._series.iterator(), (series) => {\r\n\t\t\tif ((series.xAxis instanceof CategoryAxis) && (series.yAxis instanceof CategoryAxis)) {\r\n\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tseries.start = this.start;\r\n\t\t\t\tseries.end = this.end;\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();\t\r\n\r\n\t\tthis.ghostLabel.invalidate(); // solves font issue\r\n\t\tthis.renderer.invalidateLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElement description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {CategoryAxisDataItem} dataItem [description]\r\n\t * @param {number} itemIndex [description]\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"], itemIndex?: number, index?: number): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\t//dataItem.__disabled = false;\r\n\r\n\t\tlet renderer: AxisRenderer = this.renderer;\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = this.categoryToIndex(dataItem.category);\r\n\t\t}\r\n\r\n\t\tlet endIndex = this.categoryToIndex(dataItem.endCategory);\r\n\r\n\t\tif (!$type.isNumber(endIndex)) {\r\n\t\t\tendIndex = index;\r\n\t\t}\r\n\r\n\t\tlet position: number = this.indexToPosition(index, dataItem.locations.category);\r\n\t\tlet endPosition: number = this.indexToPosition(endIndex, dataItem.locations.endCategory);\r\n\r\n\t\tdataItem.position = position;\r\n\r\n\t\tlet fillEndIndex: number;\r\n\t\tlet fillPosition: number;\r\n\t\tlet fillEndPosition: number;\r\n\r\n\t\tif (dataItem.isRange) {\r\n\t\t\tfillEndIndex = endIndex;\r\n\t\t\tfillPosition = this.indexToPosition(index, dataItem.locations.category);\r\n\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, dataItem.locations.endCategory);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tfillEndIndex = index + this._frequency;\r\n\t\t\tfillPosition = this.indexToPosition(index, dataItem.axisFill.location);\r\n\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, dataItem.axisFill.location);\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\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\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}\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\t\t\trenderer.updateFillElement(fill, fillPosition, fillEndPosition);\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tthis.fillRule(dataItem, itemIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\tif (mask) {\r\n\t\t\trenderer.updateFillElement(mask, fillPosition, fillEndPosition);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes the axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {CategoryAxisDataItem} dataItem Data item\r\n\t * @param {Object} dataContext The raw data that corresponds to this data item\r\n\t */\r\n\tpublic processDataItem(dataItem: this[\"_dataItem\"], dataContext: Object): void {\r\n\t\t// creat a collection for fast access\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t\t// check if such category already exists\r\n\t\tlet existingDataItem: CategoryAxisDataItem = this.dataItemsByCategory.getKey(dataItem.category);\r\n\t\tif (existingDataItem != dataItem) {\r\n\t\t\tthis.dataItems.remove(existingDataItem);\r\n\t\t}\r\n\r\n\t\tthis.dataItemsByCategory.setKey(dataItem.category, dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a category index to an actual screen coordinate on the axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param {number} index Index\r\n\t * @param {AxisItemLocation | number} location Location (0-1)\r\n\t * @return {number} Position (px)\r\n\t */\r\n\tpublic indexToPosition(index: number, location?: AxisItemLocation | number): number {\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = 0.5;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet difference: number = this.adjustDifference(startIndex, endIndex);\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tdifference -= startLocation;\r\n\t\tdifference -= (1 - endLocation);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif (index < startIndex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif ($math.intersect({ start: breakStartIndex, end: breakEndIndex }, { start: startIndex, end: endIndex })) {\r\n\t\t\t\tbreakStartIndex = Math.max(startIndex, breakStartIndex);\r\n\t\t\t\tbreakEndIndex = Math.min(endIndex, breakEndIndex);\r\n\r\n\t\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\t\t// value to the right of break end\r\n\t\t\t\tif (index > breakEndIndex) {\r\n\t\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t\t}\r\n\t\t\t\t// value to the left of break start\r\n\t\t\t\telse if (index < breakStartIndex) {\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// value within break\r\n\t\t\t\telse {\r\n\t\t\t\t\tindex = breakStartIndex + (index - breakStartIndex) * breakSize;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\treturn $math.round((index + location - startLocation - startIndex) / difference, 5);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {number} Position\r\n\t */\r\n\tpublic categoryToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.categoryToIndex(category);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {IOrientationPoint} Orientation point\r\n\t */\r\n\tpublic categoryToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\tlet position = this.categoryToPosition(category, location);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {IOrientationPoint} Orientation point\r\n\t */\r\n\tanyToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\treturn this.categoryToPoint(category, location);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * An alias to `categoryToPosition()`.\r\n\t *\r\n\t * @param {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {number} Relative position\r\n\t */\r\n\tpublic anyToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\treturn this.categoryToPosition(category, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts named category to an index of data item it corresponds to.\r\n\t *\r\n\t * @param {string} category Category\r\n\t * @return {number} Data item index\r\n\t */\r\n\tpublic categoryToIndex(category: string): number {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\t\tif (dataItem) {\r\n\t\t\treturn dataItem.index;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the axis to specific named ctaegories.\r\n\t *\r\n\t * @param {string} startCategory Start category\r\n\t * @param {string} endCategory End category\r\n\t */\r\n\tpublic zoomToCategories(startCategory: string, endCategory: string): void {\r\n\t\tthis.zoomToIndexes(this.categoryToIndex(startCategory), this.categoryToIndex(endCategory) + 1);\r\n\t}\r\n\r\n\t/**\r\n\t * [getAnyRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {string} start [description]\r\n\t * @param {string} end [description]\r\n\t * @param {AxisItemLocation} startLocation [description]\r\n\t * @param {AxisItemLocation} endLocation [description]\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic getAnyRangePath(start: string, end: string, startLocation?: AxisItemLocation, endLocation?: AxisItemLocation): string {\r\n\t\tlet startPos: number = this.categoryToPosition(start, startLocation);\r\n\t\tlet endPos: number = this.categoryToPosition(end, endLocation);\r\n\t\treturn this.getPositionRangePath(startPos, endPos); // Base class (Axis) gets range shape from AxisRenderer\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position (px) within axis and adjust it to a specific\r\n\t * `location` within category it corresponds to.\r\n\t *\r\n\t * @param {number} position Source position (px)\r\n\t * @param {AxisItemLocation} location Location within category (0-1)\r\n\t * @return {number} Adjusted position (px)\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.positionToIndex(position);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a data item from Series that corresponds to a specific absolute\r\n\t * position on the Axis.\r\n\t *\r\n\t * @param {XYSeries} series Target series\r\n\t * @param {number} position Position (px)\r\n\t * @return {XYSeriesDataItem} Series data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number): XYSeriesDataItem {\r\n\t\treturn series.dataItems.getIndex(this.positionToIndex(position));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {SeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.x;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).x;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {SeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).y;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @param {string} stackKey Stack key (?)\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\treturn this.positionToAngle(this.categoryToPosition(dataItem.categories[key], location));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the start of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} position Position (px)\r\n\t * @return {number} Cell start position (px)\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the end of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} position Position (px)\r\n\t * @return {number} Cell end position (px)\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a category tooltip, based on specific position\r\n\t * within axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Position (px)\r\n\t * @return {string} Label (category)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn this.adapter.apply(\"getTooltipText\", dataItem.category);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an index of the category that corresponds to specific pixel\r\n\t * position within axis.\r\n\t *\r\n\t * @param {number} position Position (px)\r\n\t * @return {number} Category index\r\n\t */\r\n\tpublic positionToIndex(position: number): number {\r\n\t\tposition = $math.round(position, 10);\r\n\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 * @param {number} position Relative position on axis (0-1)\r\n\t * @return {string} Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) { // @martynas todo: added this check, but this means that some aria label might not be received?\r\n\t\t\treturn dataItem.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {IPoint} Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\t// This makes base grid to be drawn at the end of the axis and adds extra\r\n\t\t// grid which we need to nicely close the chart.\r\n\t\treturn this.renderer.positionToPoint(1);\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes Axis' renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\r\n\t\tlet renderer = this.renderer;\r\n\t\trenderer.baseGrid.disabled = true;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxis\"] = CategoryAxis;\r\nregistry.registeredClasses[\"CategoryAxisDataItem\"] = CategoryAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxis.ts","/**\r\n * Axis Label module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisLabel, IAxisLabelProperties, IAxisLabelAdapters, IAxisLabelEvents } from \"./AxisLabel\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisLabelCircular]].\r\n */\r\nexport interface IAxisLabelCircularProperties extends IAxisLabelProperties {\r\n\r\n\t/**\r\n\t * Rotation angle of the label in relation to circle line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\trelativeRotation?: number;\r\n\r\n\t/**\r\n\t * Distance of the label from circle line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tradius?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisLabelCircular]].\r\n */\r\nexport interface IAxisLabelCircularEvents extends IAxisLabelEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisLabelCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisLabelCircularAdapters extends IAxisLabelAdapters, IAxisLabelCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Use to create labels on circular axis.\r\n *\r\n * @see {@link IAxisLabelCircularEvents} for a list of available events\r\n * @see {@link IAxisLabelCircularAdapters} for a list of available Adapters\r\n */\r\nexport class AxisLabelCircular extends AxisLabel {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisLabelCircularProperties}\r\n\t */\r\n\tpublic _properties!: IAxisLabelCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisLabelCircularAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisLabelCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisLabelCircularEvents}\r\n\t */\r\n\tpublic _events!: IAxisLabelCircularEvents;\r\n\r\n\t/**\r\n\t * Related data item.\r\n\t *\r\n\t * @type {any}\r\n\t */\r\n\tpublic _dataItem: any;\r\n\r\n\t/**\r\n\t *\r\n\t * @type {number}\r\n\t * @ignore\r\n\t */\r\n\tpublic fdx: number = 0;\r\n\r\n\t/**\r\n\t *\r\n\t * @type {number}\r\n\t * @ignore\r\n\t */\r\n\tpublic fdy: number = 0;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisLabelCircular\";\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\t\tthis.location = 0.5;\r\n\t\tthis.radius = 0;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Relative rotation of the label.\r\n\t *\r\n\t * It is an angle to circle. In case 90, labels will be positioned like rays\r\n\t * of light, if 0 - positione along the circle.\r\n\t *\r\n\t * @param {number} value Rotation angle\r\n\t */\r\n\tpublic set relativeRotation(value: number) {\r\n\t\tthis.setPropertyValue(\"relativeRotation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Rotation angle\r\n\t */\r\n\tpublic get relativeRotation(): number {\r\n\t\treturn this.getPropertyValue(\"relativeRotation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Distance from axis circle to label in pixels or percent.\r\n\t *\r\n\t * @param {number} value Distance (px or percent)\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Distance (px)\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * returns label radius in pixels\r\n\t */\r\n\tpublic pixelRadius(axisRadius: number): number {\r\n\t\tlet sign: number = 1;\r\n\t\tif (this.inside) {\r\n\t\t\tsign = -1;\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeToValue(this.radius, axisRadius) * sign;\r\n\t}\r\n\r\n\t/**\r\n\t * [fixPoint description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {IPoint} point Label affixation point\r\n\t * @param {number} axisRadius Distance from point (px)\r\n\t * @return {IPoint} [description]\r\n\t */\r\n\tpublic fixPoint(point: IPoint, axisRadius: number): IPoint {\r\n\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\r\n\t\tif (this.invalid) {\r\n\t\t\tthis.validate(); //@todo\" check if we need this\r\n\t\t}\r\n\r\n\t\tlet relativeRotation = this.relativeRotation;\r\n\t\t// we don't use valign for labels because then they would jump while animating. instead we modify dy depending on a y position\r\n\t\t// this math makes dy to be 1 at the top of the circle, 0.5 at the middle and 1 at the bottom\r\n\t\t// @todo with this math doesn't work well with inside = true\r\n\t\tthis.dy = -this._measuredHeight * (1 - (point.y + axisRadius) / (2 * axisRadius));\r\n\t\t// simmilar with dx\r\n\t\tthis.dx = -this._measuredWidth * (1 - (point.x + axisRadius) / (2 * axisRadius));\r\n\r\n\t\tlet labelRadius = this.pixelRadius(axisRadius);\r\n\r\n\t\tif ($type.isNumber(relativeRotation)) {\r\n\r\n\t\t\tlet pixelWidth = this.bbox.width;\r\n\t\t\tlet pixelHeight = this.bbox.height;\r\n\r\n\t\t\tif (angle > 90 || angle < -90) {\r\n\t\t\t\tif (relativeRotation == -90) {\r\n\t\t\t\t\trelativeRotation = 90;\r\n\t\t\t\t\tpixelWidth = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (relativeRotation == -90) {\r\n\t\t\t\t\tpixelHeight = - pixelHeight;\r\n\t\t\t\t}\r\n\t\t\t\tif (relativeRotation == 90) {\r\n\t\t\t\t\trelativeRotation = -90;\r\n\t\t\t\t\tpixelWidth = 0;\r\n\t\t\t\t\tpixelHeight = - pixelHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.rotation = relativeRotation + angle + 90;\r\n\r\n\t\t\tlet dH = $math.sin(relativeRotation) / 2;\r\n\t\t\tlet dW = $math.cos(relativeRotation) / 2;\r\n\r\n\t\t\tlet rotation = this.rotation;\r\n\r\n\t\t\tthis.dx = pixelHeight * dH * $math.sin(rotation) - pixelWidth * dW * $math.cos(rotation);\r\n\t\t\tthis.dy = -pixelHeight * dH * $math.cos(rotation) - pixelWidth * dW * $math.sin(rotation);\r\n\r\n\t\t\tlet pixelPaddingBottom = this.pixelPaddingBottom;\r\n\t\t\tlet pixelPaddingTop = this.pixelPaddingTop;\r\n\t\t\tlet pixelPaddingLeft = this.pixelPaddingLeft;\r\n\t\t\tlet pixelPaddingRight = this.pixelPaddingRight;\r\n\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\tlabelRadius += (pixelHeight + pixelPaddingBottom + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelWidth + pixelPaddingLeft + pixelPaddingRight) * $math.sin(relativeRotation);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (angle > 90 || angle < -90) {\r\n\t\t\t\t\tlabelRadius -= (pixelPaddingBottom + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelPaddingLeft + pixelPaddingRight) * $math.sin(relativeRotation);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlabelRadius += (pixelPaddingBottom + this.bbox.height + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelPaddingLeft + pixelPaddingRight + this.bbox.width) * $math.sin(relativeRotation);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.fdx = this.dx;\r\n\t\tthis.fdy = this.dy;\r\n\r\n\t\tpoint.x += $math.cos(angle) * labelRadius;\r\n\t\tpoint.y += $math.sin(angle) * labelRadius;\r\n\r\n\t\treturn point;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisLabelCircular\"] = AxisLabelCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisLabelCircular.ts","/**\r\n * XY series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem, ISeriesProperties, ISeriesDataFields, ISeriesAdapters, ISeriesEvents } from \"./Series\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { CalculatedValue } from \"../../core/Component\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\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 [[XYSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYSeriesDataItem extends SeriesDataItem {\r\n\r\n\t/**\r\n\t * [_minX description]\r\n\t *\r\n\t * @todo Descripion\r\n\t * @type {number}\r\n\t */\r\n\tprotected _minX: number;\r\n\r\n\t/**\r\n\t * [_maxX description]\r\n\t *\r\n\t * @todo Descripion\r\n\t * @type {number}\r\n\t */\r\n\tprotected _maxX: number;\r\n\r\n\t/**\r\n\t * [_minY description]\r\n\t *\r\n\t * @todo Descripion\r\n\t * @type {number}\r\n\t */\r\n\tprotected _minY: number;\r\n\r\n\t/**\r\n\t * [_maxY description]\r\n\t *\r\n\t * @todo Descripion\r\n\t * @type {number}\r\n\t */\r\n\tprotected _maxY: number;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {XYSeries}\r\n\t */\r\n\tpublic _component!: XYSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYSeriesDataItem\";\r\n\r\n\t\tthis.values.valueX = { stack: 0 };\r\n\t\tthis.values.valueY = { stack: 0 };\r\n\t\tthis.values.openValueX = {};\r\n\t\tthis.values.openValueY = {};\r\n\r\n\t\tthis.values.dateX = {};\r\n\t\tthis.values.dateY = {};\r\n\t\tthis.values.openDateX = {};\r\n\t\tthis.values.openDateY = {};\r\n\r\n\t\tthis.setLocation(\"dateX\", 0.5, 0);\r\n\t\tthis.setLocation(\"dateY\", 0.5, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0.5, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0.5, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value on X value axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set valueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get valueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value on Y value axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set valueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get valueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's date value on X date-based axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set dateX(date: Date) {\r\n\t\tthis.setDate(\"dateX\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get dateX(): Date {\r\n\t\treturn this.getDate(\"dateX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's date value on Y date-based axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set dateY(date: Date) {\r\n\t\tthis.setDate(\"dateY\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get dateY(): Date {\r\n\t\treturn this.getDate(\"dateY\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's category on X category axis.\r\n\t *\r\n\t * @param {string} category Category\r\n\t */\r\n\tpublic set categoryX(category: string) {\r\n\t\tthis.setCategory(\"categoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get categoryX(): string {\r\n\t\treturn this.categories.categoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's category on Y category axis.\r\n\t *\r\n\t * @param {string} category Category\r\n\t */\r\n\tpublic set categoryY(category: string) {\r\n\t\tthis.setCategory(\"categoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get categoryY(): string {\r\n\t\treturn this.categories.categoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open numeric value on X value axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set openValueX(value: number) {\r\n\t\tthis.setValue(\"openValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get openValueX(): number {\r\n\t\treturn this.values.openValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open numeric value on Y value axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set openValueY(value: number) {\r\n\t\tthis.setValue(\"openValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get openValueY(): number {\r\n\t\treturn this.values.openValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open date value on X date-based axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set openDateX(date: Date) {\r\n\t\tthis.setDate(\"openDateX\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get openDateX(): Date {\r\n\t\treturn this.getDate(\"openDateX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open date value on Y date-based axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set openDateY(date: Date) {\r\n\t\tthis.setDate(\"openDateY\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get openDateY(): Date {\r\n\t\treturn this.getDate(\"openDateY\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on X category axis.\r\n\t *\r\n\t * @param {string} category Category\r\n\t */\r\n\tpublic set openCategoryX(category: string) {\r\n\t\tthis.setProperty(\"openCategoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get openCategoryX(): string {\r\n\t\treturn this.categories.openCategoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on Y category axis.\r\n\t *\r\n\t * @param {string} category Category\r\n\t */\r\n\tpublic set openCategoryY(category: string) {\r\n\t\tthis.setProperty(\"openCategoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get openCategoryY(): string {\r\n\t\treturn this.categories.openCategoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Return smallest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {string[]} fields Fields to check in\r\n\t * @param {boolean} working Include working (temporary) values\r\n\t * @param {number} stackValue If item is in a stack, the value item starts as\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic getMin(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet min: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value < min || !$type.isNumber(min)) {\r\n\t\t\t\tmin = value;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn min;\r\n\t\t//}\r\n\t}\r\n\r\n\t/**\r\n\t * Return biggest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {string[]} fields Fields to check in\r\n\t * @param {boolean} working Include working (temporary) values\r\n\t * @param {number} stackValue If item is in a stack, the value item starts as\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic getMax(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet max: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value > max || !$type.isNumber(max)) {\r\n\t\t\t\tmax = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn max;\r\n\t\t//}\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * Defines property set for a [[XYSeries]] tooltip event that contains information about dataItem\r\n *\r\n * @type {Object}\r\n */\r\nexport type XYSeriesTooltipEvent = {\r\n\r\n\t/**\r\n\t * Shift in coordinates after dragging.\r\n\t *\r\n\t * @type {XYSeriesDataItem}\r\n\t */\r\n\tdataItem: XYSeriesDataItem;\r\n};\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesDataFields extends ISeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdateY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for horizontal\r\n\t * axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenValueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for vertical\r\n\t * axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenValueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenCategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenCategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenDateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenDateY?: string;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis value for the\r\n\t * item.\r\n\t *\r\n\t * @type {CalculatedValue}\r\n\t */\r\n\tvalueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis value for the\r\n\t * item.\r\n\t *\r\n\t * @type {CalculatedValue}\r\n\t */\r\n\tvalueYShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis open value for\r\n\t * the item.\r\n\t *\r\n\t * @type {CalculatedValue}\r\n\t */\r\n\topenValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis open value for\r\n\t * the item.\r\n\t *\r\n\t * @type {CalculatedValue}\r\n\t */\r\n\topenValueYShow?: CalculatedValue;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesProperties extends ISeriesProperties {\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tstacked?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the current cursor position\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesEvents extends ISeriesEvents {\r\n\t/**\r\n\t * Invoked when series tooltip was shown on some particular data item\r\n\t */\r\n\ttooltipshownat: XYSeriesTooltipEvent;\r\n}\r\n\r\n/**\r\n * Defines adapters for [[XYSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYSeriesAdapters extends ISeriesAdapters, IXYSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for [[XYChart]].\r\n *\r\n * @see {@link IXYSeriesEvents} for a list of available Events\r\n * @see {@link IXYSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class XYSeries extends Series {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IXYSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IXYSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYSeriesEvents}\r\n\t */\r\n\tpublic _events!: IXYSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {XYSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: XYSeriesDataItem;\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {XYChart}\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t *\r\n\t * @type {Axis}\r\n\t */\r\n\tprotected _baseAxis: Axis;\r\n\r\n\t/**\r\n\t * Total data item count.\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tprotected _count: Dictionary;\r\n\r\n\t/**\r\n\t * Data item count in current selection.\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tprotected _scount: Dictionary;\r\n\r\n\t/**\r\n\t * [_xField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _xField: string;\r\n\r\n\t/**\r\n\t * [_yField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _yField: string;\r\n\r\n\t/**\r\n\t * [_xOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _xOpenField: string;\r\n\r\n\t/**\r\n\t * [_yOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _yOpenField: string;\r\n\r\n\t/**\r\n\t * [_tooltipXField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _tooltipXField: string;\r\n\r\n\t/**\r\n\t * [_tooltipYField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _tooltipYField: string;\r\n\r\n\t/**\r\n\t * [_xValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {Array}\r\n\t */\r\n\tprotected _xValueFields: Array;\r\n\r\n\t/**\r\n\t * [_yValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {Array}\r\n\t */\r\n\tprotected _yValueFields: Array;\r\n\r\n\t/**\r\n\t * Series which is stacked on top of this series, if any.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {XYSeries}\r\n\t */\r\n\tpublic stackedSeries: XYSeries;\r\n\r\n\r\n\t/**\r\n\t * dataitem of previously shown tooltip, used to avoid multiple tooltipshownat dispatches\r\n\t * @ignore\r\n\t */\r\n\tprotected _prevTooltipDataItem: XYSeriesDataItem;\r\n\r\n\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.mainContainer.mask = new Sprite();\r\n\t\tthis.mainContainer.mask.setElement(this.paper.add(\"path\"));\r\n\r\n\t\tthis.stacked = false;\r\n\t\tthis.snapTooltip = false;\r\n\r\n\t\tthis.tooltip.pointerOrientation = \"horizontal\";\r\n\r\n\t\tthis.tooltip.events.on(\"hidden\", () => {\r\n\t\t\tthis.returnBulletDefaultState();\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {XYSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new XYSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate() {\r\n\t\tthis._tmin.clear();\r\n\t\tthis._tmax.clear();\r\n\r\n\t\tthis._smin.clear();\r\n\t\tthis._smax.clear();\r\n\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tthis.xAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tthis.yAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series' data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tthis.defineFields();\r\n\r\n\t\tif (this.data.length > 0) {\r\n\t\t\tthis.dataChangeUpdate();\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tthis.updateItemReaderText();\r\n\r\n\t\tif (!$type.hasValue(this.dataFields[this._xField]) || !$type.hasValue(this.dataFields[this._yField])) {\r\n\t\t\tthrow Error(\"Data fields for series \\\"\" + (this.name ? this.name : this.uid) + \"\\\" are not properly defined.\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {Object} dataContext Raw data\r\n\t * @param {number} index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\ttry {\r\n\t\t\tsuper.processDataItem(dataItem, dataContext);\r\n\r\n\t\t\tdataItem.events.disable();\r\n\t\t\tthis.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n\t\t\tthis.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n\r\n\t\t\tdataItem.events.enable();\r\n\r\n\t\t\tthis.setInitialWorkingValues(dataItem);\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis._chart.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t * @param {number} index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tif (this.xAxis) {\r\n\t\t\tlet dataItemsX = this.dataItemsByAxis.getKey(this.xAxis.uid);\r\n\t\t\tif (dataItemsX) {\r\n\t\t\t\tdataItemsX.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.yAxis) {\r\n\t\t\tlet dataItemsY = this.dataItemsByAxis.getKey(this.yAxis.uid);\r\n\t\t\tif (dataItemsY) {\r\n\t\t\t\tdataItemsY.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\tlet xAxisFieldName: string = xAxis.axisFieldName;\r\n\t\tlet xField: $type.Keyof = <$type.Keyof>(xAxisFieldName + \"X\");\r\n\t\tlet xOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(xAxisFieldName) + \"X\");\r\n\r\n\t\tlet yAxisFieldName: string = yAxis.axisFieldName;\r\n\t\tlet yField: $type.Keyof = <$type.Keyof>(yAxisFieldName + \"Y\");\r\n\t\tlet yOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(yAxisFieldName) + \"Y\");\r\n\r\n\t\tthis._xField = xField;\r\n\t\tthis._yField = yField;\r\n\r\n\t\tif (this.dataFields[xOpenField]) {\r\n\t\t\tthis._xOpenField = xOpenField;\r\n\t\t}\r\n\r\n\t\tif (this.dataFields[yOpenField]) {\r\n\t\t\tthis._yOpenField = yOpenField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[yOpenField] && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[xOpenField] && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\t\t\tif (!this._yOpenField) {\r\n\t\t\t\tthis._yOpenField = yField;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._xValueFields = [];\r\n\t\tthis._yValueFields = [];\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xOpenField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yOpenField);\r\n\t}\r\n\r\n\t/**\r\n\t * [axis description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {Axis} axis Axis\r\n\t * @param {Array} fields Fields (?)\r\n\t * @param {Key} field Field\r\n\t */\r\n\tprotected addValueField(axis: Axis, fields: Array, field: Key): void {\r\n\t\tif (axis instanceof ValueAxis) {\r\n\t\t\tif ($type.hasValue(this.dataFields[field]) && fields.indexOf(field) == -1) {\r\n\t\t\t\tfields.push(field);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets category field from the category axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param {Key} field Field\r\n\t * @param {CategoryAxis} axis Axis\r\n\t */\r\n\tprotected setCategoryAxisField(field: Key, axis: CategoryAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets date field from the date axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param {Key} field Field\r\n\t * @param {DateAxis} axis Axis\r\n\t */\r\n\tprotected setDateAxisField(field: Key, axis: DateAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.date;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs after-draw tasks, e.g. creates masks.\r\n\t */\r\n\tprotected afterDraw(): void {\r\n\t\tsuper.afterDraw();\r\n\t\tthis.createMask();\r\n\t}\r\n\r\n\t/**\r\n\t * Create a mask for the series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic createMask(): void {\r\n\t\t// this mask from which we cut out ranges. does not work well if ranges overlap.\r\n\t\tif (this.mainContainer.mask) {\r\n\t\t\tlet path: string = this.getMaskPath();\r\n\r\n\t\t\t// @todo: this approach won't work well on circluar or other non x/y axes\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\t\tif (range.axisFill.fillPath) {\r\n\t\t\t\t\trange.axisFill.validate();\r\n\t\t\t\t\tpath += range.axisFill.fillPath;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.mainContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return {string} SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\treturn $path.rectToPath({\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\twidth: this.xAxis.axisLength,\r\n\t\t\theight: this.yAxis.axisLength\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns axis data field to use.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic getAxisField(axis: Axis): string {\r\n\t\tif (axis == this.xAxis) {\r\n\t\t\treturn this.xField;\r\n\t\t}\r\n\t\tif (axis == this.yAxis) {\r\n\t\t\treturn this.yField;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\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._showBullets = true;\r\n\t\tlet minBulletDistance: number = this.minBulletDistance;\r\n\t\tif ($type.isNumber(minBulletDistance)) {\r\n\t\t\tif (this.baseAxis.axisLength / (this.endIndex - this.startIndex) < minBulletDistance) {\r\n\t\t\t\tthis._showBullets = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._xAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._xAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._xAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._xAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.xAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no X axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xAxis = axis;\r\n\t\t\t}\r\n\t\t\treturn this._xAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._yAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._yAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._yAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._yAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.yAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no Y axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.yAxis = axis;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._yAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t *\r\n\t * @param {Axis} value Axis\r\n\t */\r\n\tpublic set baseAxis(value: Axis) {\r\n\t\tif (this._baseAxis != value) {\r\n\t\t\tthis._baseAxis = value;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Axis\r\n\t */\r\n\tpublic get baseAxis(): Axis {\r\n\t\tif (!this._baseAxis) {\r\n\t\t\tif (this.yAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.yAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._baseAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._baseAxis;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes values after data items' were added.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {OrderedListTemplate} dataItems Data items\r\n\t */\r\n\tpublic processValues(working: boolean): void {\r\n\t\t// todo: if this is stacked, ensure that series to which this one can be stacked are processed before.\r\n\t\tsuper.processValues(working);\r\n\r\n\t\tlet dataItems = this.dataItems;\r\n\r\n\t\tlet minX = Infinity;\r\n\t\tlet maxX = - Infinity;\r\n\r\n\t\tlet minY = Infinity;\r\n\t\tlet maxY = - Infinity;\r\n\r\n\t\tlet startIndex = this.startIndex;\r\n\t\tlet endIndex = this.endIndex;\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tlet dataItem = dataItems.getIndex(i);\r\n\r\n\t\t\tthis.getStackValue(dataItem, working);\r\n\r\n\t\t\tlet stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n\t\t\tlet stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n\r\n\t\t\tminX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n\t\t\tminY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n\r\n\t\t\tmaxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n\t\t\tmaxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n\r\n\t\t\t// if it's stacked, pay attention to stack value\r\n\t\t\tif (this.stacked) {\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tminY = $math.min(minY, stackY);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tminX = $math.min(minX, stackX);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// this is mainly for value axis to calculate total and perecent.total of each series category\r\n\t\tthis.xAxis.processSeriesDataItems();\r\n\t\tthis.yAxis.processSeriesDataItems();\r\n\r\n\t\tlet xAxisId: string = this.xAxis.uid;\r\n\t\tlet yAxisId: string = this.yAxis.uid;\r\n\r\n\t\tif (!working) {\r\n\t\t\tif (this._tmin.getKey(xAxisId) != minX || this._tmax.getKey(xAxisId) != maxX || this._tmin.getKey(yAxisId) != minY || this._tmax.getKey(yAxisId) != maxY) {\r\n\t\t\t\tthis._tmin.setKey(xAxisId, minX);\r\n\t\t\t\tthis._tmax.setKey(xAxisId, maxX);\r\n\t\t\t\tthis._tmin.setKey(yAxisId, minY);\r\n\t\t\t\tthis._tmax.setKey(yAxisId, maxY);\r\n\r\n\t\t\t\tif (this.stackedSeries) {\r\n\t\t\t\t\tthis.stackedSeries.processValues(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchImmediately(\"extremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._smin.getKey(xAxisId) != minX || this._smax.getKey(xAxisId) != maxX || this._smin.getKey(yAxisId) != minY || this._smax.getKey(yAxisId) != maxY) {\r\n\t\t\tthis._smin.setKey(xAxisId, minX);\r\n\t\t\tthis._smax.setKey(xAxisId, maxX);\r\n\t\t\tthis._smin.setKey(yAxisId, minY);\r\n\t\t\tthis._smax.setKey(yAxisId, maxY);\r\n\r\n\t\t\tif (this.appeared) {\r\n\t\t\t\tthis.dispatchImmediately(\"selectionextremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides element's [[Tooltip]].\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t */\r\n\tpublic hideTooltip() {\r\n\t\tsuper.hideTooltip();\r\n\t\tthis.returnBulletDefaultState();\r\n\t\tthis._prevTooltipDataItem = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows series tooltip at specific position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} xPosition X\r\n\t * @param {number} yPosition Y\r\n\t */\r\n\tpublic showTooltipAtPosition(xPosition: number, yPosition: number): IPoint {\r\n\t\tlet dataItem: this[\"_dataItem\"];\r\n\r\n\t\tif (this.visible && !this.isHiding) {\r\n\r\n\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\r\n\t\t\tif (xAxis == this.baseAxis) {\r\n\t\t\t\tdataItem = xAxis.getSeriesDataItem(this, xAxis.toAxisPosition(xPosition), this.snapTooltip);\r\n\t\t\t}\r\n\t\t\tif (yAxis == this.baseAxis) {\r\n\t\t\t\tdataItem = yAxis.getSeriesDataItem(this, yAxis.toAxisPosition(yPosition), this.snapTooltip);\r\n\t\t\t}\r\n\r\n\t\t\tthis.returnBulletDefaultState(dataItem);\r\n\r\n\t\t\tif (dataItem && dataItem.visible) {\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\t// so that if tooltip is shown on columns or bullets for it not to be hidden\r\n\t\t\tif (!this.tooltipText) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.hideTooltip();\r\n\t}\r\n\r\n\t/**\r\n\t * returns default state to bullets when tooltip is shown at some other data item or hidden\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected returnBulletDefaultState(dataItem?: XYSeriesDataItem) {\r\n\t\tif (this._prevTooltipDataItem && this._prevTooltipDataItem != dataItem) {\r\n\t\t\tfor (let a of this._prevTooltipDataItem.bullets) {\r\n\t\t\t\tlet bullet = a[1];\r\n\t\t\t\tif (!bullet.isDisposed()) {\r\n\t\t\t\t\tbullet.isHover = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._prevTooltipDataItem = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Bullet} bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet) {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: XYSeriesDataItem = bullet.dataItem;\r\n\r\n\t\t// use series xField/yField if bullet doesn't have fields set\r\n\t\tlet xField: string = bullet.xField;\r\n\t\tif (!$type.hasValue(xField)) {\r\n\t\t\txField = this.xField;\r\n\t\t}\r\n\r\n\t\tlet yField: string = bullet.yField;\r\n\t\tif (!$type.hasValue(yField)) {\r\n\t\t\tyField = this.yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n\t\t\tbullet.visible = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet bulletLocationX: number = this.getBulletLocationX(bullet, xField);\r\n\t\t\tlet bulletLocationY: number = this.getBulletLocationY(bullet, yField);\r\n\r\n\t\t\tlet point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n\t\t\tif (point) {\r\n\t\t\t\tlet x: number = point.x;\r\n\t\t\t\tlet y: number = point.y;\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationX) && this.xOpenField != this.xField) {\r\n\t\t\t\t\tlet openX: number = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\t\tx = x - (x - openX) * bullet.locationX;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationY) && this.yOpenField != this.yField) {\r\n\t\t\t\t\tlet openY: number = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\t\ty = y - (y - openY) * bullet.locationY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbullet.moveTo({ x: x, y: y });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationX;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationY;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} stacked Can be stacked?\r\n\t */\r\n\tpublic set stacked(stacked: boolean) {\r\n\t\tthis.setPropertyValue(\"stacked\", stacked, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Can be stacked?\r\n\t */\r\n\tpublic get stacked(): boolean {\r\n\t\treturn this.getPropertyValue(\"stacked\");\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position?\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows hidden series.\r\n\t *\r\n\t * @param {number} duration Duration of reveal animation (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tif (this.xAxis instanceof ValueAxis && this.xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t}\r\n\r\n\t\tif (this.yAxis instanceof ValueAxis && this.yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet delay: number = 0;\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet anim: Animation;\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t}\r\n\t\t\tanim = dataItem.show(interpolationDuration, delay, fields);\r\n\t\t});\r\n\r\n\t\tlet animation = super.show(duration);\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param {number} duration Duration of hiding animation (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tlet value: number;\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\r\n\t\tif (xAxis instanceof ValueAxis && xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (xAxis.minZoomed < 0 && xAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = xAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\t\tif (yAxis instanceof ValueAxis && yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (yAxis.minZoomed < 0 && yAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = yAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//if ($type.hasValue(fields)) {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet interpolationDuration = this.hiddenState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet delay: number = 0;\r\n\t\tlet anim: Animation;\r\n\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (interpolationDuration == 0) {\r\n\t\t\t\tdataItem.hide(0, 0, value, fields);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t\t}\r\n\t\t\t\tanim = dataItem.hide(interpolationDuration, delay, value, fields);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet animation = super.hide(interpolationDuration);\r\n\t\tif (animation && !animation.isFinished()) {\r\n\t\t\tanimation.delay(delay);\r\n\t\t}\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\t// helps to avoid flicker. otherwise columns will show up at full size and only on next frame will animate from 0\r\n\t\tthis.validateDataElements();\r\n\t\t//}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?:string): void {\r\n\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\r\n\t\t// to calculate stack values\r\n\t\tlet axisSeries: List = >this.baseAxis.series;\r\n\r\n\t\t$iter.each(axisSeries.iterator(), (series) => {\r\n\t\t\tif (series.stacked) {\r\n\t\t\t\tseries.invalidateProcessedData();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [getStackValue description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic getStackValue(dataItem: this[\"_dataItem\"], working?: boolean): void {\r\n\t\t// todo: here wer stack x and y values only. question is - what should we do with other values, like openX, openY?\r\n\t\t// if this series is not stacked or new stack begins, return.\r\n\r\n\t\tif (!this.stacked) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// it might seem that it's better to go through base axis series, but we do not maintain the same order as in chart.series there.\r\n\t\t\tlet chart: XYChart = this.chart;\r\n\t\t\tlet index: number = chart.series.indexOf(this);\r\n\r\n\t\t\tlet field: string;\r\n\r\n\t\t\tif (this.xAxis != this.baseAxis && this.xAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.xField;\r\n\t\t\t}\r\n\t\t\tif (this.yAxis != this.baseAxis && this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.yField;\r\n\t\t\t}\r\n\r\n\t\t\t//this is good for removing series, otherwise stack values will remain the same and chart won't pay atention when adding/removing series\r\n\t\t\tdataItem.setCalculatedValue(field, 0, \"stack\");\r\n\r\n\t\t\t$iter.eachContinue(chart.series.range(0, index).backwards().iterator(), (prevSeries) => {\r\n\t\t\t\t// stacking is only possible if both axes are the same\r\n\t\t\t\tif (prevSeries.xAxis == this.xAxis && prevSeries.yAxis == this.yAxis) {\r\n\t\t\t\t\t// saving value\r\n\t\t\t\t\tprevSeries.stackedSeries = this;\r\n\r\n\t\t\t\t\tlet prevDataItem = prevSeries.dataItems.getIndex(dataItem.index); // indexes should match\r\n\r\n\t\t\t\t\tif (prevDataItem && prevDataItem.hasValue(this._xValueFields) && prevDataItem.hasValue(this._yValueFields)) {\r\n\r\n\t\t\t\t\t\tlet value = dataItem.getValue(field);\r\n\t\t\t\t\t\tlet prevValue: number;\r\n\r\n\t\t\t\t\t\tif (working) {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getWorkingValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ((value >= 0 && prevValue >= 0) || (value < 0 && prevValue < 0)) {\r\n\t\t\t\t\t\t\t//dataItem.events.disable();\r\n\t\t\t\t\t\t\tdataItem.setCalculatedValue(field, prevValue, \"stack\");\r\n\t\t\t\t\t\t\t//dataItem.events.enable();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!prevSeries.stacked) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [xField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get xField(): string {\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get yField(): string {\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * [xOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get xOpenField(): string {\r\n\t\treturn this._xOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get yOpenField(): string {\r\n\t\treturn this._yOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipXField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {string} value [description]\r\n\t */\r\n\tpublic set tooltipXField(value: string) {\r\n\t\tthis._tooltipXField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get tooltipXField(): string {\r\n\t\tif (this._tooltipXField) {\r\n\t\t\treturn this._tooltipXField;\r\n\t\t}\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipYField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {string} value [description]\r\n\t */\r\n\tpublic set tooltipYField(value: string) {\r\n\t\tthis._tooltipYField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get tooltipYField(): string {\r\n\t\tif (this._tooltipYField) {\r\n\t\t\treturn this._tooltipYField;\r\n\t\t}\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ValueAxis} axis Axis\r\n\t * @return {number} value\r\n\t */\r\n\tpublic min(axis: ValueAxis): number {\r\n\t\treturn this._tmin.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ValueAxis} axis Axis\r\n\t * @return {number} value\r\n\t */\r\n\tpublic max(axis: ValueAxis): number {\r\n\t\treturn this._tmax.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ValueAxis} axis Axis\r\n\t * @return {number} value\r\n\t */\r\n\tpublic selectionMin(axis: ValueAxis): number {\r\n\t\tlet value = this._smin.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.min(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ValueAxis} axis Axis\r\n\t * @return {number} value\r\n\t */\r\n\tpublic selectionMax(axis: ValueAxis): number {\r\n\t\tlet value = this._smax.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.max(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis) && this.map.hasKey(config.xAxis)) {\r\n\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis) && this.map.hasKey(config.yAxis)) {\r\n\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\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\tthrow Error(\"`dataFields` is not set for series [\" + this.name + \"]\");\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {XYSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: XYSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tlet x: number = this.xAxis.getX(dataItem, xKey, locationX);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY);\r\n\r\n\t\tx = $math.fitToRange(x, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty = $math.fitToRange(y, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\treturn { x: x, y: y };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates item reader text based on the type and set up of axis.\r\n\t */\r\n\tprotected updateItemReaderText(): void {\r\n\t\tlet text = \"\"\r\n\t\t$object.each(this.dataFields, (key, val) => {\r\n\t\t\ttext += \"{\" + key + \"} \";\r\n\t\t});\r\n\t\tthis.itemReaderText = text;\r\n\t}\r\n\r\n}\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 * DateAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { DateAxisBreak } from \"./DateAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DateAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DateAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {DateAxis}\r\n\t */\r\n\tpublic _component!: DateAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.values.date = {};\r\n\t\tthis.values.endDate = {};\r\n\t}\r\n\r\n\t/**\r\n\t * Date position of the data item.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set date(date: Date) {\r\n\t\tthis.setDate(\"date\", date);\r\n\t\tthis.value = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get date(): Date {\r\n\t\treturn this.dates[\"date\"];\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * End date for data item.\r\n\t *\r\n\t * @param {Date} date End date\r\n\t */\r\n\tpublic set endDate(date: Date) {\r\n\t\tthis.setDate(\"endDate\", date);\r\n\t\tthis.endValue = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.dates[\"endDate\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DateAxis]].\r\n */\r\nexport interface IDateAxisDataFields extends IValueAxisDataFields {\r\n\r\n\t/**\r\n\t * Date.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdate?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[DateAxis]].\r\n */\r\nexport interface IDateAxisProperties extends IValueAxisProperties {\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tskipEmptyPeriods?: boolean;\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Use different format for period beginning?\r\n\t */\r\n\tmarkUnitChange?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\ttooltipDateFormat?: string;\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxis]].\r\n */\r\nexport interface IDateAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisAdapters extends IValueAxisAdapters, IDateAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a date/time-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IDateAxisEvents} for a list of available Events\r\n * @see {@link IDateAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t *\r\n\t * @type {IDateAxisDataFields}\r\n\t */\r\n\tpublic _dataFields: IDateAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IDateAxisProperties}\r\n\t */\r\n\tpublic _properties!: IDateAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDateAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: IDateAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IDateAxisEvents}\r\n\t */\r\n\tpublic _events!: IDateAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t *\r\n\t * @type {DateAxisDataItem}\r\n\t */\r\n\tpublic _dataItem: DateAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t *\r\n\t * @type {DateAxisBreak}\r\n\t */\r\n\tpublic _axisBreak: DateAxisBreak;\r\n\r\n\t/**\r\n\t * A list of date/time intervals for Date axis.\r\n\t *\r\n\t * This define various granularities available for the axis. For example\r\n\t * if you have an axis spanning an hour, and space for 6 grid lines / labels\r\n\t * the axis will choose the granularity of 10 minutes, displaying a label\r\n\t * every 10 minutes.\r\n\t *\r\n\t * Default intervals:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { timeUnit: \"millisecond\", count: 1 },\r\n\t * { timeUnit: \"millisecond\", count: 5 },\r\n\t * { timeUnit: \"millisecond\", count: 10 },\r\n\t * { timeUnit: \"millisecond\", count: 50 },\r\n\t * { timeUnit: \"millisecond\", count: 100 },\r\n\t * { timeUnit: \"millisecond\", count: 500 },\r\n\t * { timeUnit: \"second\", count: 1 },\r\n\t * { timeUnit: \"second\", count: 5 },\r\n\t * { timeUnit: \"second\", count: 10 },\r\n\t * { timeUnit: \"second\", count: 30 },\r\n\t * { timeUnit: \"minute\", count: 1 },\r\n\t * { timeUnit: \"minute\", count: 5 },\r\n\t * { timeUnit: \"minute\", count: 10 },\r\n\t * { timeUnit: \"minute\", count: 30 },\r\n\t * { timeUnit: \"hour\", count: 1 },\r\n\t * { timeUnit: \"hour\", count: 3 },\r\n\t * { timeUnit: \"hour\", count: 6 },\r\n\t * { timeUnit: \"hour\", count: 12 },\r\n\t * { timeUnit: \"day\", count: 1 },\r\n\t * { timeUnit: \"day\", count: 2 },\r\n\t * { timeUnit: \"day\", count: 3 },\r\n\t * { timeUnit: \"day\", count: 4 },\r\n\t * { timeUnit: \"day\", count: 5 },\r\n\t * { timeUnit: \"week\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 2 },\r\n\t * { timeUnit: \"month\", count: 3 },\r\n\t * { timeUnit: \"month\", count: 6 },\r\n\t * { timeUnit: \"year\", count: 1 },\r\n\t * { timeUnit: \"year\", count: 2 },\r\n\t * { timeUnit: \"year\", count: 5 },\r\n\t * { timeUnit: \"year\", count: 10 },\r\n\t * { timeUnit: \"year\", count: 50 },\r\n\t * { timeUnit: \"year\", count: 100 }\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tpublic gridIntervals: List = new List();\r\n\r\n\t/**\r\n\t * A collection of date formats to use when formatting different time units\r\n\t * on Date/time axis.\r\n\t *\r\n\t * Actual defaults will depend on the language locale set for the chart.\r\n\t *\r\n\t * To override format for a specific time unit, say days, you need to set\r\n\t * the approperiate key to a format string. E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * \"xAxes\": [{\r\n\t * \"type\": \"DateAxis\",\r\n\t * \"dateFormats\": {\r\n\t * \"day\": \"MMMM d, yyyy\"\r\n\t * }\r\n\t * }]\r\n\t * ```\r\n\t *\r\n\t * @see {@link DateFormatter}\r\n\t * @type {Dictionary}\r\n\t */\r\n\tpublic dateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * These formats are applied to labels that are first in a larger unit.\r\n\t *\r\n\t * For example, if we have a DateAxis with days on it, the first day of month\r\n\t * indicates a break in month - a start of the bigger period.\r\n\t *\r\n\t * For those labels, `periodChangeDateFormats` are applied instead of\r\n\t * `dateFormats`.\r\n\t *\r\n\t * This allows us implement convenient structures, like instead of:\r\n\t *\r\n\t * `Jan 1 - Jan 2 - Jan 3 - ...`\r\n\t *\r\n\t * We can have:\r\n\t *\r\n\t * `Jan - 1 - 2 - 3 - ...`\r\n\t *\r\n\t * This can be disabled by setting `markUnitChange = false`.\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tpublic periodChangeDateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * At which intervals grid elements are displayed.\r\n\t *\r\n\t * @type {ITimeInterval}\r\n\t */\r\n\tprotected _gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [_intervalDuration description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _intervalDuration: number;\r\n\r\n\t/**\r\n\t * [_gridDate description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {Date}\r\n\t */\r\n\tprotected _gridDate: Date;\r\n\r\n\t/**\r\n\t * [_nextGridUnit description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {TimeUnit}\r\n\t */\r\n\tprotected _nextGridUnit: TimeUnit;\r\n\r\n\t/**\r\n\t * User-defined granularity of data.\r\n\t *\r\n\t * @type {ITimeInterval}\r\n\t */\r\n\tprotected _baseInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * Actual interval (granularity) derived from the actual data.\r\n\t *\r\n\t * @type {ITimeInterval}\r\n\t */\r\n\tprotected _baseIntervalReal: ITimeInterval = { timeUnit: \"day\", count: 1 };\r\n\r\n\t/**\r\n\t * @type {number}\r\n\t */\r\n\tprotected _prevSeriesTime: number;\r\n\r\n\t/**\r\n\t * [_minDifference description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _minDifference: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * A function which applies fills to axis cells.\r\n\t *\r\n\t * Default function fills every second fill. You can set this to a function\r\n\t * that follows some other logic.\r\n\t *\r\n\t * Function should accept a [[DateAxisDataItem]] and modify its `axisFill`\r\n\t * property accordingly.\r\n\t *\r\n\t * @type {function}\r\n\t */\r\n\tpublic fillRule: (dataItem: DateAxisDataItem) => any = function(dataItem: DateAxisDataItem) {\r\n\t\tlet value = dataItem.value;\r\n\t\tlet axis = dataItem.component;\r\n\t\tlet gridInterval = axis._gridInterval;\r\n\t\tlet gridDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tif (Math.round((value - axis.min) / gridDuration) / 2 == Math.round(Math.round((value - axis.min) / gridDuration) / 2)) {\r\n\t\t\tdataItem.axisFill.__disabled = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.axisFill.__disabled = false;\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"markUnitChange\", true);\r\n\t\tthis.snapTooltip = true;\r\n\r\n\t\t// Translatable defaults are applied in `applyInternalDefaults()`\r\n\t\t// ...\r\n\r\n\t\t// Define default intervals\r\n\t\tthis.gridIntervals.pushAll([\r\n\t\t\t{ timeUnit: \"millisecond\", count: 1 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 5 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 10 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 50 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 100 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 500 },\r\n\t\t\t{ timeUnit: \"second\", count: 1 },\r\n\t\t\t{ timeUnit: \"second\", count: 5 },\r\n\t\t\t{ timeUnit: \"second\", count: 10 },\r\n\t\t\t{ timeUnit: \"second\", count: 30 },\r\n\t\t\t{ timeUnit: \"minute\", count: 1 },\r\n\t\t\t{ timeUnit: \"minute\", count: 5 },\r\n\t\t\t{ timeUnit: \"minute\", count: 10 },\r\n\t\t\t{ timeUnit: \"minute\", count: 15 },\r\n\t\t\t{ timeUnit: \"minute\", count: 30 },\r\n\t\t\t{ timeUnit: \"hour\", count: 1 },\r\n\t\t\t{ timeUnit: \"hour\", count: 3 },\r\n\t\t\t{ timeUnit: \"hour\", count: 6 },\r\n\t\t\t{ timeUnit: \"hour\", count: 12 },\r\n\t\t\t{ timeUnit: \"day\", count: 1 },\r\n\t\t\t{ timeUnit: \"day\", count: 2 },\r\n\t\t\t{ timeUnit: \"day\", count: 3 },\r\n\t\t\t{ timeUnit: \"day\", count: 4 },\r\n\t\t\t{ timeUnit: \"day\", count: 5 },\r\n\t\t\t{ timeUnit: \"week\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 2 },\r\n\t\t\t{ timeUnit: \"month\", count: 3 },\r\n\t\t\t{ timeUnit: \"month\", count: 6 },\r\n\t\t\t{ timeUnit: \"year\", count: 1 },\r\n\t\t\t{ timeUnit: \"year\", count: 2 },\r\n\t\t\t{ timeUnit: \"year\", count: 5 },\r\n\t\t\t{ timeUnit: \"year\", count: 10 },\r\n\t\t\t{ timeUnit: \"year\", count: 50 },\r\n\t\t\t{ timeUnit: \"year\", count: 100 },\r\n\t\t\t{ timeUnit: \"year\", count: 200 },\r\n\t\t\t{ timeUnit: \"year\", count: 500 },\r\n\t\t\t{ timeUnit: \"year\", count: 1000 },\r\n\t\t\t{ timeUnit: \"year\", count: 2000 },\r\n\t\t\t{ timeUnit: \"year\", count: 5000 },\r\n\t\t\t{ timeUnit: \"year\", count: 10000 },\r\n\t\t\t{ timeUnit: \"year\", count: 100000 }\r\n\t\t]);\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"date\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Set default date formats\r\n\t\tif (!this.dateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.dateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.dateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.dateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.dateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.dateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.dateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\t // not a mistake\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.dateFormats.setKey(\"month\", this.language.translate(\"_date_month\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"year\")) {\r\n\t\t\tthis.dateFormats.setKey(\"year\", this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"month\", this.language.translate(\"_date_month\") + \" \" + this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {DateAxisDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new DateAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return {DateAxisBreak} Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new DateAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis' data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems(): void {\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet start: number = this.start;\r\n\t\tlet end: number = this.end;\r\n\t\tlet periodCount: number = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.maxZoomFactor = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet newPeriodCount: number = (this.max - this.min) / this.baseDuration;\r\n\t\tstart = start + (end - start) * (1 - periodCount / newPeriodCount);\r\n\t\tthis.zoom({ start: start, end: end }, false, true); // added instantlyto solve zoomout problem when we have axes gaps. @todo: check how this affects maxZoomFactor\r\n\t}\r\n\r\n\t/**\r\n\t * Handles process after zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Does nothing?\r\n\t */\r\n\tpublic handleSelectionExtremesChange(): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates all positions, related to axis as per current zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic calculateZoom(): void {\r\n\t\tsuper.calculateZoom();\r\n\r\n\t\tlet gridInterval: ITimeInterval = this.chooseInterval(0, this.adjustDifference(this._minZoomed, this._maxZoomed), this._gridCount);\r\n\r\n\t\tif ($time.getDuration(gridInterval.timeUnit, gridInterval.count) < this.baseDuration) {\r\n\t\t\tgridInterval = { ...this.baseInterval };\r\n\t\t}\r\n\r\n\t\tthis._gridInterval = gridInterval;\r\n\r\n\t\tthis._gridDate = $time.round(new Date(this.min), gridInterval.timeUnit);\r\n\t\tthis._nextGridUnit = $time.getNextUnit(gridInterval.timeUnit);\r\n\r\n\t\t// the following is needed to avoid grid flickering while scrolling\r\n\t\tthis._intervalDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\t\tlet count: number = Math.ceil(this._difference / this._intervalDuration);\r\n\t\tcount = Math.floor(this.start * count) - 3; // some extra is needed\r\n\r\n\t\t$time.add(this._gridDate, gridInterval.timeUnit, count * gridInterval.count);\r\n\r\n\t\t// tell series start/end\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\tlet field = series.getAxisField(this);\r\n\r\n\t\t\t\t// TODO use $type.castNumber ?\r\n\t\t\t\tlet startIndex: number = series.dataItems.findClosestIndex(this._minZoomed, (x) => x[field], \"left\");\r\n\t\t\t\t// 1 millisecond is removed so that if only first item is selected, it would not count in the second.\r\n\t\t\t\tlet endIndex: number = series.dataItems.findClosestIndex(this._maxZoomed - 1, (x) => x[field], \"left\") + 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\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t$iter.each(series.dataItems.iterator(), (dataItem) => {\r\n\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.addEmptyUnitsBreaks();\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItem description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic postProcessSeriesDataItem(dataItem: XYSeriesDataItem): void {\r\n\t\t// we need to do this for all series data items not only added recently, as baseInterval might change\r\n\t\tlet baseInterval: ITimeInterval = this.baseInterval;\r\n\r\n\t\t$object.each(dataItem.dates, (key) => {\r\n\t\t\t//for (let key in dataItem.dates) {\r\n\t\t\tlet date: Date = dataItem.getDate(key);\r\n\t\t\tlet startDate: Date = $time.round($time.copy(date), baseInterval.timeUnit, baseInterval.count);\r\n\t\t\tlet endDate: Date = $time.add($time.copy(startDate), baseInterval.timeUnit, baseInterval.count);\r\n\r\n\t\t\tdataItem.setCalculatedValue(key, startDate.getTime(), \"open\");\r\n\t\t\tdataItem.setCalculatedValue(key, endDate.getTime(), \"close\");\r\n\r\n\t\t\tlet series: XYSeries = dataItem.component;\r\n\t\t\tseries.dataItemsByAxis.getKey(this.uid).setKey(startDate.getTime().toString(), dataItem);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Collapses empty stretches of date/time scale by creating [[AxisBreak]]\r\n\t * elements for them.\r\n\t *\r\n\t * Can be used to automatically remove strethes without data, like weekends.\r\n\t *\r\n\t * No, need to call this manually. It will automatically be done if\r\n\t * `skipEmptyPeriods = true`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected addEmptyUnitsBreaks(): void {\r\n\r\n\t\tif (this.skipEmptyPeriods && $type.isNumber(this.min) && $type.isNumber(this.max)) {\r\n\t\t\tlet timeUnit: TimeUnit = this.baseInterval.timeUnit;\r\n\t\t\tlet count: number = this.baseInterval.count;\r\n\r\n\t\t\tthis.axisBreaks.clear(); // TODO: what about breaks added by user?\r\n\r\n\t\t\tlet date: Date = $time.round(new Date(this.min), timeUnit, count);\r\n\t\t\tlet axisBreak: DateAxisBreak;\r\n\r\n\t\t\twhile (date.getTime() < this.max - this.baseDuration) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\t\t\tlet startTime: number = date.getTime();\r\n\t\t\t\tlet startTimeStr: string = startTime.toString();\r\n\r\n\t\t\t\tlet hasData = $iter.contains(this.series.iterator(), (series) => {\r\n\t\t\t\t\treturn !!series.dataItemsByAxis.getKey(this.uid).getKey(startTimeStr);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// open break if not yet opened\r\n\t\t\t\tif (!hasData) {\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\taxisBreak = this.axisBreaks.create();\r\n\t\t\t\t\t\taxisBreak.startDate = new Date(startTime);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// close if already opened\r\n\t\t\t\t\tif (axisBreak) {\r\n\t\t\t\t\t\t// close at end time minus one millisecond\r\n\t\t\t\t\t\taxisBreak.endDate = new Date(startTime - 1);\r\n\t\t\t\t\t\taxisBreak = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates positioning of Axis breaks after something changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fixAxisBreaks(): void {\r\n\t\tsuper.fixAxisBreaks();\r\n\t\tlet axisBreaks = this._axisBreaks;\r\n\t\t$iter.each(axisBreaks.iterator(), (axisBreak) => {\r\n\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\taxisBreak.gridInterval = this.chooseInterval(0, axisBreak.adjustedEndValue - axisBreak.adjustedStartValue, breakGridCount);\r\n\t\t\tlet gridDate = $time.round(new Date(axisBreak.adjustedStartValue), axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\tif (gridDate.getTime() > axisBreak.startDate.getTime()) {\r\n\t\t\t\t$time.add(gridDate, axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\t}\r\n\r\n\t\t\taxisBreak.gridDate = gridDate;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [getGridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {Date} date [description]\r\n\t * @param {number} intervalCount [description]\r\n\t * @return {Date} [description]\r\n\t */\r\n\tpublic getGridDate(date: Date, intervalCount: number): Date {\r\n\t\tlet timeUnit: TimeUnit = this._gridInterval.timeUnit;\r\n\t\tlet realIntervalCount: number = this._gridInterval.count;\r\n\t\t// round date\r\n\t\t$time.round(date, timeUnit);\r\n\r\n\t\tlet prevTimestamp: number = date.getTime();\r\n\r\n\t\tlet newDate: Date = $time.copy(date);\r\n\t\t// modify date by adding intervalcount\r\n\t\tlet timestamp: number = $time.add(newDate, timeUnit, intervalCount).getTime();\r\n\r\n\t\t// if it's axis break, get first rounded date which is not in a break\r\n\t\tlet axisBreak: DateAxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\tnewDate = new Date(axisBreak.endDate.getTime());\r\n\t\t\t$time.round(newDate, timeUnit, realIntervalCount);\r\n\t\t\tif (newDate.getTime() < axisBreak.endDate.getTime()) {\r\n\t\t\t\t$time.add(newDate, timeUnit, realIntervalCount);\r\n\t\t\t}\r\n\t\t\ttimestamp = newDate.getTime();\r\n\t\t}\r\n\r\n\t\t// get duration between grid lines with break duration removed\r\n\t\tlet durationBreaksRemoved: number = this.adjustDifference(prevTimestamp, timestamp);\r\n\t\t// calculate how many time units fit to this duration\r\n\t\tlet countBreaksRemoved: number = Math.round(durationBreaksRemoved / $time.getDuration(timeUnit));\r\n\r\n\t\t// if less units fit, add one and repeat\r\n\t\tif (countBreaksRemoved < realIntervalCount) {\r\n\t\t\treturn this.getGridDate(date, intervalCount + realIntervalCount);\r\n\t\t}\r\n\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * [getBreaklessDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {DateAxisBreak} axisBreak [description]\r\n\t * @param {TimeUnit} timeUnit [description]\r\n\t * @param {number} count [description]\r\n\t * @return {Date} [description]\r\n\t */\r\n\tpublic getBreaklessDate(axisBreak: DateAxisBreak, timeUnit: TimeUnit, count: number): Date {\r\n\t\tlet date = new Date(axisBreak.endValue);\r\n\t\t$time.round(date, timeUnit, count);\r\n\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\tlet timestamp = date.getTime();\r\n\r\n\t\taxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\treturn this.getBreaklessDate(axisBreak, timeUnit, count);\r\n\t\t}\r\n\t\treturn date;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates all Axis elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateAxisElements(): void {\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\r\n\t\t\tthis.calculateZoom();\r\n\r\n\t\t\t// first regular items\r\n\t\t\tlet timestamp = this._gridDate.getTime();\r\n\t\t\tlet timeUnit = this._gridInterval.timeUnit;\r\n\t\t\tlet intervalCount = this._gridInterval.count;\r\n\t\t\tlet prevGridDate = $time.copy(this._gridDate);\r\n\r\n\t\t\tlet dataItemsIterator = this._dataItemsIterator;\r\n\t\t\tthis.resetIterators();\r\n\r\n\t\t\twhile (timestamp <= this._maxZoomed) {\r\n\t\t\t\tlet date = this.getGridDate(new Date(prevGridDate), intervalCount);\r\n\r\n\t\t\t\ttimestamp = date.getTime();\r\n\r\n\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount);\r\n\r\n\t\t\t\tlet format = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit)) {\r\n\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet text = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\tlet dataItem = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\tthis.appendDataItem(dataItem);\r\n\r\n\t\t\t\tdataItem.axisBreak = undefined;\r\n\t\t\t\tdataItem.date = date;\r\n\t\t\t\tdataItem.endDate = endDate;\r\n\r\n\t\t\t\tdataItem.text = text;\r\n\r\n\t\t\t\tprevGridDate = date;\r\n\r\n\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t}\r\n\r\n\t\t\t// breaks later\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\t$iter.each(this.axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\t\tif (axisBreak.breakSize > 0) {\r\n\t\t\t\t\tlet timeUnit: TimeUnit = axisBreak.gridInterval.timeUnit;\r\n\t\t\t\t\tlet intervalCount: number = axisBreak.gridInterval.count;\r\n\r\n\t\t\t\t\t// only add grid if gap is bigger then minGridDistance\r\n\t\t\t\t\tif ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer.minGridDistance * 4) {\r\n\t\t\t\t\t\tlet timestamp: number = axisBreak.gridDate.getTime();\r\n\r\n\t\t\t\t\t\tlet prevGridDate;\r\n\t\t\t\t\t\tlet count: number = 0;\r\n\t\t\t\t\t\twhile (timestamp <= axisBreak.adjustedMax) {\r\n\t\t\t\t\t\t\tlet date: Date = $time.copy(axisBreak.gridDate);\r\n\t\t\t\t\t\t\ttimestamp = $time.add(date, timeUnit, intervalCount * count).getTime();\r\n\t\t\t\t\t\t\tcount++;\r\n\t\t\t\t\t\t\tif (timestamp > axisBreak.adjustedStartValue && timestamp < axisBreak.adjustedEndValue) {\r\n\t\t\t\t\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\t\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount);\r\n\r\n\t\t\t\t\t\t\t\tlet format: string = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\t\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit)) {\r\n\t\t\t\t\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet text: string = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\t\t\t\t\t//this.processDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tdataItem.axisBreak = axisBreak;\r\n\t\t\t\t\t\t\t\taxisBreak.dataItems.moveValue(dataItem);\r\n\r\n\t\t\t\t\t\t\t\tdataItem.date = date;\r\n\t\t\t\t\t\t\t\tdataItem.endDate = endDate;\r\n\t\t\t\t\t\t\t\tdataItem.text = text;\r\n\t\t\t\t\t\t\t\tprevGridDate = date;\r\n\t\t\t\t\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {DateAxisDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//super.validateDataElement(dataItem);\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\tlet timestamp = dataItem.value;\r\n\t\t\tlet endTimestamp = dataItem.endValue;\r\n\r\n\t\t\tif (!$type.isNumber(endTimestamp)) {\r\n\t\t\t\tendTimestamp = timestamp;\r\n\t\t\t}\r\n\r\n\t\t\tlet position: number = this.valueToPosition(timestamp);\r\n\t\t\tlet endPosition: number = this.valueToPosition(endTimestamp);\r\n\r\n\t\t\tif (this._gridInterval.count > 1) {\r\n\t\t\t\tendPosition = position + (endPosition - position) / this._gridInterval.count;\r\n\t\t\t}\r\n\r\n\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, endPosition);\r\n\t\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\t\tthis.fillRule(dataItem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\t\tif (mask) {\r\n\t\t\t\trenderer.updateFillElement(mask, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet label: AxisLabel = dataItem.label;\r\n\t\t\tif (label && !label.disabled) {\r\n\t\t\t\tlet location = label.location;\r\n\r\n\t\t\t\tif (location == 0) {\r\n\t\t\t\t\tif (this._gridInterval.count == 1 && this._gridInterval.timeUnit != \"week\" && !dataItem.isRange) {\r\n\t\t\t\t\t\tlocation = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlocation = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trenderer.updateLabelElement(label, position, endPosition, location);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A duration in milliseconds of the `baseInterval`.\r\n\t *\r\n\t * @return {number} Duration (ms)\r\n\t */\r\n\tpublic get baseDuration(): number {\r\n\t\treturn $time.getDuration(this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts min/max values.\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description (review)\r\n\t * @param {number} min Min timestamp\r\n\t * @param {number} max Max timestamp\r\n\t * @return {IMinMaxStep} Adjusted min/max step\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number): IMinMaxStep {\r\n\t\treturn { min: min, max: max, step: this.baseDuration };\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the minimum timestamp as per cell start location.\r\n\t *\r\n\t * @param {number} value Value\r\n\t * @return {number} Adjusted value\r\n\t */\r\n\tprotected fixMin(value: number) {\r\n\t\treturn $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count).getTime() + this.baseDuration * this.startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the maximum timestamp as per cell start location.\r\n\t *\r\n\t * @param {number} value Value\r\n\t * @return {number} Adjusted value\r\n\t */\r\n\tprotected fixMax(value: number) {\r\n\t\treturn $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count).getTime() + this.baseDuration * this.endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [chooseInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description\r\n\t * @param {number} index [description]\r\n\t * @param {number} duration [description]\r\n\t * @param {number} gridCount [description]\r\n\t * @return {ITimeInterval} [description]\r\n\t */\r\n\tpublic chooseInterval(index: number, duration: number, gridCount: number): ITimeInterval {\r\n\t\tlet gridIntervals: List = this.gridIntervals;\r\n\r\n\t\tlet gridInterval: ITimeInterval = gridIntervals.getIndex(index);\r\n\r\n\t\tlet intervalDuration: number = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tlet lastIndex: number = gridIntervals.length - 1;\r\n\t\tif (index >= lastIndex) {\r\n\t\t\treturn { ...gridIntervals.getIndex(lastIndex) };\r\n\t\t}\r\n\r\n\t\tlet count: number = Math.ceil(duration / intervalDuration);\r\n\r\n\t\tif (duration < intervalDuration && index > 0) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index - 1) };\r\n\t\t}\r\n\r\n\t\tif (count <= gridCount) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t} else {\r\n\t\t\tif (index + 1 < gridIntervals.length) {\r\n\t\t\t\treturn this.chooseInterval(index + 1, duration, gridCount);\r\n\t\t\t} else {\r\n\t\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DateFormatter]].\r\n\t *\r\n\t * @param {number} value Source value\r\n\t * @return {string} Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number): string {\r\n\t\treturn this.dateFormatter.format(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a Date to an asbolute pixel position within Axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t * @return {number} Position (px)\r\n\t */\r\n\tpublic dateToPosition(date: Date): number {\r\n\t\treturn this.valueToPosition(date.getTime());\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a numeric timestamp or a `Date` to a relative position on axis.\r\n\t *\r\n\t * @param {Date | number} date Date or a timestamp\r\n\t * @return {number} Relative position\r\n\t */\r\n\tpublic anyToPosition(date: Date | number): number {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPosition(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPosition(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts date to orientation point (x, y, angle) on axis\r\n\t *\r\n\t * @param {Date} date Date\r\n\t * @return {IOrientationPoint} IOrientationPoint\r\n\t */\r\n\tpublic dateToPoint(date: Date): IOrientationPoint {\r\n\t\tlet position = this.dateToPosition(date);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a numeric value to orientation (x, y, angle) point on axis\r\n\t *\r\n\t * @param {number} value Value\r\n\t * @return {IOrientationPoint} Orientation point\r\n\t */\r\n\tpublic anyToPoint(date: Date | number): IOrientationPoint {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPoint(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPoint(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts pixel position within Axis to a corresponding Date.\r\n\t *\r\n\t * @param {number} position Position (px)\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic positionToDate(position: number): Date {\r\n\t\treturn new Date(this.positionToValue(position));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\t//let stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value)).x;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value + stack)).y;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @param {string} stackKey Stack ID\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(stackKey, \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(this.valueToPosition(value + stack));\r\n\t}\r\n\r\n\t/**\r\n\t * [getTimeByLocation description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {XYSeriesDataItem} dataItem [description]\r\n\t * @param {string} key [description]\r\n\t * @param {number} location [description]\r\n\t * @return {number} [description]\r\n\t */\r\n\tprotected getTimeByLocation(dataItem: XYSeriesDataItem, key: string, location: number): number {\r\n\t\tif (!$type.hasValue(key)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = dataItem.workingLocations[key];\r\n\r\n\t\t\tif (!$type.isNumber(location)) {\r\n\t\t\t\tlocation = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet startTime: number = dataItem.values[key][\"open\"];\r\n\t\tlet endTime: number = dataItem.values[key][\"close\"];\r\n\r\n\t\tif ($type.isNumber(startTime) && $type.isNumber(endTime)) {\r\n\t\t\treturn startTime + (endTime - startTime) * location;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes a related series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic processSeriesDataItem(dataItem: XYSeriesDataItem, axisLetter?: string): void {\r\n\r\n\t\tlet series = dataItem.component;\r\n\t\tlet time: number;\r\n\r\n\t\tlet date: Date = (dataItem)[\"date\" + axisLetter];\r\n\t\tif (date) {\r\n\t\t\ttime = date.getTime();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet openDate: Date = (dataItem)[\"openDate\" + axisLetter];\r\n\t\tlet prevSeriesTime: number = this._prevSeriesTime;\r\n\r\n\r\n\t\tlet openTime: number;\r\n\t\tif (openDate) {\r\n\t\t\topenTime = openDate.getTime();\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(openTime)) {\r\n\t\t\tlet difference = Math.abs(time - openTime);\r\n\r\n\t\t\tif (this._minDifference[series.uid] > difference) {\r\n\t\t\t\tthis._minDifference[series.uid] = difference;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet differece: number = time - prevSeriesTime;\r\n\r\n\t\tif (differece > 0) {\r\n\t\t\tif (this._minDifference[series.uid] > differece) {\r\n\t\t\t\tthis._minDifference[series.uid] = differece;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._prevSeriesTime = time;\r\n\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\t//baseInterval.count = 1; // good\r\n\t\tthis._baseIntervalReal = baseInterval;\r\n\t\t// no need to invalidate\r\n\t}\r\n\r\n\t/**\r\n\t * A base interval (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * For example, if you have a data set that has a data point every 5 minutes,\r\n\t * you may want to set this to `{ timeUnit: \"minute\", count: 5 }`.\r\n\t *\r\n\t * If not set, the Axis will try to determine the setting by its own, looking\r\n\t * at actual data.\r\n\t *\r\n\t * @param {ITimeInterval} timeInterval base interval\r\n\t */\r\n\tpublic set baseInterval(timeInterval: ITimeInterval) {\r\n\t\tthis._baseInterval = timeInterval;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {ITimeInterval} Base interval\r\n\t */\r\n\tpublic get baseInterval(): ITimeInterval {\r\n\t\tif (this._baseInterval) {\r\n\t\t\treturn this._baseInterval;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._baseIntervalReal;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * An \"empty\" period is considered a stretch of time in the length of current\r\n\t * `baseInterval` without a single data point in it.\r\n\t *\r\n\t * For each such empty period, axis will automatically create an\r\n\t * [[AxisBreak]]. By default they will be invisible. You can still configure\r\n\t * them by accessing `axis.breaks.template`.\r\n\t *\r\n\t * [More info about breaks](https://www.amcharts.com/docs/v4/concepts/axes/#Breaks).\r\n\t *\r\n\t * Important notes:\r\n\t * * If you set this property to `true`, you can not add your custom axis breaks to this axis anymore.\r\n\t * * Using this feature affects performance. Use only if you need it.\r\n\t * * Setting this to `true` will reset appearance of breaks. If you want to modify appearance, do it *after* you set `skipEmptyPeriods`.\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value Remove empty stretches of time?\r\n\t */\r\n\tpublic set skipEmptyPeriods(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"skipEmptyPeriods\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\r\n\t\tif (value) {\r\n\t\t\tlet breakTemplate = this.axisBreaks.template;\r\n\t\t\tbreakTemplate.startLine.disabled = true;\r\n\t\t\tbreakTemplate.endLine.disabled = true;\r\n\t\t\tbreakTemplate.fillShape.disabled = true;\r\n\t\t\tbreakTemplate.breakSize = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Remove empty stretches of time?\r\n\t */\r\n\tpublic get skipEmptyPeriods(): boolean {\r\n\t\treturn this.getPropertyValue(\"skipEmptyPeriods\");\r\n\t}\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @param {string} value Date format\r\n\t */\r\n\tpublic set tooltipDateFormat(value: string) {\r\n\t\tthis.setPropertyValue(\"tooltipDateFormat\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Date format\r\n\t */\r\n\tpublic get tooltipDateFormat(): string {\r\n\t\treturn this.getPropertyValue(\"tooltipDateFormat\");\r\n\t}\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Use different format for period beginning?\r\n\t */\r\n\tpublic set markUnitChange(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"markUnitChange\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Use different format for period beginning?\r\n\t */\r\n\tpublic get markUnitChange(): boolean {\r\n\t\treturn this.getPropertyValue(\"markUnitChange\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a tooltip, based on specific relative position\r\n\t * within axis.\r\n\t *\r\n\t * The label will be formatted as per [[DateFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Position\r\n\t * @return {string} Label (formatted date)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet text: string;\r\n\t\tlet date = this.positionToDate(position);\r\n\t\tdate = $time.round(date, this.baseInterval.timeUnit, this.baseInterval.count);\r\n\r\n\t\tif ($type.hasValue(this.tooltipDateFormat)) {\r\n\t\t\ttext = this.dateFormatter.format(date, this.tooltipDateFormat);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet dateFormat = this.dateFormats.getKey(this.baseInterval.timeUnit);\r\n\t\t\tif (dateFormat) {\r\n\t\t\t\ttext = this.dateFormatter.format(date, dateFormat);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttext = this.getPositionLabel(position);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.adapter.apply(\"getTooltipText\", text);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position within axis and adjust it to a specific position within base interval. (cell)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Source position\r\n\t * @param {AxisItemLocation} location Location in the cell\r\n\t * @return {number} Adjusted position\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet baseInterval = this.baseInterval;\r\n\t\tlet timeUnit = baseInterval.timeUnit;\r\n\t\tlet count = baseInterval.count;\r\n\r\n\t\tlet date: Date = this.positionToDate(position);\r\n\r\n\t\t$time.round(date, timeUnit, count);\r\n\r\n\t\tif (location > 0) {\r\n\t\t\t$time.add(date, timeUnit, location * count);\r\n\t\t}\r\n\r\n\t\tif (this.isInBreak(date.getTime())) {\r\n\t\t\twhile (date.getTime() < this.max) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\t\t\t\tif (!this.isInBreak(date.getTime())) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.dateToPosition(date);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the start of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} position Relative position\r\n\t * @return {number} Cell start relative position\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the end of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} position Relative position\r\n\t * @return {number} Cell end relative position\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t\t//return this.dateToPosition($time.add(this.positionToDate(this.roundPosition(position, 1)), this.baseInterval.timeUnit, this.baseInterval.count));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Series data item that corresponds to the specific pixel position\r\n\t * of the Axis.\r\n\t *\r\n\t * @param {XYSeries} series Series\r\n\t * @param {number} 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\t\tlet value: number = this.positionToValue(position);\r\n\t\tlet date: Date = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\tlet dataItem = series.dataItemsByAxis.getKey(this.uid).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// 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 = series.dataItemsByAxis.getKey(this.uid).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 = series.dataItemsByAxis.getKey(this.uid).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\t\t}\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 * @param {number} position Relative position on axis (0-1)\r\n\t * @return {string} Position label\r\n\t * @todo Better format recognition\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\tlet date = this.positionToDate(position);\r\n\t\treturn this.dateFormatter.format(date, this.getCurrentLabelFormat());\r\n\t}\r\n\r\n\t/**\r\n\t * Returns label date format based on currently used time units\r\n\t *\r\n\t * @return {string} Format\r\n\t */\r\n\tprotected getCurrentLabelFormat(): string {\r\n\t\treturn this.dateFormats.getKey(this._gridInterval ? this._gridInterval.timeUnit : \"day\");\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes an Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\t\tlet renderer = this.renderer;\r\n\t\tif (renderer) {\r\n\t\t\t// Set defaults\r\n\t\t\trenderer.ticks.template.location = 0;\r\n\t\t\trenderer.grid.template.location = 0;\r\n\t\t\trenderer.labels.template.location = 0;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {IPoint} Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\treturn { x: 0, y: 0 };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Zooms axis to specific Dates.\r\n\t *\r\n\t * @param {Date} startDate Start date\r\n\t * @param {Date} endValue End date\r\n\t * @param {boolean} skipRangeEvent Do not invoke events\r\n\t * @param {boolean} instantly Do not play zoom animations\r\n\t */\r\n\tpublic zoomToDates(startDate: Date, endDate: Date, skipRangeEvent?: boolean, instantly?: boolean): void {\r\n\t\tstartDate = this.dateFormatter.parse(startDate);\r\n\t\tendDate = this.dateFormatter.parse(endDate);\r\n\t\tthis.zoomToValues(startDate.getTime(), endDate.getTime(), skipRangeEvent, instantly);\r\n\t}\r\n\r\n\t/**\r\n\t * Adds `baseInterval` to \"as is\" fields.\r\n\t *\r\n\t * @param {string} field Field name\r\n\t * @return {boolean} Assign as is?\r\n\t */\r\n\tprotected asIs(field: string): boolean {\r\n\t\treturn field == \"baseInterval\" || super.asIs(field);\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param {this} source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.dateFormats = source.dateFormats;\r\n\t\tthis.periodChangeDateFormats = source.periodChangeDateFormats;\r\n\t\tif (source[\"_baseInterval\"]) {\r\n\t\t\tthis.baseInterval = source.baseInterval;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @param {boolean} local or global position\r\n\t */\r\n\tpublic showTooltipAtPosition(position: number, local?: boolean) {\r\n\r\n\t\tif (!local) {\r\n\t\t\tposition = this.toAxisPosition(position);\r\n\t\t}\r\n\t\tif (this.snapTooltip) {\r\n\t\t\tlet actualDate = $time.round(this.positionToDate(position), this.baseInterval.timeUnit, 1);\r\n\t\t\tlet actualTime = actualDate.getTime();\r\n\t\t\tlet closestDate: Date;\r\n\r\n\t\t\tthis.series.each((series) => {\r\n\r\n\t\t\t\tlet dataItem = this.getSeriesDataItem(series, position, true);\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet date: Date;\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tdate = dataItem.dateX;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tdate = dataItem.dateY;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!closestDate) {\r\n\t\t\t\t\t\tclosestDate = date;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (Math.abs(closestDate.getTime() - actualTime) > Math.abs(date.getTime() - actualTime)) {\r\n\t\t\t\t\t\t\tclosestDate = date;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tif (closestDate) {\r\n\t\t\t\tclosestDate = new Date(closestDate.getTime() + this.baseDuration / 2);\r\n\t\t\t\tposition = this.dateToPosition(closestDate);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.showTooltipAtPosition(position, true);\r\n\r\n\t\tlet globalPosition = this.toGlobalPosition(position);\r\n\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tseries.showTooltipAtPosition(globalPosition, undefined);\r\n\t\t\t}\r\n\t\t\tif (series.yAxis == this) {\r\n\t\t\t\tseries.showTooltipAtPosition(undefined, globalPosition);\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DateAxis\"] = DateAxis;\r\nregistry.registeredClasses[\"DateAxisDataItem\"] = DateAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxis.ts","/**\r\n * Cursor for XY chart\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Cursor, ICursorProperties, ICursorAdapters, ICursorEvents } from \"./Cursor\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MutableValueDisposer, MultiDisposer } 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 { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { IInteractionEvents } 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 * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYCursor]].\r\n */\r\nexport interface IXYCursorProperties extends ICursorProperties {\r\n\r\n\t/**\r\n\t * Cursor's behavior when moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally; (default)\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * @default \"zoomX\"\r\n\t */\r\n\tbehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tfullWidthLineX?: boolean;\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tfullWidthLineY?: boolean;\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tmaxPanOut?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[XYCursor]].\r\n */\r\nexport interface IXYCursorEvents extends ICursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYCursorAdapters extends ICursorAdapters, IXYCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A cursor used on [[XYChart]].\r\n *\r\n * @see {@link IXYCursorEvents} for a list of available events\r\n * @see {@link IXYCursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class XYCursor extends Cursor {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYCursorProperties}\r\n\t */\r\n\tpublic _properties!: IXYCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t *\r\n\t * @type {IXYCursorAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYCursorEvents}\r\n\t */\r\n\tpublic _events!: IXYCursorEvents;\r\n\r\n\t/**\r\n\t * Vertical cursor line element.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _lineX = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Horizontal cursor line element.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _lineY = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Element which highlights selected area.\r\n\t *\r\n\t * @type {Sprite}\r\n\t */\r\n\tprotected _selection: Sprite;\r\n\r\n\t/**\r\n\t * A range of current horizontal selection.\r\n\t *\r\n\t * @type {IRange}\r\n\t */\r\n\tpublic xRange: IRange;\r\n\r\n\t/**\r\n\t * A range of current vertical selection.\r\n\t *\r\n\t * @type {IRange}\r\n\t */\r\n\tpublic yRange: IRange;\r\n\r\n\t/**\r\n\t * Horizontal [[Axis]].\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * Vertical [[Axis]].\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t *\r\n\t * @type {Chart}\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\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;\t\t\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\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\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\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursor element dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.innerHeight });\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.innerWidth, y: 0 });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tif (this.lineX) {\r\n\t\t\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.lineY) {\r\n\t\t\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\r\n\t\t\t\tlet x: number = Math.min(point.x, downPoint.x);\r\n\t\t\t\tlet y: number = Math.min(point.y, downPoint.y);\r\n\r\n\t\t\t\tlet w: number = $math.round(Math.abs(downPoint.x - point.x), this._positionPrecision);\r\n\t\t\t\tlet h: number = $math.round(Math.abs(downPoint.y - point.y), this._positionPrecision);\r\n\r\n\t\t\t\tswitch (this.behavior) {\r\n\t\t\t\t\tcase \"zoomX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"zoomY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tselection.x = x;\r\n\t\t\t\tselection.y = y;\r\n\r\n\t\t\t\tselection.path = $path.rectangle(w, h);\r\n\r\n\t\t\t\tselection.validatePosition(); // otherwise Edge shoes some incorrect size rectangle\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.selection.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\tpoint.x = Math.max(0, point.x);\r\n\t\tpoint.y = Math.max(0, point.y);\r\n\t\tpoint.x = Math.min(this.pixelWidth, point.x);\r\n\t\tpoint.y = Math.min(this.pixelHeight, point.y);\r\n\r\n\t\treturn point;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param {IPoint} point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tsuper.triggerMoveReal(point);\r\n\r\n\t\tthis.updateLinePositions(point);\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 = point;\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 (this.downPoint) {\r\n\t\t\tthis.upPoint = point;\r\n\r\n\t\t\tthis.updatePoint(this.upPoint);\r\n\r\n\t\t\tthis.getRanges();\r\n\r\n\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t// void\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\r\n\t\t\tsuper.triggerUpReal(point);\r\n\t\t}\r\n\r\n\t\tthis.downPoint = undefined;\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getPanningRanges() {\r\n\r\n\t\tlet startX = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet startY = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\r\n\t\tlet currentX = $math.round(this.point.x / this.innerWidth, 5);\r\n\t\tlet currentY = $math.round(this.point.y / this.innerHeight, 5);\r\n\r\n\t\tlet deltaX = startX - currentX;\r\n\t\tlet deltaY = -startY + currentY;\r\n\r\n\t\tthis.xRange = { start: deltaX, end: 1 + deltaX };\r\n\t\tthis.yRange = { start: deltaY, end: 1 + deltaY };\r\n\r\n\t\tif (this.behavior == \"panX\") {\r\n\t\t\tthis.yRange.start = 0;\r\n\t\t\tthis.yRange.end = 1;\r\n\t\t}\r\n\t\tif (this.behavior == \"panY\") {\r\n\t\t\tthis.xRange.start = 0;\r\n\t\t\tthis.xRange.end = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges() {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.upPoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.upPoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\r\n\t\t// @todo Is this needed?\r\n\t\tthis.selection;\r\n\r\n\t\tlet startX: number = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet endX: number = $math.round((this.upPoint.x) / this.innerWidth, 5);\r\n\r\n\t\tlet startY: number = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\t\tlet endY: number = $math.round((this.upPoint.y) / this.innerHeight, 5);\r\n\r\n\t\tthis.xRange = { start: $math.min(startX, endX), end: $math.max(startX, endX) };\r\n\t\tthis.yRange = { start: $math.min(startY, endY), end: $math.max(startY, endY) };\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's behavior when it's moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally;\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * E.g. \"zoomXY\" will mean that pressing a mouse (or touching) over plot area\r\n\t * and dragging it will start zooming the chart.\r\n\t *\r\n\t * @param {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} value Bheavior\r\n\t */\r\n\tpublic set behavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\t\tthis.setPropertyValue(\"behavior\", value, true);\r\n\r\n\t\tthis._usesSelection = false;\r\n\r\n\t\tif (value.indexOf(\"zoom\") != -1) {\r\n\t\t\tthis._generalBehavior = \"zoom\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"select\") != -1) {\r\n\t\t\tthis._generalBehavior = \"select\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"pan\") != -1) {\r\n\t\t\tthis._generalBehavior = \"pan\";\r\n\t\t\tthis._usesSelection = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @type {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} Bheavior\r\n\t */\r\n\tpublic get behavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"behavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `xAxis` is set and only in case\r\n\t * `xAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param {boolean} value Full width?\r\n\t */\r\n\tpublic set fullWidthLineX(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Full width?\r\n\t */\r\n\tpublic get fullWidthLineX(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `yAxis` is set and only in case\r\n\t * `yAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param {boolean} value Full width?\r\n\t */\r\n\tpublic set fullWidthLineY(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Full width?\r\n\t */\r\n\tpublic get fullWidthLineY(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineY\");\r\n\t}\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t *\r\n\t * @param {number} value\r\n\t */\r\n\tpublic set maxPanOut(value: number) {\r\n\t\tthis.setPropertyValue(\"maxPanOut\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Full width?\r\n\t */\r\n\tpublic get maxPanOut(): number {\r\n\t\treturn this.getPropertyValue(\"maxPanOut\");\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to X [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `xAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param {Axis} axis X axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tif (this._xAxis.get() != axis) {\r\n\t\t\tlet chart: XYChart = axis.chart;\r\n\t\t\tthis._xAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleXTooltipPosition, this, false),\r\n\t\t\t\taxis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} X axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\treturn this._xAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to Y [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `yAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param {Axis} axis Y axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tif (this._yAxis.get() != axis) {\r\n\t\t\tlet chart: XYChart = axis.chart;\r\n\t\t\tthis._yAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleYTooltipPosition, this, false),\r\n\t\t\t\taxis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Y Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\treturn this._yAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ISpriteEvents[\"positionchanged\"]} event Original Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet x: number = point.x;\r\n\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.x = x;\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineX.x = x;\r\n\t\t\t\tlet width: number = endPoint.x - startPoint.x;\r\n\t\t\t\tthis.lineX.path = $path.rectangle(width, this.innerHeight, -width / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when Y axis changes position or scale.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ISpriteEvents[\"positionchanged\"]} event Original Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet y: number = point.y;\r\n\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.y = y;\r\n\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineY.y = y;\r\n\t\t\t\tlet height: number = endPoint.y - startPoint.y;\r\n\t\t\t\tthis.lineY.path = $path.rectangle(this.innerWidth, height, 0, -height / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use for X axis.\r\n\t *\r\n\t * @param {Sprite} lineX Line\r\n\t */\r\n\tpublic set lineX(lineX: Sprite) {\r\n\t\tif (lineX) {\r\n\t\t\tlineX.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineX.set(lineX, lineX.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineX.interactionsEnabled = false;\r\n\t\t\tlineX.parent = this;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineX.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Sprite} Line element\r\n\t */\r\n\tpublic get lineX(): Sprite {\r\n\t\treturn this._lineX.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use Y axis.\r\n\t *\r\n\t * @param {Sprite} lineY Line\r\n\t */\r\n\tpublic set lineY(lineY: Sprite) {\r\n\t\tif (lineY) {\r\n\t\t\tlineY.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineY.set(lineY, lineY.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineY.parent = this;\r\n\t\t\tlineY.interactionsEnabled = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineY.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Sprite} Line element\r\n\t */\r\n\tpublic get lineY(): Sprite {\r\n\t\treturn this._lineY.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A selection element ([[Sprite]]).\r\n\t *\r\n\t * @param {Sprite} selection Selection rectangle\r\n\t */\r\n\tpublic set selection(selection: Sprite) {\r\n\t\tthis._selection = selection;\r\n\t\tif (selection) {\r\n\t\t\tselection.element = this.paper.add(\"path\");\r\n\t\t\tselection.parent = this;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Sprite} Selection rectangle\r\n\t */\r\n\tpublic get selection(): Sprite {\r\n\t\treturn this._selection;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * Looks if `xAxis` and `yAxis` is set via ID in JSON config, and replaces\r\n\t * with real references.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis) && this.map.hasKey(config.xAxis)) {\r\n\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis) && this.map.hasKey(config.yAxis)) {\r\n\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\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/**\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 * Line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesDataFields, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { LineSeriesSegment, ILineSeriesSegmentProperties } from \"./LineSeriesSegment\";\r\nimport { Axis, AxisDataItem } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[LineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class LineSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {LineSeries}\r\n\t */\r\n\tpublic _component!: LineSeries;\r\n\r\n\t/**\r\n\t * Point of line series data item\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic point: IPoint;\r\n\r\n\t/**\t \r\n\t * A reference to a segment object, used for getting proper colors for tooltips\r\n\t */\r\n\tpublic segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesDataItem\";\r\n\t}\r\n\r\n\t// @todo: minimums/maximums\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Vertical tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\ttensionY?: number;\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tconnect?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesAdapters extends IXYSeriesAdapters, ILineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a line graph.\r\n *\r\n * @see {@link ILineSeriesEvents} for a list of available Events\r\n * @see {@link ILineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class LineSeries extends XYSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {ILineSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ILineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ILineSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ILineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ILineSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ILineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ILineSeriesEvents}\r\n\t */\r\n\tpublic _events!: ILineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {LineSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: LineSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of line series segments.\r\n\t *\r\n\t * Segments are used in two cases:\r\n\t *\r\n\t * * When we want to change the appearance of a part of the line series;\r\n\t * * When we have an axis range.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tpublic segments: ListTemplate;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * A container for segment elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic segmentsContainer: Container;\r\n\r\n\t/**\r\n\t * Minimum distance in pixels between two adjacent points.\r\n\t *\r\n\t * If the distance is less than this setting, a point is skipped.\r\n\t *\r\n\t * This allows acceptable performance with huge amounts of data points.\r\n\t *\r\n\t * @default 0.5\r\n\t * @type {number}\r\n\t */\r\n\tpublic minDistance: number = 0.5;\r\n\r\n\t/**\r\n\t * Iterator for segments.\r\n\t *\r\n\t * @type {ListIterator}\r\n\t */\r\n\tprotected _segmentsIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.segments = new ListTemplate(this.createSegment());\r\n\t\tthis.segments.template.applyOnClones = true;\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.segments));\r\n\t\tthis._disposers.push(this.segments.template);\r\n\r\n\t\tthis._segmentsIterator = new $iter.ListIterator(this.segments, () => this.segments.create());\r\n\t\tthis._segmentsIterator.createNewItems = true;\r\n\r\n\t\tthis.className = \"LineSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.fillOpacity = 0;\r\n\r\n\t\tthis.connect = true;\r\n\r\n\t\tthis.tensionX = 1;\r\n\t\tthis.tensionY = 1;\r\n\r\n\t\tthis.segmentsContainer = this.mainContainer.createChild(Container);\r\n\t\tthis.segmentsContainer.isMeasured = false;\r\n\r\n\t\t// line series might have multiple segments and it has a separate sprite for fill and stroke for each segment. So we need to observe all the changes on series and set them on the segments\r\n\t\t// todo: we need list here, otherwise everything will be redrawn event on change of properties like tooltipX or similar.\r\n\t\t// this.addEventListener(SpriteEvent.PROPERTY_CHANGED, this.validateDataElements, false, this);\r\n\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Line Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new LineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {LineSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new LineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t * @param {number} index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\t// this makes data items animate when added\r\n\t\tif (this.appeared && this.visible) {\r\n\r\n\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\r\n\t\t\tlet previousDataItem: XYSeriesDataItem = this.dataItems.getIndex(dataItem.index - 1);\r\n\r\n\t\t\tdataItem.component = this; // as these values are set before, we don't know component yet\r\n\r\n\t\t\tif (this.baseAxis == xAxis) {\r\n\t\t\t\tif (yAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialY: number = yAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialY = previousDataItem.values[\"valueY\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this makes line animate from previous point to newly added point\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", initialY, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", dataItem.values.valueY.value);\r\n\r\n\t\t\t\t\tif (xAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == yAxis) {\r\n\t\t\t\tif (xAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialX: number = xAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialX = previousDataItem.values[\"valueX\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", initialX, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", dataItem.values.valueX.value);\r\n\r\n\t\t\t\t\tif (yAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates corresponding legend data item with current values.\r\n\t * \r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\t\t//This is hack to save some methos, used to set tooltip color source only\r\n\t\tif (dataItem && dataItem.segment) {\r\n\t\t\tthis.tooltipColorSource = dataItem.segment;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tthis._segmentsIterator.reset();\r\n\r\n\t\tthis.openSegment(this._workingStartIndex);\r\n\r\n\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\tthis.openSegment(this._workingStartIndex, 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\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 * [openSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {number} openIndex [description]\r\n\t * @param {AxisDataItem} axisRange [description]\r\n\t */\r\n\tprotected openSegment(openIndex: number, axisRange?: AxisDataItem): void {\r\n\t\tlet points: IPoint[] = [];\r\n\r\n\t\tlet endIndex: number = this._workingEndIndex;\r\n\r\n\t\tlet closeIndex: number;\r\n\t\tlet propertiesChanged: boolean = false;\r\n\r\n\t\tlet segment: LineSeriesSegment = this._segmentsIterator.getFirst();\r\n\t\tsegment.__disabled = false;\r\n\r\n\t\tif (axisRange) {\r\n\t\t\tsegment.parent = axisRange.contents;\r\n\t\t\t$object.copyProperties(axisRange.contents, segment, visualProperties);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$object.copyProperties(this, segment, visualProperties);\r\n\t\t\tsegment.filters.clear();\r\n\t\t\tsegment.parent = this.segmentsContainer;\r\n\t\t}\r\n\r\n\t\tfor (let i: number = openIndex; i < endIndex; i++) {\r\n\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.segment = segment;\r\n\r\n\t\t\tif (dataItem.hasProperties) {\r\n\t\t\t\t// if this is first item of segment\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tthis.updateSegmentProperties(dataItem.properties, segment);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// this time we only need to know if properties changed, so we don't pass segment\r\n\t\t\t\t\tpropertiesChanged = this.updateSegmentProperties(dataItem.properties, segment, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tthis.addPoints(points, dataItem, this.xField, this.yField);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// if no values in first data item, go to next\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlet connect: boolean = this.connect;\r\n\t\t\t\t\t// todo: other connect conditions\r\n\r\n\t\t\t\t\t// stop cycle\r\n\t\t\t\t\tif (!connect) {\r\n\t\t\t\t\t\tcloseIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcloseIndex = i;\r\n\r\n\t\t\tif (propertiesChanged) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.closeSegment(segment, points, openIndex, closeIndex, axisRange);\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean) {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.workingLocations[xField], dataItem.workingLocations[yField]);\r\n\t\tif (!backwards) {\r\n\t\t\tdataItem.point = point;\r\n\t\t}\r\n\t\tpoints.push(point);\r\n\t}\r\n\r\n\t/**\r\n\t * [closeSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {LineSeriesSegment} segment [description]\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {number} openIndex [description]\r\n\t * @param {number} closeIndex [description]\r\n\t * @param {AxisDataItem} axisRange [description]\r\n\t */\r\n\tprotected closeSegment(segment: LineSeriesSegment, points: IPoint[], openIndex: number, closeIndex: number, axisRange?: AxisDataItem) {\r\n\r\n\t\tlet closePoints: IPoint[] = [];\r\n\r\n\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\tthis.stacked) {\r\n\t\t\tfor (let i: number = closeIndex; i >= openIndex; i--) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) { // not sure, this means that open point will only be added if value is also set for this point, but maybe it's ok.\r\n\t\t\t\t\tthis.addPoints(closePoints, dataItem, this.xOpenField, this.yOpenField, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet baseAxis: Axis = this.baseAxis;\r\n\t\t\tlet count: number = points.length;\r\n\t\t\tlet xAxis: Axis = this.xAxis;\r\n\t\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\t\tif (baseAxis == xAxis) {\r\n\t\t\t\tclosePoints.push({ x: points[count - 1].x, y: yAxis.basePoint.y }); // last x\r\n\t\t\t\tclosePoints.push({ x: points[0].x, y: yAxis.basePoint.y }); // first x\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[count - 1].y }); // last y\r\n\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[0].y }); // first y\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.drawSegment(segment, points, closePoints);\r\n\r\n\t\tif (closeIndex < this._workingEndIndex - 1) {\r\n\t\t\tthis.openSegment(closeIndex, axisRange);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param {LineSeriesSegment} segment Segment\r\n\t * @param {IPoint[]} points Segment points\r\n\t * @param {IPoint[]} closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY);\r\n\t}\r\n\r\n\t/**\r\n\t * Segement will get its colors from `this.dataItem`, as thats how\r\n\t * `getPropertyValue()` method works.\r\n\t *\r\n\t * We pass `lineSeriesDataItem.properties` as item here each time when a flag\r\n\t * `hasProperties` is set to `true` on data item (this means it can contain\r\n\t * some properties set).\r\n\t *\r\n\t * @param {object} itemProperties Item properties\r\n\t * @param {LineSeriesSegment} segment Segment\r\n\t * @return {boolean} Properties changed?\r\n\t */\r\n\tprotected updateSegmentProperties(itemProperties: { [index: string]: any }, segment: LineSeriesSegment, checkOnly?: boolean): boolean {\r\n\t\tlet changed: boolean = false;\r\n\r\n\t\t$object.each(itemProperties, (propertyName, value) => {\r\n\t\t\t// some value must be defined\r\n\t\t\tif ($type.hasValue(value)) {\r\n\t\t\t\tlet currentValue = (segment)[propertyName];\r\n\t\t\t\tlet currentValueStr: string;\r\n\t\t\t\t// current value can be Color, number, anything. So we check if it has toString, otherwise just do String().\r\n\t\t\t\t// toString() will return hex if it's color. The only problem is that it will return lowercased hex and if we have uppercase in data, it will think that it changed\r\n\t\t\t\tif (currentValue) {\r\n\t\t\t\t\tif (currentValue.toString) {\r\n\t\t\t\t\t\tcurrentValueStr = currentValue.toString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tcurrentValueStr = currentValue; // not doing String(currentValue) as this will make all Objects the same\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\tlet valueStr: string;\r\n\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tif (value.toString) {\r\n\t\t\t\t\t\tvalueStr = value.toString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tvalueStr = value; // not doing String(currentValue) as this will make all Objects the same\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (currentValue == value || (currentValueStr != undefined && valueStr != undefined && currentValueStr == valueStr)) {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (!checkOnly) {\r\n\t\t\t\t\t\t(segment)[propertyName] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * If set to `true` the line will connect two adjacent data points by a\r\n\t * straight line. Even if there are data points with missing values\r\n\t * in-between.\r\n\t *\r\n\t * If you set this to `false`, the line will break when there are missing\r\n\t * values.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Line_series_with_gaps} for more information about this feature\r\n\t * @default true\r\n\t * @param {boolean} value Connect?\r\n\t */\r\n\tpublic set connect(value: boolean) {\r\n\t\tif(this.setPropertyValue(\"connect\", value)){\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Connect?\r\n\t */\r\n\tpublic get connect(): boolean {\r\n\t\treturn this.getPropertyValue(\"connect\");\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Can be used to create smoothed lines. It works like this:\r\n\t *\r\n\t * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n\t * will mean that the \"tension\" is very high, so the line is maximally\r\n\t * attracted to the points it connects, hence the straight line.\r\n\t *\r\n\t * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n\t *\r\n\t * The smaller the tension setting, the more relaxed the line and the more\r\n\t * wide the curve.\r\n\t *\r\n\t * This setting is for horizontal tension, meaning the curve will bend in\r\n\t * such way that it never goes below or above connecting points. To enable\r\n\t * vertical bending as well, use `tensionY`.\r\n\t *\r\n\t * @default 1\r\n\t * @param {number} value Horizontal tension (0-1)\r\n\t */\r\n\tpublic set tensionX(value: number) {\r\n\t\tthis.setPropertyValue(\"tensionX\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Horizontal tension (0-1)\r\n\t */\r\n\tpublic get tensionX(): number {\r\n\t\treturn this.getPropertyValue(\"tensionX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Can be used to create smoothed lines. It works like this:\r\n\t *\r\n\t * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n\t * will mean that the \"tension\" is very high, so the line is maximally\r\n\t * attracted to the points it connects, hence the straight line.\r\n\t *\r\n\t * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n\t *\r\n\t * The smaller the tension setting, the more relaxed the line and the more\r\n\t * wide the curve.\r\n\t *\r\n\t * This setting is for vertical tension, meaning the curve might bend in\r\n\t * such way that it will go below or above connected points.\r\n\t *\r\n\t * Combine this setting with `tensionX` to create beautifully looking\r\n\t * smoothed line series.\r\n\t *\r\n\t * @default 1\r\n\t * @param {number} value Vertical tension (0-1)\r\n\t */\r\n\tpublic set tensionY(value: number) {\r\n\t\tthis.setPropertyValue(\"tensionY\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Vertical tension (0-1)\r\n\t */\r\n\tpublic get tensionY(): number {\r\n\t\treturn this.getPropertyValue(\"tensionY\");\r\n\t}\r\n\r\n\r\n\t /*\r\n\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\tif (dataItem.segment) {\r\n\t\t\t$object.softCopyProperties(dataItem.segment, bullet, visualProperties);\r\n\t\t}\r\n\t}*/\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): 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\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 * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesSegmentAdapters extends IContainerAdapters, ILineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link ILineSeriesSegmentEvents} for a list of available events\r\n * @see {@link ILineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class LineSeriesSegment extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ILineSeriesSegmentPropertiess}\r\n\t */\r\n\tpublic _properties!: ILineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ILineSeriesSegmentAdapters}\r\n\t */\r\n\tpublic _adapter!: ILineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ILineSeriesSegmentEvents}\r\n\t */\r\n\tpublic _events!: ILineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesSegment\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.interactionsEnabled = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\t// Create fill element\r\n\t\tlet fillSprite = this.createChild(Sprite);\r\n\t\tthis.fillSprite = fillSprite;\r\n\t\tfillSprite.shouldClone = false;\r\n\t\tfillSprite.setElement(this.paper.add(\"path\"));\r\n\t\tfillSprite.isMeasured = false;\r\n\t\tthis._disposers.push(fillSprite);\r\n\r\n\r\n\t\t// Create line element\r\n\t\tlet strokeSprite = this.createChild(Sprite);\r\n\t\tthis.strokeSprite = strokeSprite;\r\n\t\tstrokeSprite.shouldClone = false;\r\n\t\tstrokeSprite.setElement(this.paper.add(\"path\"));\r\n\t\tstrokeSprite.isMeasured = false;\r\n\t\tthis._disposers.push(strokeSprite);\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint[]} points Points to connect\r\n\t * @param {IPoint[]} closePoints ?\r\n\t * @param {number} smoothnessX Horizontal bezier setting (?)\r\n\t * @param {number} smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number): void {\r\n\t\tif (!this.disabled) {\r\n\t\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\t\t\t\t// first moveTo helps to avoid Chrome straight line in the mask bug.\r\n\t\t\t\tlet path: string = $path.moveTo({ x: points[0].x - 0.2, y: points[0].y - 0.2 }) + $path.moveTo(points[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(points);\r\n\r\n\t\t\t\tif (this.strokeOpacity == 0 || this.strokeSprite.strokeOpacity == 0) {\r\n\t\t\t\t\t// like this and not if != 0, otherwise ranges stroke won't be drawn.\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.strokeSprite.path = path;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.fillSprite.path = \"\";\r\n\t\t\t\tthis.strokeSprite.path = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Copies properties from a [[Sprite]] to both line and fill elements.\r\n\t *\r\n\t * @param {Sprite} source Source [[Sprite]] to copy properties from\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\r\n\t\tlet lineElement = this.strokeSprite;\r\n\t\t$object.copyProperties(source, lineElement.properties, visualProperties);\r\n\t\tlineElement.fillOpacity = 0;\r\n\r\n\t\tlet fillElement = this.fillSprite;\r\n\t\t$object.copyProperties(source, fillElement.properties, visualProperties);\r\n\t\tfillElement.strokeOpacity = 0;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeriesSegment\"] = LineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeriesSegment.ts","/**\r\n * Defines Pie Chart Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPercentSeriesAdapters, IPercentSeriesDataFields, IPercentSeriesEvents, IPercentSeriesProperties, PercentSeries, PercentSeriesDataItem } from \"./PercentSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { PieTick } from \"../elements/PieTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { PieChart } from \"../types/PieChart\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\n\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieSeriesDataItem extends PercentSeriesDataItem {\r\n\r\n\t/**\r\n\t * A type of slice used for this series.\r\n\t *\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic _slice: Slice;\r\n\r\n\t/**\r\n\t * A reference to a slice label element.\r\n\t * @ignore Exclude from docs\r\n\t * @type {AxisLabelCircular}\r\n\t */\r\n\tpublic _label: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * A reference to a slice tick element.\r\n\t * @ignore Exclude from docs\r\n\t * @type {PieTick}\r\n\t */\r\n\tpublic _tick: PieTick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieSeries}\r\n\t */\r\n\tpublic _component!: PieSeries;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeriesDataItem\";\r\n\r\n\t\tthis.values.radiusValue = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Slice's radius, if other than default.\r\n\t *\r\n\t * @param {number} value Radius\r\n\t */\r\n\tpublic set radiusValue(value: number) {\r\n\t\tthis.setValue(\"radiusValue\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t */\r\n\tpublic get radiusValue(): number {\r\n\t\treturn this.values.radiusValue.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Hide the data item (and corresponding visual elements).\r\n\t *\r\n\t * @param {number} duration Duration (ms)\r\n\t * @param {number} delay Delay hiding (ms)\r\n\t * @param {number} toValue Target value for animation\r\n\t * @param {string[]} fields Fields to animate while hiding\r\n\t */\r\n\tpublic hide(duration?: number, delay?: number, toValue?: number, fields?: string[]): Animation {\r\n\t\treturn super.hide(duration, delay, 0, [\"value\", \"radiusValue\"]);\r\n\t}\r\n\r\n\t/**\r\n\t * Show hidden data item (and corresponding cisual elements).\r\n\t *\r\n\t * @param {number} duration Duration (ms)\r\n\t * @param {number} delay Delay hiding (ms)\r\n\t * @param {string[]} fields Fields to animate while hiding\r\n\t */\r\n\tpublic show(duration?: number, delay?: number, fields?: string[]): Animation {\r\n\t\treturn super.show(duration, delay, [\"value\", \"radiusValue\"]);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieSeries]].\r\n */\r\nexport interface IPieSeriesDataFields extends IPercentSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds item's radius value.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tradiusValue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[PieSeries]].\r\n */\r\nexport interface IPieSeriesProperties extends IPercentSeriesProperties {\r\n\r\n\t/**\r\n\t * Outer radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Start angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[PieSeries]].\r\n */\r\nexport interface IPieSeriesEvents extends IPercentSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieSeriesAdapters extends IPercentSeriesAdapters, IPieSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a slice series on a Pie chart.\r\n *\r\n * @see {@link IPieSeriesEvents} for a list of available Events\r\n * @see {@link IPieSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class PieSeries extends PercentSeries {\r\n\r\n\tpublic _slice: Slice;\r\n\r\n\tpublic _tick: PieTick;\r\n\r\n\tpublic _label: AxisLabelCircular;\r\n\r\n\tpublic _chart: PieChart;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPieSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPieSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieSeriesEvents}\r\n\t */\r\n\tpublic _events!: IPieSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PieSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: PieSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds current angle for the next slice to start on.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _currentStartAngle: number;\r\n\r\n\t/**\r\n\t * Data items that fall to the left side of the pie.\r\n\t */\r\n\tprotected _leftItems: this[\"_dataItem\"][];\r\n\r\n\t/**\r\n\t * Data items that fall to the right side of the pie.\r\n\t */\r\n\tprotected _rightItems: this[\"_dataItem\"][];\r\n\r\n\t/**\r\n\t * [_arcRect description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {IRectangle}\r\n\t */\r\n\tprotected _arcRect: IRectangle;\r\n\r\n\t/**\r\n\t * [_maxRadiusPercent description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _maxRadiusPercent: number;\r\n\r\n\t/**\r\n\t * [_pixelRadius description]\r\n\t *\r\n\t * @ignore this is set by pie chart, not by user\r\n\t * @type {number}\r\n\t */\r\n\tprotected _pixelRadius: number;\r\n\r\n\t/**\r\n\t * [_pixelInnerRadius description]\r\n\t *\r\n\t * @ignore this is set by pie chart, not by user\r\n\t * @type {number}\r\n\t */\r\n\tprotected _pixelInnerRadius: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PieSeries\";\r\n\r\n\t\tthis.alignLabels = true;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.labels.template.radius = percent(5);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/** \r\n\t * creates slice\r\n\t */\r\n\tprotected createSlice(): this[\"_slice\"] {\r\n\t\treturn new Slice();\r\n\t}\r\n\r\n\t/** \r\n\t * creates tick\r\n\t */\r\n\tprotected createTick(): this[\"_tick\"] {\r\n\t\treturn new PieTick();\r\n\t}\r\n\r\n\t/** \r\n\t * creates label\r\n\t */\r\n\tprotected createLabel(): this[\"_label\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pie Slice Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {PieSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PieSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits slice.\r\n\t *\r\n\t * @param {Slice} slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tslice.isMeasured = false;\r\n\t\tslice.defaultState.properties.scale = 1;\r\n\t\tslice.observe(\"scale\", this.handleSliceScale, this);\r\n\t\tslice.observe([\"dx\", \"dy\", \"x\", \"y\", \"shiftRadius\"], this.handleSliceMove, this);\r\n\t\tslice.tooltipText = \"{category}: {value.percent.formatNumber('#.#')}% ({value.value})\";\r\n\r\n\t\tlet hoverState = slice.states.create(\"hover\");\r\n\t\thoverState.properties.scale = 1.05;\r\n\r\n\t\tlet defaultState = slice.defaultState;\r\n\t\tdefaultState.properties.shiftRadius = 0;\r\n\r\n\t\tslice.togglable = true;\r\n\r\n\t\tslice.events.on(\"toggled\", (event) => {\r\n\t\t\tevent.target.hideTooltip();\r\n\t\t});\r\n\r\n\t\tlet activeState = slice.states.create(\"active\");\r\n\t\tactiveState.properties.shiftRadius = 0.10;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tthis._leftItems = [];\r\n\t\tthis._rightItems = [];\r\n\r\n\t\tthis._currentStartAngle = this.startAngle;\r\n\t\tthis._arcRect = $math.getArcRect(this.startAngle, this.endAngle);\r\n\r\n\t\tthis._maxRadiusPercent = 0;\r\n\t\tfor (let i = this.startIndex; i < this.endIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tlet radiusValuePercent = dataItem.values.radiusValue.percent;\r\n\t\t\tif (radiusValuePercent > this._maxRadiusPercent) {\r\n\t\t\t\tthis._maxRadiusPercent = radiusValuePercent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tif (this.alignLabels) {\r\n\t\t\tif (this.startAngle > this.endAngle) {\r\n\t\t\t\tthis._rightItems.reverse();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._leftItems.reverse()\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._rightItems.sort((a, b) => {\r\n\t\t\t\tlet aAngle = (a.slice.middleAngle + 360) % 360;\r\n\t\t\t\tlet bAngle = (b.slice.middleAngle + 360) % 360;\r\n\r\n\t\t\t\tif (aAngle > 270) {\r\n\t\t\t\t\taAngle -= 360;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (bAngle > 270) {\r\n\t\t\t\t\tbAngle -= 360;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (aAngle < bAngle) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tthis._leftItems.sort((a, b) => {\r\n\r\n\t\t\t\tlet aAngle = (a.slice.middleAngle + 360) % 360;\r\n\t\t\t\tlet bAngle = (b.slice.middleAngle + 360) % 360;\r\n\r\n\t\t\t\tif (aAngle < bAngle) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tthis.arrangeLabels(this._rightItems);\r\n\t\t\tthis.arrangeLabels(this._leftItems);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {PieSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tif (this.pixelRadius > 0) {\r\n\r\n\t\t\tlet percent = dataItem.values.value.percent;\r\n\r\n\t\t\t// SLICE\r\n\t\t\tlet slice: Slice = dataItem.slice;\r\n\t\t\tslice.radius = this.pixelRadius;\r\n\r\n\t\t\tif ($type.isNumber(dataItem.radiusValue)) {\r\n\t\t\t\tslice.radius *= dataItem.values.radiusValue.percent / this._maxRadiusPercent;\r\n\t\t\t}\r\n\t\t\tif (!(slice.innerRadius instanceof Percent)) {\r\n\t\t\t\tslice.innerRadius = this.pixelInnerRadius;\r\n\t\t\t}\r\n\t\t\tslice.startAngle = this._currentStartAngle;\r\n\r\n\t\t\tslice.arc = dataItem.values.value.percent * (this.endAngle - this.startAngle) / 100;\r\n\r\n\t\t\t// LABEL\r\n\t\t\tlet label = dataItem.label;\r\n\r\n\t\t\tlet tick = dataItem.tick;\r\n\t\t\ttick.slice = slice;\r\n\t\t\ttick.label = label;\r\n\r\n\t\t\tlet normalizedMiddleAngle: number = (slice.middleAngle + 360) % 360; // force angle to be 0 - 360;\r\n\r\n\t\t\tlet point: IPoint;\r\n\r\n\t\t\tif (this.alignLabels) {\r\n\t\t\t\tlet labelRadius = label.pixelRadius(slice.radius);\r\n\t\t\t\tlet x: number = tick.length + labelRadius;\r\n\r\n\t\t\t\tlabel.verticalCenter = \"middle\";\r\n\t\t\t\tlet arcRect = this._arcRect;\r\n\t\t\t\t// right half\r\n\t\t\t\tif (normalizedMiddleAngle >= 270 || normalizedMiddleAngle <= 90) { // 91 makes less chances for flickering\r\n\t\t\t\t\tx += (arcRect.width + arcRect.x) * this.pixelRadius;\r\n\t\t\t\t\tlabel.horizontalCenter = \"left\";\r\n\t\t\t\t\tthis._rightItems.push(dataItem);\r\n\t\t\t\t}\r\n\t\t\t\t// left half\r\n\t\t\t\telse {\r\n\t\t\t\t\tx -= arcRect.x * this.pixelRadius;\r\n\t\t\t\t\tlabel.horizontalCenter = \"right\";\r\n\t\t\t\t\tthis._leftItems.push(dataItem);\r\n\t\t\t\t\tx *= -1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet distance = slice.radius + tick.length + labelRadius;\r\n\t\t\t\tpoint = { x: x, y: slice.iy * distance };\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet x: number = slice.ix * slice.radius;\r\n\t\t\t\tlet y: number = slice.iy * slice.radiusY;\r\n\t\t\t\tpoint = label.fixPoint({ x: x, y: y }, slice.radius);\r\n\t\t\t}\r\n\r\n\t\t\tlabel.moveTo(point);\r\n\t\t\tthis._currentStartAngle += slice.arc;\r\n\r\n\t\t\t// do this at the end, otherwise bullets won't be positioned properly\r\n\t\t\tsuper.validateDataElement(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius for the series' slices in pixels or [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, true, false, 10, false)) {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t * @ignore\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn this._pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic set pixelRadius(value: number) {\r\n\t\tif (this._pixelRadius != value) {\r\n\t\t\tthis._pixelRadius = value;\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Pixel inner radius\r\n\t * @ignore\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn this._pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic set pixelInnerRadius(value: number) {\r\n\t\tif (this._pixelInnerRadius != value) {\r\n\t\t\tthis._pixelInnerRadius = value;\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number | Percent} Radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", $math.normalizeAngle(value), true);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Bullet} bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet): void {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t\tlet slice: Slice = dataItem.slice;\r\n\r\n\t\tlet locationX = bullet.locationX;\r\n\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\tlocationX = 0.5;\r\n\t\t}\r\n\t\tlet locationY = bullet.locationY;\r\n\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\tlocationY = 1;\r\n\t\t}\r\n\r\n\t\tlet angle = slice.startAngle + slice.arc * locationX;\r\n\t\tlet radius = locationY * slice.radius;\r\n\r\n\t\tbullet.x = radius * $math.cos(angle);\r\n\t\tbullet.y = radius * $math.sin(angle);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Repositions bullet and labels when slice moves.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"propertychanged\"]} event Event\r\n\t */\r\n\tprotected handleSliceMove(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (!this.alignLabels) {\r\n\r\n\t\t\tlet slice = event.target;\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = slice.dataItem;\r\n\t\t\t// moving textelement, as label dx and dy are already employed for aligning\r\n\t\t\t//@labeltodo\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet label = dataItem.label;\r\n\t\t\t\tif (label) {\r\n\t\t\t\t\tlabel.dx = label.fdx + slice.dx + slice.pixelX;\r\n\t\t\t\t\tlabel.dy = label.fdy + slice.dy + slice.pixelY;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns bounding box (square) for this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {IRectangle}\r\n\t */\r\n\tpublic get bbox(): IRectangle {\r\n\t\tif (this.definedBBox) {\r\n\t\t\treturn this.definedBBox;\r\n\t\t}\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\treturn $math.getArcRect(chart.startAngle, chart.endAngle, this.pixelRadius);\r\n\t\t}\r\n\r\n\t\treturn $math.getArcRect(this.startAngle, this.endAngle, this.pixelRadius);\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieSeries\"] = PieSeries;\r\nregistry.registeredClasses[\"PieSeriesDataItem\"] = PieSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PieSeries.ts","/**\r\n * Module that defines everything related to building Candlesticks.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Candlestick]].\r\n */\r\nexport interface ICandlestickProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[Candlestick]].\r\n */\r\nexport interface ICandlestickEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[Candlestick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickAdapters extends IColumnAdapters, ICandlestickProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates Candlesticks.\r\n *\r\n * @see {@link ICandlestickEvents} for a list of available events\r\n * @see {@link ICandlestickAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class Candlestick extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICandlestickProperties}\r\n\t */\r\n\tpublic _properties!: ICandlestickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICandlestickAdapters}\r\n\t */\r\n\tpublic _adapter!: ICandlestickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICandlestickEvents}\r\n\t */\r\n\tpublic _events!: ICandlestickEvents;\r\n\r\n\t/**\r\n\t * Low line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic lowLine: Line;\r\n\r\n\t/**\r\n\t * High line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic highLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"Candlestick\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tsuper.createAssets();\r\n\r\n\t\tthis.lowLine = this.createChild(Line);\r\n\t\tthis.lowLine.shouldClone = false;\r\n\r\n\t\tthis.highLine = this.createChild(Line);\r\n\t\tthis.highLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Candlestick]].\r\n\t *\r\n\t * @param {Candlestick} source Source Candlestick\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.lowLine) {\r\n\t\t\tthis.lowLine.copyFrom(source.lowLine);\r\n\t\t}\r\n\t\tif (this.highLine) {\r\n\t\t\tthis.highLine.copyFrom(source.highLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Candlestick\"] = Candlestick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/Candlestick.ts","/**\r\n * Module, defining Axis Renderer for circular axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRenderer, IAxisRendererProperties, IAxisRendererAdapters, IAxisRendererEvents } from \"./AxisRenderer\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisFillCircular } from \"./AxisFillCircular\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { GridCircular } from \"./GridCircular\";\r\nimport { AxisLabelCircular } from \"./AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularProperties extends IAxisRendererProperties {\r\n\r\n\t/**\r\n\t * Start angle of the circular axis in degrees (0-360).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the circular axis in degrees (0-360).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Outer radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Specifies if axis should use it's own start/end angles or the ones set on chart.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tuseChartAngles?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularEvents extends IAxisRendererEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererCircularAdapters extends IAxisRendererAdapters, IAxisRendererCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for circular axis.\r\n */\r\nexport class AxisRendererCircular extends AxisRenderer {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisRendererProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererCircularEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererCircularEvents;\r\n\r\n\t/**\r\n\t * Defines type of the grid elements.\r\n\t *\r\n\t * @type {GridCircular}\r\n\t */\r\n\tpublic _gridType: GridCircular;\r\n\r\n\t/**\r\n\t * Defines type for the fill elements.\r\n\t *\r\n\t * @type {AxisFillCircular}\r\n\t */\r\n\tpublic _fillType: AxisFillCircular;\r\n\r\n\t/**\r\n\t * Defines type for the label elements.\r\n\t *\r\n\t * @type {AxisLabelCircular}\r\n\t */\r\n\tpublic _labelType: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\t// axis.layout = \"none\"; // does not trigger redraw when size changes\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.className = \"AxisRendererCircular\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.useChartAngles = true;\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.grid.template.location = 0;\r\n\r\n\t\tthis.labels.template.location = 0;\r\n\t\tthis.labels.template.radius = 15;\r\n\r\n\t\tthis.ticks.template.location = 0;\r\n\t\tthis.ticks.template.pixelPerfect = false;\r\n\t\tthis.tooltipLocation = 0;\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t* @ignore\r\n\t*/\r\n\tpublic setAxis(axis: Axis) {\r\n\t\tsuper.setAxis(axis);\r\n\t\taxis.isMeasured = false;\r\n\r\n\t\t// modify x and y so that tooltip would always be on circle\r\n\t\tlet tooltip = axis.tooltip;\r\n\r\n\t\ttooltip.adapter.add(\"dx\", (x, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.cos(Math.atan2(point.y, point.x)) - point.x;\r\n\t\t});\r\n\r\n\t\ttooltip.adapter.add(\"dy\", (y, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.sin(Math.atan2(point.y, point.x)) - point.y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return {number} Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn 2 * Math.PI * this.pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return {number} Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"innerRadius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if axis should use its own `startAngle` and `endAngle` or\r\n\t * inherit them from relative properties from chart.\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value Use chart's angles\r\n\t */\r\n\tpublic set useChartAngles(value: boolean) {\r\n\t\tthis.setPropertyValue(\"useChartAngles\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Use chart angles\r\n\t */\r\n\tpublic get useChartAngles(): boolean {\r\n\t\treturn this.getPropertyValue(\"useChartAngles\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return {number} Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {IPoint} Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\t\t\r\n\t\tlet coordinate: number = this.positionToCoordinate(position);\r\n\t\tlet angle: number = this.startAngle + (this.endAngle - this.startAngle) * coordinate / this.axisLength;\r\n\t\treturn { x: this.pixelRadius * $math.cos(angle), y: this.pixelRadius * $math.sin(angle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position (0-1) on axis to angle in degrees (0-360).\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {number} Angle (0-360)\r\n\t */\r\n\tpublic positionToAngle(position: number): number {\r\n\t\tlet axis: Axis = this.axis;\r\n\r\n\t\tlet arc: number = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n\r\n\t\tlet angle: number;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tangle = this.startAngle + (axis.end - position) * arc;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tangle = this.startAngle + (position - axis.start) * arc;\r\n\t\t}\r\n\r\n\t\treturn $math.round(angle, 3);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\t\tthis.line.path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius, radius);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Grid} grid Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: GridCircular, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet radius: number = $utils.relativeRadiusToValue($type.hasValue(grid.radius) ? grid.radius : percent(100), this.pixelRadius);\r\n\r\n\t\t\tlet gridInnerRadius = $utils.relativeRadiusToValue(grid.innerRadius, this.pixelRadius);\r\n\t\t\tgrid.zIndex = 0;\r\n\r\n\t\t\tlet innerRadius: number = $utils.relativeRadiusToValue($type.isNumber(gridInnerRadius) ? gridInnerRadius : this.innerRadius, this.pixelRadius, true);\r\n\t\t\tgrid.path = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisTick} tick Tick element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number, endPosition: number) {\r\n\r\n\t\tposition = position + (endPosition - position) * tick.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (tick.element) {\r\n\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet tickLength: number = tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength = -tickLength;\r\n\t\t\t}\r\n\t\t\ttick.zIndex = 1;\r\n\t\t\ttick.path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) }) + $path.lineTo({ x: (radius + tickLength) * $math.cos(angle), y: (radius + tickLength) * $math.sin(angle) });\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisLabel} label Label element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?:number) {\r\n\r\n\t\tif(!$type.hasValue(location)){\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tlabel.fixPoint(point, this.pixelRadius);\r\n\t\tlabel.zIndex = 2;\r\n\r\n\t\tthis.positionItem(label, point);\r\n\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint} point Point coordinates\r\n\t * @return {boolean} Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param {number} value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param {number} value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} 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 * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {number} startPosition Starting position\r\n\t * @param {number} endPosition End position\r\n\t * @return {string} SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number, radius?: number | Percent, innerRadius?: number | Percent, cornerRadius?: number): string {\r\n\t\tlet path: string = \"\";\r\n\t\tif ($type.isNumber(startPosition) && $type.isNumber(endPosition)) {\r\n\r\n\t\t\tif (!$type.hasValue(radius)) {\r\n\t\t\t\tradius = this.radius;\r\n\t\t\t}\r\n\r\n\t\t\tstartPosition = $math.max(startPosition, this.axis.start);\r\n\t\t\tendPosition = $math.min(endPosition, this.axis.end);\r\n\r\n\t\t\tif (endPosition < startPosition) {\r\n\t\t\t\tendPosition = startPosition;\r\n\t\t\t}\r\n\r\n\t\t\tlet pixelRadius: number = $utils.relativeRadiusToValue(radius, this.pixelRadius);\r\n\t\t\tlet pixelInnerRadius: number = $utils.relativeRadiusToValue(innerRadius, this.pixelRadius, true);\r\n\r\n\t\t\tlet startAngle: number = this.positionToAngle(startPosition);\r\n\t\t\tlet endAngle: number = this.positionToAngle(endPosition);\r\n\r\n\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\tpath = $path.arc(startAngle, arc, pixelRadius, pixelInnerRadius, pixelRadius, cornerRadius);\r\n\t\t}\r\n\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new grid element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return {GridCircular} Grid element\r\n\t */\r\n\tpublic createGrid(): this[\"_gridType\"] {\r\n\t\treturn new GridCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new fill element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return {AxisFillCircular} Fill element\r\n\t */\r\n\tpublic createFill(axis: Axis): this[\"_fillType\"] {\r\n\t\treturn new AxisFillCircular(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new label element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return {AxisLabelCircular} Label element\r\n\t */\r\n\tpublic createLabel(): this[\"_labelType\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param {IPoint} point Point\r\n\t * @return {number} Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\t\t\r\n\t\tlet angle = $math.fitAngleToRange($math.getAngle(point), this.startAngle, this.endAngle);\t\t\r\n\t\treturn this.coordinateToPosition((angle - this.startAngle) / 360 * this.axisLength);\r\n\t}\t\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"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 { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Axis } from \"./Axis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { AxisRendererCircular } from \"./AxisRendererCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularProperties extends IAxisFillProperties {\r\n\r\n\t/**\r\n\t * Inner radius. Relative ir absolute.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius. Relative or absolute.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tcornerRadius?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularEvents extends IAxisFillEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisFillCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisFillCircularAdapters extends IAxisFillAdapters, IAxisFillCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Provides fill element functionality for circular Axes.\r\n *\r\n * @see {@link IAxisFillCircularEvents} for a list of available events\r\n * @see {@link IAxisFillCircularAdapters} for a list of available Adapters\r\n * @todo Needs description\r\n */\r\nexport class AxisFillCircular extends AxisFill {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisFillCircularProperties}\r\n\t */\r\n\tpublic _properties!: IAxisFillCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisFillCircularAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisFillCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisFillCircularEvents}\r\n\t */\r\n\tpublic _events!: IAxisFillCircularEvents;\r\n\r\n\t/**\r\n\t * An SVG path, used to draw fill shape.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @type {string}\r\n\t */\r\n\tpublic fillPath: string;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tconstructor(axis: Axis) {\r\n\t\tsuper(axis);\r\n\r\n\t\tthis.className = \"AxisFillCircular\";\r\n\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = this.axis.renderer;\r\n\t\t\tthis.fillPath = renderer.getPositionRangePath(this.startPosition, this.endPosition, this.radius, $type.hasValue(this.innerRadius) ? this.innerRadius : renderer.innerRadius, this.cornerRadius);\r\n\t\t\tthis.path = this.fillPath;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t *\r\n\t * @param {number} value Corner radius (px)\r\n\t */\r\n\tpublic set cornerRadius(value: number) {\r\n\t\tthis.setPropertyValue(\"cornerRadius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Corner radius (px)\r\n\t */\r\n\tpublic get cornerRadius(): number {\r\n\t\treturn this.getPropertyValue(\"cornerRadius\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisFillCircular\"] = AxisFillCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisFillCircular.ts","/**\r\n * A module defining functionality for circular axis grid elements.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Grid, IGridProperties, IGridAdapters, IGridEvents } from \"./Grid\";\r\nimport { Axis, AxisItemLocation } from \"./Axis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[GridCircular]].\r\n */\r\nexport interface IGridCircularProperties extends IGridProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[GridCircular]].\r\n */\r\nexport interface IGridCircularEvents extends IGridEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GridCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGridCircularAdapters extends IGridAdapters, IGridCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a circular grid element for circular-type axis.\r\n *\r\n * @see {@link IGridCircularEvents} for a list of available events\r\n * @see {@link IGridCircularAdapters} for a list of available Adapters\r\n * @todo Review: container is better, as we'll be able to attach something to the GridCircular, also with 3d charts we might need some additional elements\r\n */\r\nexport class GridCircular extends Grid {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IGridCircularProperties}\r\n\t */\r\n\tpublic _properties!: IGridCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IGridCircularAdapters}\r\n\t */\r\n\tpublic _adapter!: IGridCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IGridCircularEvents}\r\n\t */\r\n\tpublic _events!: IGridCircularEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GridCircular\";\r\n\t\tthis.pixelPerfect = false;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GridCircular\"] = GridCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/GridCircular.ts","/**\r\n * Radar chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { RadarSeries } from \"../series/RadarSeries\";\r\nimport { RadarColumnSeries } from \"../series/RadarColumnSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { IComponentEvents } from \"../../core/Component\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { RadarCursor } from \"../cursors/RadarCursor\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarChartDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {RadarChart}\r\n\t */\r\n\tpublic _component!: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarChart]].\r\n */\r\nexport interface IRadarChartDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarChart]].\r\n */\r\nexport interface IRadarChartProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Radius of the Radar face. Absolute or relative.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Radar face. Percent value is relative to radius.\r\n\t *\r\n\t * @todo review desc\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarChart]].\r\n */\r\nexport interface IRadarChartEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarChartAdapters extends IXYChartAdapters, IRadarChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Radar chart.\r\n *\r\n * @see {@link IRadarChartEvents} for a list of available Events\r\n * @see {@link IRadarChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/radar-chart/} for documentation\r\n * @important\r\n */\r\nexport class RadarChart extends XYChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IRadarChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarChartProperties}\r\n\t */\r\n\tpublic _properties!: IRadarChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarChartEvents}\r\n\t */\r\n\tpublic _events!: IRadarChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {RadarSeries | RadarColumnSeries}\r\n\t */\r\n\tpublic _seriesType: RadarSeries | RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t *\r\n\t * @type {AxisRendererCircular}\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t *\r\n\t * @type {AxisRendererRadial}\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererRadial;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t *\r\n\t * @type {AxisRendererCircular}\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererCircular = AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t *\r\n\t * @type {AxisRendererRadial}\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererRadial = AxisRendererRadial;\r\n\r\n\t/**\r\n\t * [_cursor description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {RadarCursor}\r\n\t */\r\n\tpublic _cursor: RadarCursor;\r\n\r\n\t/**\r\n\t * A container that holds Radar visual elements.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic radarContainer: Container;\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _pixelInnerRadius: number;\r\n\r\n\r\n\t/**\r\n\t * used by cursor. We adjust innerradius if start and end angle are close to each other\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic innerRadiusModifyer: number = 1;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChart\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\t\tthis.innerRadius = 0;\r\n\r\n\t\tlet radarContainer = this.plotContainer.createChild(Container);\r\n\t\tradarContainer.shouldClone = false;\r\n\t\tradarContainer.layout = \"absolute\";\r\n\t\tradarContainer.align = \"center\";\r\n\t\tradarContainer.valign = \"middle\";\r\n\r\n\t\tthis.seriesContainer.parent = radarContainer;\r\n\t\tthis.radarContainer = radarContainer;\r\n\t\tthis.bulletsContainer.parent = radarContainer;\r\n\r\n\t\tthis._cursorContainer = radarContainer;\r\n\r\n\t\tthis._bulletMask = radarContainer.createChild(Circle);\r\n\t\tthis._bulletMask.shouldClone = false;\r\n\t\tthis._bulletMask.element = this.paper.add(\"path\");\r\n\t\tthis._bulletMask.opacity = 0;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Radar chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates Axis with required properties for this chart.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\tsuper.processAxis(axis);\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\t\trenderer.gridContainer.parent = renderer;\r\n\t\trenderer.breakContainer.parent = renderer;\r\n\t\taxis.parent = this.radarContainer;\r\n\t\trenderer.toBack();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all X axes after range change event.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tsuper.handleXAxisRangeChange();\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all Y axes after range change event.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tsuper.handleYAxisRangeChange();\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Cursor, of type suitable for RadarChart.\r\n\t *\r\n\t * @return {RadarCursor} Cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new RadarCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"RadarCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"RadarSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axes\r\n\t\t\t/*if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.xAxes[i].type = config.xAxes[i].type || \"AxisRendererCircular\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.yAxes[i].type = config.yAxes[i].type || \"AxisRendererRadial\";\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Does calculations before drawing the chart.\r\n\t */\r\n\tprotected beforeDraw(): void {\r\n\t\tsuper.beforeDraw();\r\n\r\n\t\tlet radarCont = this.radarContainer;\r\n\t\tlet plotContainer = this.plotContainer;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\tlet wr = plotContainer.innerWidth / rect.width;\r\n\t\tlet hr = plotContainer.innerHeight / rect.height;\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tlet value = innerRadius.value;\r\n\t\t\tlet mr = Math.min(wr, hr);\r\n\t\t\tvalue = Math.max(mr * value, mr - Math.min(plotContainer.innerHeight, plotContainer.innerWidth)) / mr;\r\n\t\t\tinnerRect = $math.getArcRect(this.startAngle, this.endAngle, value);\r\n\r\n\t\t\tthis.innerRadiusModifyer = value / innerRadius.value;\r\n\t\t\tinnerRadius = percent(value * 100);\r\n\t\t}\r\n\t\t// @todo handle this when innerRadius set in pixels (do it for pie also)\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(plotContainer.innerWidth / rect.width, plotContainer.innerHeight / rect.height);\r\n\r\n\t\tlet diameter = $utils.relativeRadiusToValue(this.radius, maxRadius) * 2 || 0;\r\n\t\tlet radius = diameter / 2;\r\n\t\tlet startAngle = this.startAngle;\r\n\t\tlet endAngle = this.endAngle;\r\n\r\n\t\tthis._pixelInnerRadius = $utils.relativeRadiusToValue(innerRadius, radius);\r\n\r\n\t\tthis._bulletMask.path = $path.arc(startAngle, endAngle - startAngle, radius, this._pixelInnerRadius);\r\n\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\tif(axis.renderer.useChartAngles){\r\n\t\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\t\taxis.renderer.endAngle = endAngle;\r\n\t\t\t}\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\taxis.renderer.endAngle = endAngle;\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\tlet cursor = this.cursor;\r\n\t\tif (cursor) {\r\n\t\t\tcursor.width = diameter;\r\n\t\t\tcursor.height = diameter;\r\n\t\t\tcursor.startAngle = startAngle;\r\n\t\t\tcursor.endAngle = endAngle;\r\n\t\t}\r\n\r\n\t\tthis.radarContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.radarContainer.validatePosition();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series, suitable for RadarChart.\r\n\t *\r\n\t * @return {RadarSeries} New Series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new RadarSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius in pixels\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn this._pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * If set in Percent, it will be relative to `radius`. (outer radius)\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\t//do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\t// do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarChart\"] = RadarChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/RadarChart.ts","/**\r\n * A module which defines functionality related to Category Axis Break.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { AxisBreak, IAxisBreakProperties, IAxisBreakAdapters, IAxisBreakEvents } from \"./AxisBreak\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CategoryAxisBreak]].\r\n */\r\nexport interface ICategoryAxisBreakProperties extends IAxisBreakProperties {\r\n\r\n\t/**\r\n\t * Category break starts on.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tstartCategory?: string;\r\n\r\n\t/**\r\n\t * Category break ends on.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tendCategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CategoryAxisBreak]].\r\n */\r\nexport interface ICategoryAxisBreakEvents extends IAxisBreakEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CategoryAxisBreak]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisBreakAdapters extends IAxisBreakAdapters, ICategoryAxisBreakProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Base class to define \"breaks\" in axes\r\n * @see {@link ICategoryAxisBreakEvents} for a list of available events\r\n * @see {@link ICategoryAxisBreakAdapters} for a list of available Adapters\r\n */\r\nexport class CategoryAxisBreak extends AxisBreak {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICategoryAxisBreakProperties}\r\n\t */\r\n\tpublic _properties!: ICategoryAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICategoryAxisBreakAdapters}\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICategoryAxisBreakEvents}\r\n\t */\r\n\tpublic _events!: ICategoryAxisBreakEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Axis this break is used for.\r\n\t *\r\n\t * @type {Axis}\r\n\t */\r\n\tpublic _axisType: CategoryAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisBreak\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Pixel position of the break's start.\r\n\t *\r\n\t * @return {number} Position (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get startPosition(): number {\r\n\t\tif (this.axis) {\r\n\t\t\treturn this.axis.indexToPosition(this.adjustedStartValue);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Pixel position of the break's end.\r\n\t *\r\n\t * @return {number} Position (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get endPosition(): number {\r\n\t\tif (this.axis) {\r\n\t\t\treturn this.axis.indexToPosition(this.adjustedEndValue);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A category break starts on.\r\n\t *\r\n\t * @param {string} value Start category\r\n\t */\r\n\tpublic set startCategory(value: string) {\r\n\t\tif (this.setPropertyValue(\"startCategory\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Start category\r\n\t */\r\n\tpublic get startCategory(): string {\r\n\t\treturn this.getPropertyValue(\"startCategory\");\r\n\t}\r\n\r\n\t/**\r\n\t * A category break ends on.\r\n\t *\r\n\t * @param {string} value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tif (this.setPropertyValue(\"endCategory\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.getPropertyValue(\"endCategory\");\r\n\t}\r\n\r\n\t/**\r\n\t * An index of start category.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set startValue(value: number) {\r\n\t\tif (this.setPropertyValue(\"startValue\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get startValue(): number {\r\n\t\tlet category: string = this.getPropertyValue(\"startCategory\");\r\n\t\tif (category) {\r\n\t\t\treturn this.axis.categoryToIndex(category);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.getPropertyValue(\"startValue\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * An index of end category or a end value.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set endValue(value: number) {\r\n\t\tif (this.setPropertyValue(\"endValue\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get endValue(): number {\r\n\t\tlet category: string = this.getPropertyValue(\"endCategory\");\r\n\t\tif (category) {\r\n\t\t\treturn this.axis.categoryToIndex(category);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.getPropertyValue(\"endValue\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxisBreak\"] = CategoryAxisBreak;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","/**\r\n * DateAxisBreak includes functionality to add breaks on a [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { ValueAxisBreak, IValueAxisBreakProperties, IValueAxisBreakAdapters, IValueAxisBreakEvents } from \"./ValueAxisBreak\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { DateAxis } from \"./DateAxis\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[DateAxisBreak]].\r\n */\r\nexport interface IDateAxisBreakProperties extends IValueAxisBreakProperties {\r\n\r\n\t/**\r\n\t * A `Date` break starts on.\r\n\t *\r\n\t * @type {Date}\r\n\t */\r\n\tstartDate?: Date;\r\n\r\n\t/**\r\n\t * A `Date` break ends on.\r\n\t *\r\n\t * @type {Date}\r\n\t */\r\n\tendDate?: Date;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxisBreak]]\r\n */\r\nexport interface IDateAxisBreakEvents extends IValueAxisBreakEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxisBreak]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisBreakAdapters extends IValueAxisBreakAdapters, IDateAxisBreakProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to define breaks for [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n *\r\n * @see {@link IDateAxisBreakEvents} for a list of available events\r\n * @see {@link IDateAxisBreakAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxisBreak extends ValueAxisBreak {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IDateAxisBreakProperties}\r\n\t */\r\n\tpublic _properties!: IDateAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDateAxisBreakAdapters}\r\n\t */\r\n\tpublic _adapter!: IDateAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IDateAxisBreakEvents}\r\n\t */\r\n\tpublic _events!: IDateAxisBreakEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Axis this break is used for.\r\n\t *\r\n\t * @type {ValueAxis}\r\n\t */\r\n\tpublic _axisType: DateAxis;\r\n\r\n\t/**\r\n\t * [gridInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @type {ITimeInterval}\r\n\t */\r\n\tpublic gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [gridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Date}\r\n\t * @todo Description\r\n\t */\r\n\tpublic gridDate: Date;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisBreak\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting date for the break.\r\n\t *\r\n\t * @param {Date} value Start date\r\n\t */\r\n\tpublic set startDate(value: Date) {\r\n\t\tif (this.setPropertyValue(\"startDate\", value)) {\r\n\t\t\tthis.startValue = value.getTime();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Start date\r\n\t */\r\n\tpublic get startDate(): Date {\r\n\t\treturn this.getPropertyValue(\"startDate\");\r\n\t}\r\n\r\n\t/**\r\n\t * Ending date for the break.\r\n\t *\r\n\t * @param {Date} value End date\r\n\t */\r\n\tpublic set endDate(value: Date) {\r\n\t\tif (this.setPropertyValue(\"endDate\", value)) {\r\n\t\t\tthis.endValue = value.getTime();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.getPropertyValue(\"endDate\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DateAxisBreak\"] = DateAxisBreak;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxisBreak.ts","/**\r\n * Cursor module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { getInteraction, IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IInteractionObjectEvents } from \"../../core/interaction/InteractionObjectEvents\";\r\nimport { IPoint, } from \"../../core/defs/IPoint\";\r\nimport { Chart } from \"../Chart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Cursor]].\r\n */\r\nexport interface ICursorProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[Cursor]].\r\n */\r\nexport interface ICursorEvents extends IContainerEvents {\r\n\r\n\t/**\r\n\t * Invoked when position of cursor changes.\r\n\t */\r\n\tcursorpositionchanged: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts selecting a range with a cursor, e.g. presses\r\n\t * down mouse button and drags the cursor.\r\n\t */\r\n\tselectstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when selection has ended, e.g. user releases mouse button.\r\n\t */\r\n\tselectended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts zooming using cursor.\r\n\t */\r\n\tzoomstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user clicked to start zooming/panning/selecting but haven't\r\n\t * finished the operation.\r\n\t */\r\n\tbehaviorcanceled: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done zooming using cursor.\r\n\t */\r\n\tzoomended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts panning using cursor.\r\n\t */\r\n\tpanstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done panning using cursor.\r\n\t */\r\n\tpanended: {};\r\n\r\n\t/**\r\n\t * Invoked when user is panning using cursor.\r\n\t */\r\n\tpanning: {};\r\n}\r\n\r\n/**\r\n * Defines adapters for [[Cursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICursorAdapters extends IContainerAdapters, ICursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Main Cursor class with common cursor functionality.\r\n *\r\n * Chart-specific cursors must extend this class.\r\n *\r\n * @see {@link ICursorEvents} for a list of available events\r\n * @see {@link ICursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class Cursor extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICursorProperties}\r\n\t */\r\n\tpublic _properties!: ICursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICursorAdapters}\r\n\t */\r\n\tpublic _adapter!: ICursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICursorEvents}\r\n\t */\r\n\tpublic _events!: ICursorEvents;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection started.\r\n\t *\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic downPoint: IPoint;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection ended.\r\n\t *\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic upPoint: IPoint;\r\n\r\n\t/**\r\n\t * Current cursor position during selection.\r\n\t *\r\n\t * @type {IPoint}\r\n\t * @todo Better description\r\n\t */\r\n\tpublic point: IPoint = { x: 0, y: 0 };\r\n\r\n\t/**\r\n\t * Relative horizontal position.\r\n\t *\r\n\t * @type {number}\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic xPosition: number;\r\n\r\n\t/**\r\n\t * Relative vertical position.\r\n\t *\r\n\t * @type {number}\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic yPosition: number;\r\n\r\n\t/**\r\n\t * [_usesSelection description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {boolean}\r\n\t */\r\n\tprotected _usesSelection: boolean;\r\n\r\n\t/**\r\n\t * What to do when user pressed down and drags cursor: zoom or select.\r\n\t *\r\n\t * @type {\"zoom\" | \"select\"}\r\n\t */\r\n\tprotected _generalBehavior: \"zoom\" | \"select\" | \"pan\"; // todo: draw\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t *\r\n\t * @type {Chart}\r\n\t */\r\n\tpublic _chart: Chart;\r\n\r\n\t/**\r\n\t * Specifies the rules when cursor needs to be moved or hidden.\r\n\t */\r\n\tprotected _stick: \"hard\" | \"soft\" | \"none\" = \"none\";\r\n\r\n\t/**\r\n\t * A screen point that cursor is \"stuck\" to.\r\n\t *\r\n\t * @type {IPoint}\r\n\t */\r\n\tprotected _stickPoint: IPoint;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"Cursor\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\t\tthis.shouldClone = false;\r\n\r\n\t\tthis.hide(0);\r\n\r\n\t\tthis.trackable = true;\r\n\t\tthis.clickable = true;\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\t// Add events on body to trigger down and up events (to start zooming or\r\n\t\t// selection)\r\n\t\tconst interaction = getInteraction();\r\n\t\tthis._disposers.push(interaction.body.events.on(\"down\", this.handleCursorDown, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"up\", this.handleCursorUp, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"track\", this.handleCursorMove, this));\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Handle pointer movement in document and update cursor position as needed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IInteractionObjectEvents[\"track\"]} event Event\r\n\t */\r\n\tpublic handleCursorMove(event: IInteractionObjectEvents[\"track\"]): IPoint {\r\n\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\t// We want to let zoom/pan continue even if cursor is outside chart area\r\n\t\t\tif (!this.isHidden || !this.isHiding) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tif (this._stick == \"hard\" && this._stickPoint) {\r\n\t\t\tlocal = this._stickPoint;\r\n\t\t}\r\n\r\n\t\tif (this._stick == \"soft\" && this._stickPoint) {\r\n\t\t\tif (!this.fitsToBounds(local)) {\r\n\t\t\t\tlocal = this._stickPoint;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\treturn local;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Hides actual SVG elements and handles hiding animations.\r\n\t *\r\n\t * @param {number} duration Fade out duration (ms)\r\n\t * @return {Animation} Fade out duration (ms)\r\n\t * @ignore\r\n\t */\r\n\tprotected hideReal(duration?: number): $type.Optional {\r\n\t\tif ((this._stick == \"hard\" || this._stick == \"soft\") && this._stickPoint) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn super.hideReal(duration);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * The second parameter has following options:\r\n\t *\r\n\t * `\"none\"` - placed cursor will only be there until mouse/touch moves, then\r\n\t * it either moves to a new place (if pointer over plot area) or is hidden.\r\n\t *\r\n\t * `\"soft\"` - cursor will stay in the place if mouse/touch is happening\r\n\t * outside chart, but will move to a new place whe plot area is hovered or\r\n\t * touched.\r\n\t *\r\n\t * `\"hard\"` - cursor will stay in place no matter what, until it is moved by\r\n\t * another `triggerMove()` call.\r\n\t *\r\n\t * @param {IPoint} point Point to place cursor at\r\n\t * @param {\"hard\" | \"soft\" | \"none\"} stick Level of cursor stickiness to the place\r\n\t */\r\n\tpublic triggerMove(point: IPoint, stick?: \"hard\" | \"soft\" | \"none\"): void {\r\n\r\n\t\tpoint.x = $math.round(point.x, 1);\r\n\t\tpoint.y = $math.round(point.y, 1);\r\n\r\n\t\tif (stick) {\r\n\t\t\tthis._stick = stick;\r\n\t\t}\r\n\r\n\t\tif (stick == \"hard\" || stick == \"soft\") {\r\n\t\t\tthis._stickPoint = point;\r\n\t\t}\r\n\r\n\t\tthis.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param {IPoint} point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tif (this.point.x != point.x || this.point.y != point.y) {\r\n\t\t\t\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\t\t\t\r\n\t\t\tif (this.visible) {\r\n\t\t\t\tthis.getPositions();\r\n\r\n\t\t\t\tthis.dispatch(\"cursorpositionchanged\"); // not good to dispatch later (check step count example)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param {IPoint} point Point of action\r\n\t */\r\n\tpublic triggerDown(point: IPoint) {\r\n\t\tthis.triggerDownReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param {IPoint} point Point of action\r\n\t */\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tswitch (this._generalBehavior) {\r\n\t\t\tcase \"zoom\":\r\n\t\t\t\tthis.dispatchImmediately(\"zoomstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"select\":\r\n\t\t\t\tthis.dispatchImmediately(\"selectstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pan\":\r\n\t\t\t\tthis.dispatchImmediately(\"panstarted\");\r\n\t\t\t\tgetInteraction().setGlobalStyle(MouseCursorStyle.grabbing);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param {IPoint} point Point of action\r\n\t */\r\n\tpublic triggerUp(point: IPoint) {\r\n\t\tthis.triggerUpReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param {IPoint} point Point of action\r\n\t */\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\r\n\t\tthis.updatePoint(this.upPoint);\r\n\t\tlet interaction = getInteraction();\r\n\t\tif ($math.getDistance(this.upPoint, this.downPoint) > 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}\r\n\t\telse {\r\n\t\t\tthis.dispatchImmediately(\"behaviorcanceled\");\r\n\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t}\r\n\r\n\t\tthis.downPoint = undefined;\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions(): void {\r\n\t\t// positions are used by axes or series\r\n\t\tthis.xPosition = this.point.x / this.innerWidth;\r\n\t\tthis.yPosition = 1 - this.point.y / this.innerHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer down event so we can start zoom or selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IInteractionEvents[\"down\"]} event Original event\r\n\t */\r\n\tpublic handleCursorDown(event: IInteractionEvents[\"down\"]): void {\r\n\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\t// We need to cancel the event to prevent gestures on touch devices\r\n\t\tif (event.event.cancelable && this.fitsToBounds(local)) {\r\n\t\t\tevent.event.preventDefault();\r\n\t\t}\r\n\r\n\t\t// Make this happen\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerDown(local);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer up event - finishes zoom or selection action.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IInteractionEvents[\"up\"]} event Original event\r\n\t */\r\n\tpublic handleCursorUp(event: IInteractionEvents[\"up\"]): void {\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerUp(local);\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to a [[Chart]] the cursor belongs to.\r\n\t *\r\n\t * @param {Chart} value Chart\r\n\t */\r\n\tpublic set chart(value: this[\"_chart\"]) {\r\n\t\tthis._chart = value;\r\n\t\tif ($type.hasValue((this._chart).plotContainer)) {\r\n\t\t\tgetInteraction().lockElement((this._chart).plotContainer.interactions);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Chart} Chart\r\n\t */\r\n\tpublic get chart(): this[\"_chart\"] {\r\n\t\treturn this._chart;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Cursor\"] = Cursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/Cursor.ts","/**\r\n * A module with functionality for buildin a scrollbar with an XY graph in it.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Scrollbar, IScrollbarProperties, IScrollbarAdapters, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DesaturateFilter } from \"../../core/rendering/filters/DesaturateFilter\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarProperties extends IScrollbarProperties { }\r\n\r\n/**\r\n * Defines events for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarEvents extends IScrollbarEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChartScrollbar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartScrollbarAdapters extends IScrollbarAdapters, IXYChartScrollbarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A special version of the Scrollbar that has an XY chart in it.\r\n *\r\n * Used mainly as an advanced scrollbar with a preview for other XY charts.\r\n *\r\n * However, can be used as standalone element.\r\n *\r\n * @see {@link IXYChartScrollbarEvents} for a list of available events\r\n * @see {@link IXYChartScrollbarAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class XYChartScrollbar extends Scrollbar {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYChartScrollbarProperties}\r\n\t */\r\n\tpublic _properties!: IXYChartScrollbarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChartScrollbarAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChartScrollbarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChartScrollbarEvents}\r\n\t */\r\n\tpublic _events!: IXYChartScrollbarEvents;\r\n\r\n\t/**\r\n\t * An [[XYSeries]] used to draw a graph on the Scrollbar.\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tprotected _series: List;\r\n\r\n\t/**\r\n\t * A chart element Scrollbar is for.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart instance that shows mini-chart within Scrollbar.\r\n\t *\r\n\t * @type {XYChart}\r\n\t */\r\n\tprotected _scrollbarChart: XYChart;\r\n\r\n\t/**\r\n\t * [_unselectedOverlay description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {Sprite}\r\n\t */\r\n\tprotected _unselectedOverlay: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartScrollbar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\r\n\t\tlet scrollbarChart: XYChart = this.createChild(XYChart);\r\n\t\tscrollbarChart.shouldClone = false;\r\n\t\tscrollbarChart.margin(0, 0, 0, 0);\r\n\t\tscrollbarChart.padding(0, 0, 0, 0);\r\n\t\tscrollbarChart.interactionsEnabled = false;\r\n\r\n\t\tthis._scrollbarChart = scrollbarChart;\r\n\t\tthis._disposers.push(this._scrollbarChart);\r\n\r\n\t\tthis.minHeight = 60;\r\n\t\tthis.minWidth = 60;\r\n\r\n\t\tlet unselectedOverlay: Sprite = this.createChild(Sprite);\r\n\t\tunselectedOverlay.shouldClone = false;\r\n\t\tunselectedOverlay.setElement(this.paper.add(\"path\"));\r\n\t\tunselectedOverlay.fill = interfaceColors.getFor(\"background\");\r\n\t\tunselectedOverlay.fillOpacity = 0.8;\r\n\t\tunselectedOverlay.interactionsEnabled = false;\r\n\t\tunselectedOverlay.isMeasured = false;\r\n\t\tunselectedOverlay.toBack();\r\n\t\tthis._unselectedOverlay = unselectedOverlay;\r\n\t\tthis._disposers.push(this._unselectedOverlay);\r\n\r\n\t\tscrollbarChart.toBack();\r\n\r\n\t\tthis.background.cornerRadius(0, 0, 0, 0);\r\n\r\n\t\tlet thumbBackground = this.thumb.background;\r\n\t\tthumbBackground.cornerRadius(0, 0, 0, 0);\r\n\t\tthumbBackground.fillOpacity = 0;\r\n\t\tthumbBackground.fill = interfaceColors.getFor(\"background\");\r\n\r\n\t\tlet hoverState = thumbBackground.states.getKey(\"hover\");\r\n\t\tif (hoverState) {\r\n\t\t\thoverState.properties.fillOpacity = 0.2;\r\n\t\t}\r\n\r\n\t\tlet downState = thumbBackground.states.getKey(\"down\");\r\n\t\tif (downState) {\r\n\t\t\tdownState.properties.fillOpacity = 0.4;\r\n\t\t}\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A list of series that are used to draw graph(s) on the scrollbar.\r\n\t *\r\n\t * @readonly\r\n\t * @return {List} Series\r\n\t */\r\n\tpublic get series(): List {\r\n\t\tif (!this._series) {\r\n\t\t\tthis._series = new List();\r\n\t\t\tthis._disposers.push(this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false));\r\n\t\t\tthis._disposers.push(this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false));\r\n\t\t}\r\n\t\treturn this._series;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new series when they are pushed into a `series` list.\r\n\t *\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tprotected handleSeriesAdded(event: IListEvents[\"inserted\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.newValue;\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\tscrollbarChart.zoomOutButton.disabled = true;\r\n\r\n\t\tthis.chart = sourceSeries.chart;\r\n\r\n\t\tlet addXAxis: boolean = true;\r\n\t\tlet addYAxis: boolean = true;\r\n\r\n\t\t// check if we haven't added clone of x or y axis before\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series != sourceSeries) {\r\n\t\t\t\tif (series.xAxis == sourceSeries.xAxis) {\r\n\t\t\t\t\taddXAxis = false;\r\n\t\t\t\t}\r\n\t\t\t\tif (series.yAxis == sourceSeries.yAxis) {\r\n\t\t\t\t\taddYAxis = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet series: XYSeries = sourceSeries.clone();\r\n\r\n\t\tif (addXAxis) {\r\n\r\n\t\t\tlet xAxis = sourceSeries.xAxis.clone();\r\n\t\t\tscrollbarChart.xAxes.moveValue(xAxis);\r\n\t\t\txAxis.title.disabled = true;\r\n\t\t\txAxis.rangeChangeDuration = 0;\r\n\t\t\txAxis.id = sourceSeries.uid;\r\n\t\t\txAxis.title.disabled = true;\r\n\r\n\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.xAxis = xAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\r\n\t\tif (addYAxis) {\r\n\t\t\tlet yAxis: Axis = sourceSeries.yAxis.clone();\r\n\t\t\tscrollbarChart.yAxes.moveValue(yAxis);\r\n\t\t\tyAxis.title.disabled = true;\r\n\t\t\tyAxis.rangeChangeDuration = 0;\r\n\r\n\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.grid.template.stroke = interfaceColors.getFor(\"background\");\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.yAxis = yAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\t\tseries.rangeChangeDuration = 0;\r\n\t\tseries.interpolationDuration = 0;\r\n\t\tseries.defaultState.transitionDuration = 0;\r\n\t\tseries.showOnInit = false;\r\n\r\n\t\tthis._disposers.push(series.events.on(\"validated\", this.zoomOutAxes, this, false));\r\n\r\n\t\t// data might be set drectly on series\r\n\t\tthis._disposers.push(sourceSeries.events.on(\"datavalidated\", () => {\r\n\t\t\tif (series.data != sourceSeries.data) { // data setter doesn't check this\r\n\t\t\t\tseries.data = sourceSeries.data;\r\n\t\t\t}\r\n\t\t}, undefined, false));\r\n\t\tseries.defaultState.properties.visible = true;\r\n\r\n\t\tseries.filters.push(new DesaturateFilter());\r\n\t\tscrollbarChart.series.push(series);\r\n\r\n\t\tthis.updateByOrientation();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateByOrientation() {\r\n\t\t$iter.each(this._scrollbarChart.xAxes.iterator(), (xAxis) => {\r\n\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$iter.each(this._scrollbarChart.yAxes.iterator(), (yAxis) => {\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Cleans up after series are removed from Scrollbar.\r\n\t *\r\n\t * @param {IListEvents[\"removed\"]} event Event\r\n\t */\r\n\tprotected handleSeriesRemoved(event: IListEvents[\"removed\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.oldValue;\r\n\t\tsourceSeries.events.off(\"validated\", this.zoomOutAxes, this);\r\n\t}\r\n\r\n\t/**\r\n\t * A chart element that is used to display graphs in the Scrollbar.\r\n\t *\r\n\t * This is not the same as `chart`. It's a totally independent instance of\r\n\t * [[XYChart]] with separate config, series, etc.\r\n\t *\r\n\t * It can be configured just like any other [[XYChart]].\r\n\t *\r\n\t * @readonly\r\n\t * @return {XYChart} Scrollbar's internal chart\r\n\t */\r\n\tpublic get scrollbarChart(): XYChart {\r\n\t\treturn this._scrollbarChart;\r\n\t}\r\n\r\n\t/**\r\n\t * A chart that Scrollbar belongs to.\r\n\t *\r\n\t * @param {XYChart} chart Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart) {\r\n\t\tif (this._chart.get() !== chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"datavalidated\", this.handleDataChanged, this, false));\r\n\t\t\tthis.handleDataChanged();\t\t\t\r\n\t\t\tthis._scrollbarChart.dataProvider = chart; // this makes scrollbar chart do not validate data untill charts' data is validated\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {XYChart} Chart\r\n\t */\r\n\tpublic get chart(): XYChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Scrollbar's internal chart's data when the main chart's data\r\n\t * changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataChanged() {\r\n\t\t//@todo: what if raw data changed?\r\n\t\tif (this.chart.data != this.scrollbarChart.data) {\r\n\t\t\tthis.scrollbarChart.data = this.chart.data;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms out all axes on the internal chart.\r\n\t */\r\n\tprotected zoomOutAxes() {\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\t$iter.each(scrollbarChart.xAxes.iterator(), (x) => {\r\n\t\t\tx.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t\t$iter.each(scrollbarChart.yAxes.iterator(), (y) => {\r\n\t\t\ty.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates scrollbar thumb.\r\n\t */\r\n\tprotected updateThumb() {\r\n\t\tsuper.updateThumb();\r\n\t\tif (this._unselectedOverlay) {\r\n\t\t\tlet thumb = this.thumb;\r\n\t\t\tlet x: number = thumb.pixelX || 0;\r\n\t\t\tlet y: number = thumb.pixelY || 0;\r\n\t\t\tlet w: number = thumb.pixelWidth || 0;\r\n\t\t\tlet h: number = thumb.pixelHeight || 0;\r\n\r\n\t\t\tlet path: string = \"\";\r\n\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: -1,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: x,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: x + w,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: (this.pixelWidth || 0) - x - w,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: y\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: y + h,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: (this.pixelHeight || 0) - y - h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._unselectedOverlay.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tlet series = config.series[i];\r\n\t\t\t\t\tif ($type.hasValue(series) && $type.isString(series)) {\r\n\t\t\t\t\t\tif (this.map.hasKey(series)) {\r\n\t\t\t\t\t\t\tconfig.series[i] = this.map.getKey(series);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthrow Error(\"XYChartScrollbar error: Series with id `\" + series + \"` does not exist.\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChartScrollbar\"] = XYChartScrollbar;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","/**\r\n * Radar series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {RadarSeries}\r\n\t */\r\n\tpublic _component!: RadarSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeriesDataItem\";\r\n\r\n\t\tthis.setLocation(\"dateX\", 0, 0);\r\n\t\tthis.setLocation(\"dateY\", 0, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesProperties extends ILineSeriesProperties {\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tconnectEnds?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarSeriesAdapters extends ILineSeriesAdapters, IRadarSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a radar graph.\r\n *\r\n * @see {@link IRadarSeriesEvents} for a list of available Events\r\n * @see {@link IRadarSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IRadarSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IRadarSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarSeriesEvents}\r\n\t */\r\n\tpublic _events!: IRadarSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {RadarSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: RadarSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {RadarChart}\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeries\";\r\n\t\tthis.connectEnds = true;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {RadarSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new RadarSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {RadarSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\t\t\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\t//\t\tangle = $math.fitToRange(angle, startAngle, endAngle);\r\n\t\tif (angle < startAngle || angle > endAngle) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.locations[xField], dataItem.locations[yField]);\r\n\t\tif (point) {\r\n\t\t\tpoints.push(point);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return {string} SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [drawSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {LineSeriesSegment} segment [description]\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {IPoint[]} closePoints [description]\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet axis: Axis = this.yAxis;\r\n\t\tlet renderer: AxisRendererRadial = axis.renderer;\r\n\r\n\t\tif (this.connectEnds && Math.abs(renderer.endAngle - renderer.startAngle) == 360) {\r\n\t\t\t// adds one point to the beginning of closePoints array, if needed\r\n\t\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\t\tthis.stacked) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t\tif (closePoints.length > 0) {\r\n\t\t\t\t\tclosePoints.unshift(closePoints[closePoints.length - 1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsuper.drawSegment(segment, points, closePoints);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Connect?\r\n\t */\r\n\tpublic set connectEnds(value: boolean) {\r\n\t\tthis.setPropertyValue(\"connectEnds\", value, true);\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Connect?\r\n\t */\r\n\tpublic get connectEnds(): boolean {\r\n\t\treturn this.getPropertyValue(\"connectEnds\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarSeries\"] = RadarSeries;\r\nregistry.registeredClasses[\"RadarSeriesDataItem\"] = RadarSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarSeries.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { XYCursor, IXYCursorAdapters, IXYCursorEvents, IXYCursorProperties } from \"./XYCursor\";\r\nimport { IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorProperties extends IXYCursorProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle: number;\r\n\r\n\t/**\r\n\t * Ending angle of the cursor's radial line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tendAngle: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorEvents extends IXYCursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarCursorAdapters extends IXYCursorAdapters, IRadarCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Cursor for [[RadarChart]].\r\n *\r\n * @see {@link IRadarCursorEvents} for a list of available events\r\n * @see {@link IRadarCursorAdapters} for a list of available Adapters\r\n */\r\nexport class RadarCursor extends XYCursor {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t * @type {IRadarCursorProperties}\r\n\t */\r\n\tpublic _properties!: IRadarCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t * @type {IRadarCursorAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarCursorEvents}\r\n\t */\r\n\tpublic _events!: IRadarCursorEvents;\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t *\r\n\t * @type {Chart}\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\r\n\tprotected _prevAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarCursor\";\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint} point Point to check\r\n\t * @return {boolean} Fits within container?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\tlet radius = $math.getDistance(point);\r\n\t\tlet angle = $math.getAngle(point);\r\n\r\n\t\t//if(!$math.isAngleInRange(angle, this.startAngle, this.endAngle)){\r\n\t\t\t//return false;\r\n\t\t//}\r\n\t\tif (radius < this.truePixelRadius + 1 && radius > this.pixelInnerRadius - 1) { // ok to add/remove some\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t *\r\n\t * @param {number} value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the cursor's radial line.\r\n\t *\r\n\t * @param {number} value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\tprotected triggerMoveReal(point:IPoint) {\r\n\r\n\t\tif (!this.xAxis || (this.xAxis && (!this.xAxis.cursorTooltipEnabled || this.xAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineX(this.point);\r\n\t\t}\r\n\t\tif (!this.yAxis || (this.yAxis && (!this.yAxis.cursorTooltipEnabled || this.yAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineY(this.point);\r\n\t\t}\r\n\r\n\t\tthis.updateSelection();\r\n\t\tsuper.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the horizontal (circular) cursor's line.\r\n\t *\r\n\t * @param {IPoint} point New target point\r\n\t */\r\n\tprotected updateLineX(point: IPoint) {\r\n\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\tif (radius > 0 && $type.isNumber(startAngle) && $type.isNumber(endAngle) && $type.isNumber(innerRadius)) {\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\t\t\tlet path: string;\r\n\r\n\t\t\tif (this.lineX && this.lineX.visible) {\r\n\r\n\t\t\t\tthis.lineX.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t// fill\r\n\t\t\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\r\n\t\t\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet fillStartAngle: number = $math.fitAngleToRange($math.getAngle(startPoint), startAngle, endAngle);\r\n\t\t\t\t\t\tlet fillEndAngle: number = $math.fitAngleToRange($math.getAngle(endPoint), startAngle, endAngle);\r\n\r\n\t\t\t\t\t\tlet arc: number = fillEndAngle - fillStartAngle;\r\n\r\n\t\t\t\t\t\t// clockwise\r\n\t\t\t\t\t\t// this is needed, normalizeAngle doesn't solve it\r\n\t\t\t\t\t\tif (startAngle < endAngle) {\r\n\t\t\t\t\t\t\tif (arc < 0) {\r\n\t\t\t\t\t\t\t\tarc += 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// ccw\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\t\t\t\tarc -= 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tangle -= arc / 2;\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle, arc, radius)\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: innerRadius * $math.cos(angle + arc), y: innerRadius * $math.sin(angle + arc) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle + arc, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// line\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineX.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the vertical (radial) cursor's line.\r\n\t *\r\n\t * @param {IPoint} point New target point\r\n\t */\r\n\tprotected updateLineY(point: IPoint) {\r\n\t\tif (this.lineY && this.lineY.visible) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\t\t\tlet truePixelRadius = this.truePixelRadius;\r\n\t\t\tlet radius = $math.fitToRange($math.getDistance(point), 0, this.truePixelRadius);\r\n\t\t\tif ($type.isNumber(radius) && $type.isNumber(startAngle)) {\r\n\t\t\t\tthis.lineY.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\tlet path: string;\r\n\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\t\t\t// fill\r\n\t\t\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet innerRadius: number = $math.fitToRange($math.getDistance(startPoint), 0, truePixelRadius);\r\n\t\t\t\t\t\tradius = $math.fitToRange($math.getDistance(endPoint), 0, truePixelRadius);\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(endAngle), y: innerRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineY.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet truePixelRadius: number = this.truePixelRadius;\r\n\t\t\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\t\t\tlet startAngle: number = Math.min(this.startAngle, this.endAngle);\r\n\t\t\t\tlet endAngle: number = Math.max(this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), startAngle, endAngle);\r\n\t\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\r\n\t\t\t\tlet downRadius: number = $math.getDistance(downPoint);\r\n\t\t\t\tif (downRadius < truePixelRadius) {\r\n\r\n\t\t\t\t\tlet currentRadius = $math.fitToRange($math.getDistance(point), 0, truePixelRadius);\r\n\r\n\t\t\t\t\tthis._prevAngle = angle;\r\n\r\n\t\t\t\t\tlet path: string = $path.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t\tlet downSin: number = $math.sin(downAngle);\r\n\t\t\t\t\tlet downCos: number = $math.cos(downAngle);\r\n\r\n\t\t\t\t\tlet sin: number = $math.sin(angle);\r\n\t\t\t\t\tlet cos: number = $math.cos(angle);\r\n\r\n\t\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\") {\r\n\t\t\t\t\t\tpath += $path.lineTo({ x: radius * downCos, y: radius * downSin }) + $path.arcTo(downAngle, angle - downAngle, radius) + $path.lineTo({ x: innerRadius * cos, y: innerRadius * sin }) + $path.arcTo(angle, downAngle - angle, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomY\" || behavior == \"selectY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(startAngle), y: currentRadius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(endAngle), y: downRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, startAngle - endAngle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomXY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(downAngle), y: currentRadius * $math.sin(downAngle) }) + $path.arcTo(downAngle, angle - downAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(angle), y: downRadius * $math.sin(angle) }) + $path.arcTo(angle, downAngle - angle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.selection.path = path;\r\n\t\t\t\t}\r\n\t\t\t\tthis.selection.moveTo({ x: 0, y: 0 });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions() {\r\n\t\t// positions are used by axes or series\r\n\t\tlet chart: RadarChart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\tlet innerRadius = this.pixelInnerRadius;\r\n\t\t\tlet radius: number = this.truePixelRadius - innerRadius;\r\n\r\n\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(this.point), startAngle, endAngle);\r\n\t\t\tlet xPosition = ((angle - startAngle) / (endAngle - startAngle));\r\n\t\t\tthis.xPosition = xPosition;\r\n\r\n\t\t\tthis.yPosition = $math.fitToRange(($math.getDistance(this.point) - innerRadius) / radius, 0, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when it's triggered.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes horizontal position.\r\n\t *\r\n\t * @param {ISpriteEvents[\"positionchanged\"]} event Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.xAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\t\tthis.updateLineX($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes vertical position.\r\n\t *\r\n\t * @todo Description\r\n\t * @param {ISpriteEvents[\"positionchanged\"]} event Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.yAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\t\tthis.updateLineY($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * needs to be overriden\r\n\t * @ignore\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges(): void {\r\n\t\tlet downPoint = this.downPoint;\r\n\t\tif (downPoint) {\r\n\t\t\tlet upPoint: IPoint = this.upPoint;\r\n\r\n\t\t\tlet chart: RadarChart = this.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), this.startAngle, this.endAngle);\r\n\t\t\t\tlet upAngle: number = $math.fitAngleToRange($math.getAngle(upPoint), this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downRadius = $math.fitToRange($math.getDistance(downPoint), 0, radius);\r\n\t\t\t\tlet upRadius = $math.fitToRange($math.getDistance(upPoint), 0, radius);\r\n\r\n\t\t\t\tlet startX: number = 0;\r\n\t\t\t\tlet endX: number = 1;\r\n\r\n\t\t\t\tlet startY: number = 0;\r\n\t\t\t\tlet endY: number = 1;\r\n\r\n\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\t\t\t\t\tstartX = $math.round((downAngle - startAngle) / arc, 5);\r\n\t\t\t\t\tendX = $math.round((upAngle - startAngle) / arc, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (behavior == \"zoomY\" || behavior == \"selectY\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tstartY = $math.round(downRadius / radius, 5);\r\n\t\t\t\t\tendY = $math.round(upRadius / radius, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xRange = { start: Math.min(startX, endX), end: Math.max(startX, endX) };\r\n\t\t\t\tthis.yRange = { start: Math.min(startY, endY), end: Math.max(startY, endY) };\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when `updateSize`\r\n\t * is triggered.\r\n\t *\r\n\t * RadarCursor is quite complicated and needs own sizing logic.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void { }\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular line in pixels.\r\n\t *\r\n\t * @return {number} Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.truePixelRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [truePixelRadius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @return {number} Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get truePixelRadius(): number {\r\n\t\treturn $utils.relativeToValue(percent(100), $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular line in pixels.\r\n\t *\r\n\t * @return {number} Inner radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRadius = percent(100 * innerRadius.value * this.chart.innerRadiusModifyer);\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeRadiusToValue(innerRadius, this.truePixelRadius) || 0;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\t// overriding xy method\r\n\t\treturn point;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarCursor\"] = RadarCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/RadarCursor.ts","/**\r\n * Module, defining Axis Renderer for radial axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"./AxisRendererY\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { WavedCircle } from \"../../core/elements/WavedCircle\";\r\nimport { SortedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { PointerOrientation } from \"../../core/elements/Tooltip\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialProperties extends IAxisRendererYProperties {\r\n\r\n\t/**\r\n\t * Start angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * A grid type to display: \"circles\" or \"polygons\".\r\n\t *\r\n\t * @default \"circles\"\r\n\t * @type {\"circles\" | \"polygons\"}\r\n\t */\r\n\tgridType?: \"circles\" | \"polygons\"; //@todo: move it to GridRadial?\r\n\r\n\t/**\r\n\t * An angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\taxisAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * Outer radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererRadialAdapters extends IAxisRendererYAdapters, IAxisRendererRadialProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for radial axis.\r\n */\r\nexport class AxisRendererRadial extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {AxisRendererProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererRadialProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {AxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererRadialAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererRadialEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererRadialEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererRadial\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\t\tthis.minGridDistance = 30;\r\n\t\tthis.gridType = \"circles\";\r\n\t\tthis.axisAngle = -90;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.labels.template.horizontalCenter = \"middle\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return {number} Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn this.pixelRadius - this.pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return {number} Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false)\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return {number} Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {RadarChart} value Chart\r\n\t */\r\n\tpublic set chart(chart: RadarChart) {\r\n\t\tthis._chart.set(chart, null);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {RadarChart} Chart\r\n\t */\r\n\tpublic get chart(): RadarChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {IPoint} Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(position), 0, Infinity);\r\n\t\treturn { x: radius * $math.cos(this.axisAngle), y: radius * $math.sin(this.axisAngle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tthis.line.path = $path.moveTo({ x: this.pixelInnerRadius * $math.cos(this.axisAngle), y: this.pixelInnerRadius * $math.sin(this.axisAngle) }) + $path.lineTo({ x: this.pixelRadius * $math.cos(this.axisAngle), y: this.pixelRadius * $math.sin(this.axisAngle) });\r\n\r\n\t\tlet title = this.axis.title;\r\n\t\ttitle.valign = \"none\";\r\n\t\ttitle.horizontalCenter = \"middle\";\r\n\t\ttitle.verticalCenter = \"bottom\";\r\n\t\ttitle.y = - this.axisLength / 2;\r\n\t\tlet rotation: number = 90;\r\n\t\tif (this.opposite) {\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttitle.rotation = rotation;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Grid} grid Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tlet path: string;\r\n\t\tlet radius: number = $math.getDistance(point);\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tif ($type.isNumber(radius) && grid.element) {\r\n\t\t\tlet chart = this.chart;\r\n\t\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\t\tlet count = chart.dataItems.length;\r\n\t\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t\t// polygons are only possible if x axis is present\r\n\t\t\t// @todo: review this\r\n\t\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius, radius);\r\n\t\t\t}\r\n\t\t\tgrid.path = path;\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisLabel} label Label element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?:number) {\r\n\r\n\t\tif(!$type.hasValue(location)){\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tthis.positionItem(label, point);\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\t// @todo? zero grid for radar chart, is it needed?\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint} point Point coordinates\r\n\t * @return {boolean} Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param {number} value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tthis.setPropertyValue(\"startAngle\", value);\r\n\t\tthis.invalidateAxisItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param {number} value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tthis.setPropertyValue(\"endAngle\", value);\r\n\t\tthis.invalidateAxisItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @param {number} value Axis angle\r\n\t */\r\n\tpublic set axisAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"axisAngle\", $math.normalizeAngle(value));\r\n\t\tthis.invalidateAxisItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Axis angle\r\n\t */\r\n\tpublic get axisAngle(): number {\r\n\t\treturn this.getPropertyValue(\"axisAngle\");\r\n\t\t//return $math.fitToRange(this.getPropertyValue(\"axisAngle\"), this.startAngle, this.endAngle); // no good, as less flexible\r\n\t}\r\n\r\n\t// polygons grid type is only possible under these conditions: xAxis is available and it is CategoryAxis, also at least one series should be added to a chart\r\n\r\n\t/**\r\n\t * Grid type for radial axis.\r\n\t *\r\n\t * A grid on radia axis can either be perfect circles (\"circles\"), or\r\n\t * straight lines (\"polygons\").\r\n\t *\r\n\t * @default \"circles\"\r\n\t * @param {\"circles\" | \"polygons\"} value Grid type\r\n\t */\r\n\tpublic set gridType(value: \"circles\" | \"polygons\") {\r\n\t\tthis.setPropertyValue(\"gridType\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @type {\"circles\" | \"polygons\"} Grid type\r\n\t */\r\n\tpublic get gridType(): \"circles\" | \"polygons\" {\r\n\t\tlet axis: Axis = this.chart.xAxes.getIndex(0);\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\treturn this.getPropertyValue(\"gridType\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn \"circles\";\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {number} startPosition Starting position\r\n\t * @param {number} endPosition End position\r\n\t * @return {string} SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number): string {\r\n\t\tlet pixelInnerRadius = this.pixelInnerRadius;\r\n\t\tlet pixelRadius = this.axisLength + pixelInnerRadius;\r\n\t\tlet innerRadius: number = $math.fitToRange(this.positionToCoordinate(startPosition), pixelInnerRadius, pixelRadius);\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(endPosition), pixelInnerRadius, pixelRadius);\r\n\r\n\t\t//let angleCount: number = this.angleCount;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\tlet path: string;\r\n\r\n\t\tlet chart = this.chart;\r\n\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\tlet count = chart.dataItems.length;\r\n\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t// polygons are only possible if x axis is present\r\n\t\t// @todo: review this\r\n\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\r\n\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\r\n\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\r\n\t\t\tfor (let i = count - 1; i >= 0; i--) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpath = $path.arc(startAngle, arc, radius, innerRadius);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions an axis break element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisBreak} axisBreak Break element\r\n\t */\r\n\tpublic updateBreakElement(axisBreak: AxisBreak) {\r\n\t\t// @todo: someday we might need axis break when gridType is polygons\r\n\r\n\t\tlet startLine: WavedCircle = axisBreak.startLine;\r\n\t\tlet endLine: WavedCircle = axisBreak.endLine;\r\n\t\tlet fillShape: WavedCircle = axisBreak.fillShape;\r\n\r\n\t\tlet startPoint: IPoint = axisBreak.startPoint;\r\n\t\tlet endPoint: IPoint = axisBreak.endPoint;\r\n\r\n\t\tstartLine.radius = Math.abs(startPoint.y);\r\n\t\tendLine.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.innerRadius = Math.abs(startPoint.y);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates visual elements for and axis break.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisBreak} axisBreak Axis break\r\n\t */\r\n\tpublic createBreakSprites(axisBreak: AxisBreak): void {\r\n\t\taxisBreak.startLine = new WavedCircle();\r\n\t\taxisBreak.endLine = new WavedCircle();\r\n\t\taxisBreak.fillShape = new WavedCircle();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates some of the Axis tooltip's visual properties, related to\r\n\t * rendering of the Axis.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateTooltip(): void {\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tif (axis) {\r\n\r\n\t\t\tlet bigNum: number = 4000;\r\n\t\t\tlet bbx: number = -4000;\r\n\t\t\tlet bby: number = -4000;\r\n\t\t\tlet bbw: number = bigNum * 2;\r\n\t\t\tlet bbh: number = bigNum * 2;\r\n\t\t\tlet axisAngle: number = this.axisAngle;\r\n\t\t\tif (axisAngle < 0) {\r\n\t\t\t\taxisAngle += 360;\r\n\t\t\t}\r\n\t\t\tlet tooltipOrientation: PointerOrientation = \"vertical\";\r\n\t\t\tif ((axisAngle > 45 && axisAngle < 135) || (axisAngle > 225 && axisAngle < 315)) {\r\n\t\t\t\ttooltipOrientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\tthis.axis.updateTooltip(tooltipOrientation, { x: bbx, y: bby, width: bbw, height: bbh });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisTick} tick Tick element\r\n\t * @param {number} position Position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number): void {\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (tick.element) {\r\n\t\t\tlet angle: number = $math.normalizeAngle(this.axisAngle + 90);\r\n\t\t\tif (angle / 90 != Math.round(angle / 90)) {\r\n\t\t\t\ttick.pixelPerfect = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttick.pixelPerfect = true;\r\n\t\t\t}\r\n\t\t\tlet tickLength = -tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength *= -1;\r\n\t\t\t}\r\n\t\t\ttick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: tickLength * $math.cos(angle), y: tickLength * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.positionItem(tick, point);\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a position on the axis to a coordinate in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {number} Coordinate (px)\r\n\t */\r\n\tpublic positionToCoordinate(position: number): number {\r\n\t\tlet coordinate: number;\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tlet axisFullLength = axis.axisFullLength;\r\n\t\tlet innerRadius = this.pixelInnerRadius;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tcoordinate = (axis.end - position) * axisFullLength + innerRadius;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcoordinate = (position - axis.start) * axisFullLength + innerRadius;\r\n\t\t}\r\n\r\n\t\treturn $math.round(coordinate, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param {IPoint} point Point\r\n\t * @return {number} Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\t\t\r\n\t\tlet coordinate = ($math.getDistance(point) - this.pixelInnerRadius);\r\n\t\treturn this.coordinateToPosition(coordinate);\r\n\t}\t\t\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererRadial\"] = AxisRendererRadial;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","/**\r\n * Functionality for drawing simple ClockHands\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { Trapezoid } from \"../../core/elements/Trapezoid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { GaugeChart } from \"../types/GaugeChart\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ClockHand]].\r\n */\r\nexport interface IClockHandProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(100)\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's tip.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\tendWidth: number;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's base.\r\n\t *\r\n\t * @default 5\r\n\t * @type {number}\r\n\t */\r\n\tstartWidth: number;\r\n\r\n\t/**\r\n\t * rotation direction\r\n\t * @type {\"any\" | \"clockWise\" | \"CounterClockWise\"}\r\n\t * @default \"any\"\r\n\t */\r\n\trotationDirection: \"any\" | \"clockWise\" | \"CounterClockWise\";\r\n}\r\n\r\n/**\r\n * Defines events for [[ClockHand]].\r\n */\r\nexport interface IClockHandEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ClockHand]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IClockHandAdapters extends IContainerAdapters, IClockHandProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * ClockHand class is capable of drawing a simple pointy shape with optionally\r\n * rounderd corners and an icon.\r\n *\r\n * @see {@link IClockHandEvents} for a list of available events\r\n * @see {@link IClockHandAdapters} for a list of available Adapters\r\n * @todo Improve\r\n * @important\r\n */\r\nexport class ClockHand extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IClockHandProperties}\r\n\t */\r\n\tpublic _properties!: IClockHandProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IClockHandAdapters}\r\n\t */\r\n\tpublic _adapter!: IClockHandAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IClockHandEvents}\r\n\t */\r\n\tpublic _events!: IClockHandEvents;\r\n\r\n\t/**\r\n\t * A circle element used as hand's base.\r\n\t *\r\n\t * @type {Circle}\r\n\t */\r\n\tprotected _pin: Circle;\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t *\r\n\t * @type {Trapezoid}\r\n\t */\r\n\tprotected _hand: Trapezoid;\r\n\r\n\t/**\r\n\t * An Axis hand is related to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _axis: MutableValueDisposer = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Hand's current value.\r\n\t *\r\n\t * @type {any}\r\n\t */\r\n\tprotected _value: any;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ClockHand\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tthis.stroke = this.fill;\r\n\r\n\t\tlet pin: Circle = new Circle();\r\n\t\tpin.radius = 5;\r\n\t\tthis.pin = pin;\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.startWidth = 5;\r\n\t\tthis.endWidth = 1;\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\tlet hand: Trapezoid = new Trapezoid();\r\n\t\tthis.hand = hand;\r\n\r\n\t\tthis._disposers.push(this._axis);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Re(validates) the clock hand, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\tlet hand = this.hand;\r\n\t\thand.width = this.pixelWidth;\r\n\t\tlet h: number = Math.max(this.startWidth, this.endWidth);\r\n\t\thand.height = h;\r\n\t\thand.leftSide = percent(this.startWidth / h * 100);\r\n\t\thand.rightSide = percent(this.endWidth / h * 100);\r\n\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = this.axis.renderer;\r\n\r\n\t\t\tlet x0: number = $utils.relativeRadiusToValue(this.innerRadius, renderer.pixelRadius);\r\n\t\t\tlet x1: number = $utils.relativeRadiusToValue(this.radius, renderer.pixelRadius);\r\n\r\n\t\t\thand.x = x0;\r\n\t\t\thand.y = - h / 2;\r\n\r\n\t\t\thand.width = x1 - x0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A circle element used as hand's base. (pin)\r\n\t *\r\n\t * @param {Circle} pin Pin element\r\n\t */\r\n\tpublic set pin(pin: Circle) {\r\n\t\tif (this._pin) {\r\n\t\t\tthis.removeDispose(this._pin);\r\n\t\t}\r\n\t\tif (pin) {\r\n\t\t\tthis._pin = pin;\r\n\t\t\tpin.parent = this;\r\n\t\t\tthis._disposers.push(pin);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Circle} Pin element\r\n\t */\r\n\tpublic get pin(): Circle {\r\n\t\treturn this._pin;\r\n\t}\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t *\r\n\t * The shape of the trapezoid is controlled by ClockHand's `startWidth` and\r\n\t * `endWidth` properties.\r\n\t *\r\n\t * Set `endWidth` to 1 (px) to make it pointy.\r\n\t *\r\n\t * @param {Trapezoid} hand Hand element\r\n\t */\r\n\tpublic set hand(hand: Trapezoid) {\r\n\t\tif (this._hand) {\r\n\t\t\tthis.removeDispose(this._hand);\r\n\t\t}\r\n\t\tif (hand) {\r\n\t\t\tthis._hand = hand;\r\n\t\t\thand.parent = this;\r\n\t\t\tthis._disposers.push(hand);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Trapezoid} Hand element\r\n\t */\r\n\tpublic get hand(): Trapezoid {\r\n\t\treturn this._hand;\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's inner end. (base)\r\n\t *\r\n\t * @default 5\r\n\t * @param {number} value Width (px)\r\n\t */\r\n\tpublic set startWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"startWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Width (px)\r\n\t */\r\n\tpublic get startWidth(): number {\r\n\t\treturn this.getPropertyValue(\"startWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's outer end. (tip)\r\n\t *\r\n\t * @default 1\r\n\t * @param {number} value Width (px)\r\n\t */\r\n\tpublic set endWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"endWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Width (px)\r\n\t */\r\n\tpublic get endWidth(): number {\r\n\t\treturn this.getPropertyValue(\"endWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Rotation direction\r\n\t *\r\n\t * @default any\r\n\t * @param {\"any\" | \"clockWise\" | \"counterClockWise\"} value\r\n\t */\r\n\tpublic set rotationDirection(value: \"any\" | \"clockWise\" | \"counterClockWise\") {\r\n\t\tthis.setPropertyValue(\"rotationDirection\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"any\" | \"clockWise\" | \"counterClockWise\"} rotationDirection\r\n\t */\r\n\tpublic get rotationDirection(): \"any\" | \"clockWise\" | \"counterClockWise\" {\r\n\t\treturn this.getPropertyValue(\"rotationDirection\");\r\n\t}\r\n\r\n\t/**\r\n\t * Moves clock hand to particular value.\r\n\t *\r\n\t * If `duration` is set to a number in milliseconds, the hand will move\r\n\t * to the new position gracefully, rather than jumping rigth to it.\r\n\t *\r\n\t * Alternatively, you can also set `value` directly.\r\n\t *\r\n\t * @param {any} value New value\r\n\t * @param {number} duration Animation duration (ms)\r\n\t * @param {(value:number)=>number} easing Animation easing function\r\n\t */\r\n\tpublic showValue(value: any, duration?: number, easing?: (value: number) => number): void {\r\n\t\tthis._value = value;\r\n\t\tif (value != undefined) {\r\n\t\t\tif (!$type.isNumber(duration)) {\r\n\t\t\t\tduration = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tlet renderer = this.axis.renderer;\r\n\t\t\t\tlet newAngle = renderer.positionToAngle(this.axis.anyToPosition(value));\r\n\t\t\t\tlet currentAngle = this.rotation;\r\n\r\n\t\t\t\tif (this.rotationDirection == \"clockWise\") {\r\n\t\t\t\t\tif (newAngle < currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle - 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.rotationDirection == \"counterClockWise\") {\r\n\t\t\t\t\tif (newAngle > currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle + 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.animate({ property: \"rotation\", to: newAngle }, duration, easing);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A current value clock hand is pointing to.\r\n\t *\r\n\t * @param {any} value Value\r\n\t */\r\n\tpublic set value(value: any) {\r\n\t\tthis.showValue(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {any} Value\r\n\t */\r\n\tpublic get value(): any {\r\n\t\treturn this._value;\r\n\t}\r\n\r\n\t/**\r\n\t * An Axis clock hand is associated with.\r\n\t *\r\n\t * Hand's `value` relates to values on the Axis.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic set axis(axis: Axis) {\r\n\t\tif (this.axis != axis) {\r\n\t\t\tthis._axis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.events.on(\"datavalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"datarangechanged\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"dataitemsvalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"propertychanged\", this.invalidate, this, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t\tif (axis) {\r\n\t\t\tlet chart: GaugeChart = axis.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tthis.rotation = chart.startAngle;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.parent = axis.renderer;\r\n\t\tthis.zIndex = 5;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Axis\r\n\t */\r\n\tpublic get axis(): Axis {\r\n\t\treturn this._axis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers `value` accessor, so that Hand animates to new position, in case\r\n\t * value has changed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateValue() {\r\n\t\tthis.value = this.value;\r\n\t}\r\n\r\n\t/**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param {object} config Config\r\n */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Connect clock hands with axes\r\n\t\t\tif ($type.hasValue(config.axis) && $type.isString(config.axis) && this.map.hasKey(config.axis)) {\r\n\t\t\t\tconfig.axis = this.map.getKey(config.axis);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ClockHand\"] = ClockHand;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ClockHand.ts","/**\r\n * Pie chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, IPercentChartProperties, IPercentChartDataFields, IPercentChartAdapters, IPercentChartEvents, PercentChartDataItem } from \"./PercentChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { PieSeries, PieSeriesDataItem } from \"../series/PieSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, IListEvents, ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieChartDataItem extends PercentChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieChart}\r\n\t */\r\n\tpublic _component!: PieChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieChart]].\r\n */\r\nexport interface IPieChartDataFields extends IPercentChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PieChart]]\r\n */\r\nexport interface IPieChartProperties extends IPercentChartProperties {\r\n\r\n\t/**\r\n\t * Outer radius of the pie.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Relative inner radius (0-1).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tinnerRadius?: number;\r\n\r\n\t/**\r\n\t * An angle pie starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle pie ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieChart]].\r\n */\r\nexport interface IPieChartEvents extends IPercentChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieChartAdapters extends IPercentChartAdapters, IPieChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Pie chart.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czech Republic\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"PieChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czech Republic\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"PieSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czech Republic\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"PieChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChartEvents} for a list of available Events\r\n * @see {@link IPieChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nexport class PieChart extends PercentChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IPieChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieChartProperties}\r\n\t */\r\n\tpublic _properties!: IPieChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieChartEvents}\r\n\t */\r\n\tpublic _events!: IPieChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PieSeries}\r\n\t */\r\n\tpublic _seriesType: PieSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.innerRadius = 0;\r\n\t\tthis.radius = percent(80);\r\n\t\tthis.align = \"none\";\r\n\t\tthis.valign = \"none\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tlet seriesContainer = this.seriesContainer;\r\n\t\tseriesContainer.isMeasured = true;\r\n\t\tseriesContainer.valign = \"middle\";\r\n\t\tseriesContainer.align = \"center\";\r\n\t\tseriesContainer.layout = \"absolute\";\r\n\t\tseriesContainer.width = undefined;\r\n\t\tseriesContainer.height = undefined;\r\n\r\n\t\t// so that the pie is always drawn, even the legend wants all the space\r\n\t\tthis.chartContainer.minHeight = 50;\r\n\t\tthis.chartContainer.minWidth = 50;\r\n\t\r\n\t\tthis.chartContainer.events.on(\"maxsizechanged\", this.updateRadius, this, false); // need this for the chart to change radius if legend is removed/disabled\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pie chart\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the chart, causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout(): void {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.updateRadius();\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new [[Series]] object with required parameters when it is\r\n\t * added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tpublic handleSeriesAdded(event: IListEvents[\"inserted\"]): void {\r\n\t\tsuper.handleSeriesAdded(event);\r\n\t\tthis.updateSeriesAngles();\r\n\t}\t\r\n\r\n\tprotected updateSeriesAngles(){\r\n\t\tthis.series.each((series)=>{\r\n\t\t\tseries.startAngle = this.startAngle;\r\n\t\t\tseries.endAngle = this.endAngle;\r\n\t\t\tseries.defaultState.properties.startAngle = this.startAngle;\r\n\t\t\tseries.defaultState.properties.endAngle = this.endAngle;\t\t\t\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Recalculates pie's radius, based on a number of criteria.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateRadius(): void {\r\n\r\n\t\tlet chartCont = this.chartContainer;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRect = $math.getArcRect(this.startAngle, this.endAngle, innerRadius.value);\r\n\t\t}\r\n\t\t// @todo handle this when innerRadius set in pixels (do it for radar also)\r\n\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(chartCont.innerWidth / rect.width, chartCont.innerHeight / rect.height);\r\n\r\n\t\tif(!$type.isNumber(maxRadius)){\r\n\t\t\tmaxRadius = 0;\r\n\t\t}\r\n\r\n\t\tlet chartRadius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\r\n\t\tlet chartPixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, maxRadius);\r\n\r\n\t\tlet seriesRadius = (chartRadius - chartPixelInnerRadius) / this.series.length;\r\n\t\t//@todo: make it possible to set series radius in percent\r\n\t\t$iter.each($iter.indexed(this.series.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet series = a[1];\r\n\r\n\t\t\tlet radius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.radius, chartRadius - chartPixelInnerRadius);\r\n\t\t\tlet innerRadius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.innerRadius, chartRadius - chartPixelInnerRadius);\r\n\r\n\t\t\tif(!$type.isNumber(radius)){\r\n\t\t\t\tradius = chartPixelInnerRadius + seriesRadius * (i + 1);\r\n\t\t\t}\r\n\t\t\tif(!$type.isNumber(innerRadius)){\r\n\t\t\t\tinnerRadius = chartPixelInnerRadius + seriesRadius * i;\r\n\t\t\t}\r\n\r\n\t\t\tseries.pixelRadius = radius;\r\n\t\t\tseries.pixelInnerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\tthis.seriesContainer.definedBBox = { x: chartRadius * rect.x, y: chartRadius * rect.y, width: chartRadius * rect.width, height: chartRadius * rect.height };\r\n\t\tthis.seriesContainer.invalidateLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets radius of the pie chart.\r\n\t *\r\n\t * Setting to a number will mean a fixed pixel radius.\r\n\t *\r\n\t * Setting to an instance of [[Percent]] will mean a relative radius to\r\n\t * available space.\r\n\t *\r\n\t * E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * pieChart.radius = am4core.percent.percent(50);\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * pieChart.radius = am4core.percent.percent(50);\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * \"radius\": \"50%\"\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {number | Percent} value Radius (px or relative)\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif(this.setPercentProperty(\"radius\", value, true, false, 10, false)){\r\n\t\t\tthis.invalidateLayout();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius (px or relative)\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sets relative inner radius (to create a donut chart).\r\n\t *\r\n\t * The inner radius is relative to pie's radius:\r\n\t * * 0 - solid pie (no hole inside);\r\n\t * * 0.5 - hole is half the radius of the pie;\r\n\t * * 1 - does not make sense, because the hole will take up the whole radius.\r\n\t *\r\n\t * @param {number | Percent} value Relative inner radius (0-1)\r\n\t * @todo Setting things like `innerRadius` modifies `slice.radius` and it then looks like it is not the same value as in default state\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Relative inner radius (0-1)\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new [[PieSeries]].\r\n\t *\r\n\t * @return {PieSeries} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PieSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Pie circle. (degrees)\r\n\t *\r\n\t * Normally, a pie chart begins (the left side of the first slice is drawn)\r\n\t * at the top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the first slice be drawn to the right.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set to those lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a Pie chart that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * NOTE: This setting is not supported in a 3D pie chart.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tif(this.setPropertyValue(\"startAngle\", value)){\r\n\t\t\tthis.updateRadius();\r\n\t\t\tthis.updateSeriesAngles()\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the Pie circle. (degrees)\r\n\t *\r\n\t * Normally, a pie chart ends (the right side of the last slice is drawn)\r\n\t * at the top center. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to change this setting.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set to those lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a Pie chart that\r\n\t * looks like a quarter of a circle.\r\n\t * \r\n\t * NOTE: This setting is not supported in a 3D pie chart.\r\n\t *\r\n\t * @default 270\r\n\t * @param {number} value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tif(this.setPropertyValue(\"endAngle\", value)){\r\n\t\t\tthis.updateRadius();\r\n\t\t\tthis.updateSeriesAngles()\r\n\t\t}\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieChart\"] = PieChart;\r\nregistry.registeredClasses[\"PieChartDataItem\"] = PieChartDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PieChart.ts","/**\r\n * Percent chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { PercentSeries, PercentSeriesDataItem } from \"../series/PercentSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, IListEvents, ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PercentChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PercentChartDataItem extends SerialChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PercentChart}\r\n\t */\r\n\tpublic _component!: PercentChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PercentChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PercentChart]].\r\n */\r\nexport interface IPercentChartDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PercentChart]]\r\n */\r\nexport interface IPercentChartProperties extends ISerialChartProperties { }\r\n\r\n/**\r\n * Defines events for [[PercentChart]].\r\n */\r\nexport interface IPercentChartEvents extends ISerialChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PercentChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPercentChartAdapters extends ISerialChartAdapters, IPercentChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This is a base class for \"percent-based\" chart types like Pie and Funnel.\r\n *\r\n * @see {@link IPercentChartEvents} for a list of available Events\r\n * @see {@link IPercentChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for Pie chart documentation\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for Sliced chart documentation\r\n */\r\nexport class PercentChart extends SerialChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IPercentChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IPercentChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPercentChartProperties}\r\n\t */\r\n\tpublic _properties!: IPercentChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPercentChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPercentChartEvents}\r\n\t */\r\n\tpublic _events!: IPercentChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PercentSeries}\r\n\t */\r\n\tpublic _seriesType: PercentSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PercentChart\";\r\n\r\n\t\tthis.align = \"none\";\r\n\t\tthis.valign = \"none\";\r\n\r\n\t\t// so that the chart is always drawn, even the legend wants all the space\r\n\t\tthis.chartContainer.minHeight = 50;\r\n\t\tthis.chartContainer.minWidth = 50;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates chart data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tsuper.validateData();\r\n\t\tthis.feedLegend();\r\n\t}\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\r\n\t\t\tlet legendData: any[] = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\t$iter.each(series.dataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\tif (!dataItem.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(dataItem);\r\n\r\n\t\t\t\t\t\tlet legendSettings = series.legendSettings;\r\n\t\t\t\t\t\tif (legendSettings) {\r\n\t\t\t\t\t\t\tif (legendSettings.labelText) {\r\n\t\t\t\t\t\t\t\tlegend.labels.template.text = legendSettings.labelText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.itemLabelText) {\r\n\t\t\t\t\t\t\t\tlegend.labels.template.text = legendSettings.itemLabelText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.valueText) {\r\n\t\t\t\t\t\t\t\tlegend.valueLabels.template.text = legendSettings.valueText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.itemValueText) {\r\n\t\t\t\t\t\t\t\tlegend.valueLabels.template.text = legendSettings.itemValueText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tlegend.data = legendData;\r\n\t\t\tlegend.dataFields.name = \"category\";\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new [[PercentSeries]].\r\n\t *\r\n\t * @return {PercentSeries} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PercentSeries();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected setLegend(legend: Legend) {\r\n\t\tsuper.setLegend(legend);\r\n\t\tif (legend) {\r\n\t\t\tlegend.labels.template.text = \"{category}\";\r\n\t\t\tlegend.valueLabels.template.text = \"{value.percent.formatNumber('#.0')}%\";\r\n\r\n\t\t\tlegend.itemContainers.template.events.on(\"over\", (event) => {\r\n\t\t\t\tlet PercentSeriesDataItem: PercentSeriesDataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tif (PercentSeriesDataItem.visible && !PercentSeriesDataItem.isHiding) {\r\n\t\t\t\t\tPercentSeriesDataItem.slice.isHover = true;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tlegend.itemContainers.template.events.on(\"out\", (event) => {\r\n\t\t\t\tlet PercentSeriesDataItem: PercentSeriesDataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tPercentSeriesDataItem.slice.isHover = false;\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @hidden\r\n */\r\nregistry.registeredClasses[\"PercentChart\"] = PercentChart;\r\nregistry.registeredClasses[\"PercentChartDataItem\"] = PercentChartDataItem;\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PercentChart.ts","/**\r\n * Pie tick module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Tick, ITickProperties, ITickAdapters, ITickEvents } from \"../elements/Tick\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { PieSeries } from \"../series/PieSeries\"\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[PieTick]].\r\n */\r\nexport interface IPieTickProperties extends ITickProperties { }\r\n\r\n/**\r\n * Defines events for [[PieTick]].\r\n */\r\nexport interface IPieTickEvents extends ITickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieTick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieTickAdapters extends ITickAdapters, IPieTickProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws an tick line for a pie slice connecting it to a related label.\r\n *\r\n * @see {@link IPieTickEvents} for a list of available events\r\n * @see {@link IPieTickAdapters} for a list of available Adapters\r\n */\r\nexport class PieTick extends Tick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieTickProperties}\r\n\t */\r\n\tpublic _properties!: IPieTickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieTickAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieTickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieTickEvents}\r\n\t */\r\n\tpublic _events!: IPieTickEvents;\r\n\r\n\t/**\r\n\t * A label element this tick is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _label = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A slice element this tick is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _slice = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieTick\";\r\n\t\tthis.element = this.paper.add(\"polyline\");\r\n\t\tthis._disposers.push(this._label);\r\n\t\tthis._disposers.push(this._slice);\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tlet slice: Slice = this.slice;\r\n\t\tlet label = this.label;\r\n\r\n\t\tlet series = slice.dataItem.component;\r\n\r\n\t\tif (slice && slice.radius > 0 && label && label.text) {\r\n\t\t\tlet x0 = slice.dx + slice.slice.dx + slice.pixelX + slice.ix * slice.radius * slice.scale;\r\n\t\t\tlet y0 = slice.dy + slice.slice.dy + slice.pixelY + slice.iy * slice.radius * slice.scale;\r\n\r\n\t\t\tlet x1: number;\r\n\t\t\tlet y1: number;\r\n\r\n\t\t\tlet x2: number;\r\n\t\t\tlet y2: number;\r\n\r\n\t\t\tif (series.alignLabels) {\r\n\t\t\t\tx1 = label.pixelX - this.length;\r\n\t\t\t\ty1 = label.pixelY;\r\n\r\n\t\t\t\tx2 = label.pixelX;\r\n\t\t\t\ty2 = y1;\r\n\r\n\t\t\t\tif (label.horizontalCenter == \"right\") {\r\n\t\t\t\t\tx1 += 2 * this.length;\r\n\t\t\t\t\tx2 = x1 - this.length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvar r = label.pixelRadius(slice.radius);\r\n\r\n\t\t\t\tx1 = x0 + r * slice.ix;\r\n\t\t\t\ty1 = y0 + r * slice.iy;\r\n\r\n\t\t\t\tx2 = x1;\r\n\t\t\t\ty2 = y1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.attr({ \"points\": [x0, y0, x1, y1, x2, y2] });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Slice element tick is attached to.\r\n\t *\r\n\t * @param {Slice} slice Slice\r\n\t */\r\n\tpublic set slice(slice: Slice) {\r\n\t\tthis._slice.set(slice, new MultiDisposer([\r\n\t\t\tslice.events.on(\"transformed\", this.invalidate, this),\r\n\t\t\tslice.events.on(\"validated\", this.invalidate, this)\r\n\t\t]));\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Slice} Slice\r\n\t */\r\n\tpublic get slice(): Slice {\r\n\t\treturn this._slice.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Label element tick is attached to.\r\n\t *\r\n\t * @param {AxisLabelCircular} label Label\r\n\t */\r\n\tpublic set label(label: AxisLabelCircular) {\r\n\t\tthis._label.set(label, label.events.on(\"transformed\", this.invalidate, this, false));\r\n\t}\r\n\r\n\t/**\r\n\t * @return {AxisLabelCircular} Label\r\n\t */\r\n\tpublic get label(): AxisLabelCircular {\r\n\t\treturn this._label.get();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieTick\"] = PieTick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/PieTick.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieSeries, PieSeriesDataItem, IPieSeriesDataFields, IPieSeriesProperties, IPieSeriesAdapters, IPieSeriesEvents } from \"../series/PieSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { PieChart3D } from \"../types/PieChart3D\";\r\nimport { Slice3D } from \"../../core/elements/3d/Slice3D\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { OrderedList, OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\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 [[PieSeries3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieSeries3DDataItem extends PieSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines type of the slice represented by this data item.\r\n\t *\r\n\t * @type {Slice3D}\r\n\t */\r\n\tpublic _slice: Slice3D;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieSeries3D}\r\n\t */\r\n\tpublic _component!: PieSeries3D;\r\n\r\n\t/**\r\n\t * @todo Remove?\r\n\t * @deprecated\r\n\t * @type {PieSeries3D}\r\n\t */\r\n\tpublic component: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3DDataItem\";\r\n\r\n\t\tthis.values.depthValue = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Slice depth (height).\r\n\t *\r\n\t * @param {number} value Depth\r\n\t */\r\n\tpublic set depthValue(value: number) {\r\n\t\tthis.setValue(\"depthValue\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Depth\r\n\t */\r\n\tpublic get depthValue(): number {\r\n\t\treturn this.values[\"depthValue\"].value;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DDataFields extends IPieSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds 3D slice depth (height).\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdepthValue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DProperties extends IPieSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DEvents extends IPieSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieSeries3DAdapters extends IPieSeriesAdapters, IPieSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a slice series on a 3D pie chart.\r\n *\r\n * @see {@link IPieSeries3DEvents} for a list of available Events\r\n * @see {@link IPieSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class PieSeries3D extends PieSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPieSeries3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieSeries3DProperties}\r\n\t */\r\n\tpublic _properties!: IPieSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieSeries3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieSeries3DEvents}\r\n\t */\r\n\tpublic _events!: IPieSeries3DEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PieSeries3DDataItem}\r\n\t */\r\n\tpublic _dataItem: PieSeries3DDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {PieChart3D}\r\n\t */\r\n\tpublic _chart: PieChart3D;\r\n\r\n\tpublic _slice: Slice3D;\t\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3D\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object\r\n\t * @see {@link DataItem}\r\n\t * @return {PieSeries3DDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PieSeries3DDataItem();\r\n\t}\r\n\r\n\t/** \r\n\t * creates slice\r\n\t */\r\n\tprotected createSlice(): this[\"_slice\"] {\r\n\t\treturn new Slice3D();\r\n\t}\t\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {PieSeries3DDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: PieSeries3DDataItem): void {\r\n\t\tsuper.validateDataElement(dataItem);\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\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\r\n\t\tfor(let i = this._workingStartIndex; i < this._workingEndIndex; i++){\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tlet slice: Slice3D = dataItem.slice;\r\n\r\n\t\t\tvar startAngle = slice.startAngle;\r\n\t\t\t// find quarter\r\n\t\t\t//q0 || q1\r\n\t\t\tif ((startAngle >= -90 && startAngle < 90)) {\r\n\t\t\t\tslice.toFront();\r\n\t\t\t}\r\n\t\t\t//q2 || q3\r\n\t\t\telse if ((startAngle >= 90)) {\r\n\t\t\t\tslice.toBack();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t *\r\n\t * @param {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie. (0-360)\r\n\t *\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n}\r\n\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 * ChordNode module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagramNode, IFlowDiagramNodeAdapters, IFlowDiagramNodeEvents, IFlowDiagramNodeProperties } from \"./FlowDiagramNode\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { ChordDiagram, ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $string from \"../../core/utils/String\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordNode]].\r\n */\r\nexport interface IChordNodeProperties extends IFlowDiagramNodeProperties { }\r\n\r\n/**\r\n * Defines events for [[ChordNode]].\r\n */\r\nexport interface IChordNodeEvents extends IFlowDiagramNodeEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordNodeAdapters extends IFlowDiagramNodeAdapters, IChordNodeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a node in a Chord Diagram.\r\n *\r\n * A Chord node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[ChordLink]] elements.\r\n *\r\n * @see {@link IChordNodeEvents} for a list of available events\r\n * @see {@link IChordNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordNode extends FlowDiagramNode {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IChordNodeProperties}\r\n\t */\r\n\tpublic _properties!: IChordNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IChordNodeAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordNodeEvents}\r\n\t */\r\n\tpublic _events!: IChordNodeEvents;\r\n\r\n\t/**\r\n\t * A list of data items of the items coming in from another node, one level\r\n\t * up.\r\n\t *\r\n\t * These are what ingoing links are build out of.\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tprotected _incomingDataItems: List;\r\n\r\n\t/**\r\n\t * A list of data items of the items going out of the node.\r\n\t *\r\n\t * These are what outgoing links are build out of.\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tprotected _outgoingDataItems: List;\r\n\r\n\t/**\r\n\t * Sorted list of incoming items.\r\n\t *\r\n\t * @type {Iterator}\r\n\t */\r\n\tprotected _incomingSorted: $iter.Iterator;\r\n\r\n\t/**\r\n\t * Sorted list of outgoing items.\r\n\t * @type {Iterator}\r\n\t */\r\n\tprotected _outgoingSorted: $iter.Iterator;\r\n\r\n\t/**\r\n\t * A chart instance this node is added to.\r\n\t *\r\n\t * @type {ChordDiagram}\r\n\t */\r\n\tpublic chart: ChordDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[ChordDiagramDataItem]] used in the class.\r\n\t *\r\n\t * @type {ChordDiagramDataItem}\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\r\n\t/**\r\n\t * Slice sprite of a node\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic slice: Slice;\r\n\r\n\t/**\r\n\t * A label element which shows node's name.\r\n\t *\r\n\t * @type {AxisLabelCircular}\r\n\t */\r\n\tpublic label: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic nextAngle: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic trueStartAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordNode\";\r\n\r\n\t\tthis.label = this.createChild(AxisLabelCircular);\r\n\t\tthis.label.location = 0.5;\r\n\t\tthis.label.radius = 5;\r\n\t\tthis.label.text = \"{name}\";\r\n\t\tthis.label.zIndex = 1;\r\n\t\tthis.label.shouldClone = false;\r\n\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.events.on(\"positionchanged\", this.updateRotation, this, false);\r\n\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.slice = this.createChild(Slice);\r\n\t\tthis.slice.isMeasured = false;\r\n\r\n\t\tlet hiddenState = this.hiddenState;\r\n\t\thiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n\t\thiddenState.properties.opacity = 0.5;\r\n\t\thiddenState.properties.visible = true;\r\n\r\n\t\tthis.setStateOnChildren = false;\r\n\r\n\t\tthis.slice.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.adapter.add(\"tooltipX\", (tooltipX, target)=>{\r\n\t\t return target.slice.ix * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\r\n\t\tthis.adapter.add(\"tooltipY\", (tooltipY, target)=>{\r\n\t\t return target.slice.iy * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Invalidates all links, attached to this node.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidateLinks(): void {\r\n\t\tsuper.invalidateLinks();\r\n\r\n\t\tlet label = this.label;\r\n\t\tlet slice = this.slice;\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart && slice) {\r\n\r\n\t\t\tlet sum = this.total;\r\n\t\t\tlet arc = slice.arc;\r\n\t\t\tlet sliceStartAngle = slice.startAngle;\r\n\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tif (child instanceof Bullet) {\r\n\t\t\t\t\tlet locationX = child.locationX;\r\n\t\t\t\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\t\t\t\tlocationX = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet locationY = child.locationY;\r\n\t\t\t\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\t\t\t\tlocationY = 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet childAngle = sliceStartAngle + arc * locationX;\r\n\t\t\t\t\tlet childRadius = locationY * slice.radius;\r\n\r\n\t\t\t\t\tchild.x = childRadius * $math.cos(childAngle);\r\n\t\t\t\t\tchild.y = childRadius * $math.sin(childAngle);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\r\n\t\t\tlet labelAngle = sliceStartAngle + arc * label.location;\r\n\t\t\tlet startAngle = sliceStartAngle + (1 - sum / this.adjustedTotal) * arc * 0.5; // if value of a node is > then sum of the links, add to center link\r\n\r\n\t\t\tif ($type.isNaN(startAngle)) {\r\n\t\t\t\tstartAngle = sliceStartAngle;\r\n\t\t\t}\r\n\r\n\t\t\tlet x = slice.radius * $math.cos(labelAngle);\r\n\t\t\tlet y = slice.radius * $math.sin(labelAngle);\r\n\r\n\t\t\tlet point = { x: x, y: y };\r\n\t\t\tlabel.fixPoint(point, slice.radius);\r\n\t\t\tlabel.moveTo(point);\r\n\r\n\t\t\tthis.nextAngle = startAngle;\r\n\r\n\t\t\tif (this._outgoingSorted) {\r\n\r\n\t\t\t\t$iter.each(this._outgoingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\t\t\t\t\tlink.parent = this.chart.linksContainer;\r\n\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\t\t\t\tif ($type.isNumber(value)) {\r\n\r\n\t\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\t\tlink.startAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle;\r\n\t\t\t\t\t\t\tlink.startAngle = this.nextAngle;\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\t\t\t\tlink.endAngle = link.startAngle;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (this._incomingSorted) {\r\n\t\t\t\t$iter.each(this._incomingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\r\n\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\r\n\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\tlink.endAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlink.endAngle = this.nextAngle;\r\n\t\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle; // yes, this is needed\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\t\t\tlink.startAngle = link.endAngle;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * updates slice start angle so that when we drag a node it would face the center\r\n\t */\r\n\tprotected updateRotation() {\r\n\t\tlet slice = this.slice;\r\n\t\tlet mAngle = this.trueStartAngle + slice.arc / 2;\r\n\t\tlet radius = slice.radius;\r\n\r\n\t\tlet tx = radius * $math.cos(mAngle);\r\n\t\tlet ty = radius * $math.sin(mAngle);\r\n\r\n\t\tlet angle = $math.getAngle({ x: tx + this.pixelX, y: ty + this.pixelY });\r\n\r\n\t\tslice.startAngle = this.trueStartAngle + (angle - mAngle);\r\n\r\n\t\tthis.dx = - this.pixelX;\r\n\t\tthis.dy = - this.pixelY;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies properties and labels from another [[ChordNode]].\r\n\t *\r\n\t * @param {ChordNode} source Source node\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.label.copyFrom(source.label);\r\n\t\tthis.slice.copyFrom(source.slice);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordNode\"] = ChordNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordNode.ts","/**\r\n * ChordLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container, IContainerProperties, IContainerEvents, IContainerAdapters } from \"../../core/Container\";\r\nimport { ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { FlowDiagramLink, IFlowDiagramLinkAdapters, IFlowDiagramLinkEvents, IFlowDiagramLinkProperties } from \"./FlowDiagramLink\";\r\nimport { Pattern } from \"../../core/rendering/fills/Pattern\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { QuadraticCurve } from \"../../core/elements/QuadraticCurve\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordLink]].\r\n */\r\nexport interface IChordLinkProperties extends IFlowDiagramLinkProperties {\r\n\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tradius?: number;\r\n\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tarc?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordLink]].\r\n */\r\nexport interface IChordLinkEvents extends IFlowDiagramLinkEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordLinkAdapters extends IFlowDiagramLinkAdapters, IChordLinkProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Chord Diagram.\r\n *\r\n * @see {@link IChordLinkEvents} for a list of available events\r\n * @see {@link IChordLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordLink extends FlowDiagramLink {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IChordLinkProperties}\r\n\t */\r\n\tpublic _properties!: IChordLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IChordLinkAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordLinkEvents}\r\n\t */\r\n\tpublic _events!: IChordLinkEvents;\r\n\r\n\t/**\r\n\t * Defines a type of data item used by this class.\r\n\t *\r\n\t * @type {ChordDiagramDataItem}\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Spline which goes through the middle of a link, used to calculate bullet and tooltip positions, invisible by default\r\n\t * @type Polyspline\r\n */\r\n\tpublic middleLine: QuadraticCurve;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordLink\";\r\n\r\n\t\tthis.middleLine = this.createChild(QuadraticCurve);\r\n\t\tthis.middleLine.shouldClone = false;\r\n\t\tthis.middleLine.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates (redraws) the link.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\r\n\t\tif (!this.isTemplate) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\r\n\t\t\tlet arc = this.arc;\r\n\t\t\tlet radius = this.radius;\r\n\r\n\t\t\tlet fromNode = this.dataItem.fromNode;\r\n\t\t\tlet toNode = this.dataItem.toNode;\r\n\r\n\t\t\tlet fromX = 0;\r\n\t\t\tlet fromY = 0;\r\n\r\n\t\t\tif (fromNode) {\r\n\t\t\t\tfromX = fromNode.pixelX + fromNode.dx;\r\n\t\t\t\tfromY = fromNode.pixelY + fromNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tlet toX = 0;\r\n\t\t\tlet toY = 0;\r\n\r\n\t\t\tif (toNode) {\r\n\t\t\t\ttoX = toNode.pixelX + toNode.dx;\r\n\t\t\t\ttoY = toNode.pixelY + toNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tif (radius > 0) {\r\n\t\t\t\tlet x1 = radius * $math.cos(startAngle) + fromX;\r\n\t\t\t\tlet y1 = radius * $math.sin(startAngle) + fromY;\r\n\t\t\t\tlet x2 = radius * $math.cos(endAngle) + toX;\r\n\t\t\t\tlet y2 = radius * $math.sin(endAngle) + toY;\r\n\t\t\t\tlet x3 = radius * $math.cos(endAngle + arc) + toX;\r\n\t\t\t\tlet y3 = radius * $math.sin(endAngle + arc) + toY;\r\n\t\t\t\tlet x4 = radius * $math.cos(startAngle + arc) + fromX;\r\n\t\t\t\tlet y4 = radius * $math.sin(startAngle + arc) + fromY;\r\n\r\n\t\t\t\t//let cpAngle = startAngle + arc + (endAngle - startAngle - arc) / 2;\r\n\t\t\t\t//let arcWidth = $math.getDistance({x:x1, y:y1}, {x:x4, y:y4});\r\n\r\n\t\t\t\t//let cpx = (arcWidth) * $math.cos(cpAngle);\r\n\t\t\t\t//let cpy = (arcWidth) * $math.sin(cpAngle);\r\n\r\n\t\t\t\tlet cp = { x: 0, y: 0 };\r\n\t\t\t\tlet path = $path.moveTo({ x: x1, y: y1 });\r\n\r\n\t\t\t\tpath += $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x2, y: y2 }, cp);\r\n\t\t\t\tpath += $path.arcTo(endAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x1, y: y1 }, cp);\r\n\r\n\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\tthis.link.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.link.path = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.maskBullets) {\r\n\t\t\t\t\tthis.bulletsMask.path = path;\r\n\t\t\t\t\tthis.bulletsContainer.mask = this.bulletsMask;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet mAngle1 = startAngle + arc / 2;\r\n\t\t\t\tlet mAngle2 = endAngle + arc / 2;\r\n\t\t\t\tlet mAngleM = mAngle1 + (mAngle2 - mAngle1) / 2;\r\n\r\n\t\t\t\tlet middleLine = this.middleLine;\r\n\r\n\t\t\t\tmiddleLine.x1 = radius * $math.cos(mAngle1) + fromX;\r\n\t\t\t\tmiddleLine.y1 = radius * $math.sin(mAngle1) + fromY;\r\n\t\t\t\tmiddleLine.x2 = radius * $math.cos(mAngle2) + toX;\r\n\t\t\t\tmiddleLine.y2 = radius * $math.sin(mAngle2) + toY;\r\n\r\n\t\t\t\tmiddleLine.cpx = 0;\r\n\t\t\t\tmiddleLine.cpy = 0;\r\n\r\n\t\t\t\tmiddleLine.stroke = this.fill;\r\n\r\n\t\t\t\tthis.positionBullets();\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {number} value End Y\r\n\t */\r\n\tpublic set radius(value: number) {\r\n\t\tthis.setPropertyValue(\"radius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End Y\r\n\t */\r\n\tpublic get radius(): number {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {number} value [description]\r\n\t */\r\n\tpublic set arc(value: number) {\r\n\t\tthis.setPropertyValue(\"arc\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} [description]\r\n\t */\r\n\tpublic get arc(): number {\r\n\t\treturn this.getPropertyValue(\"arc\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordLink\"] = ChordLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordLink.ts","/**\r\n * TreeMap series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { TreeMap, TreeMapDataItem } from \"../types/TreeMap\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { Container } from \"../../core/Container\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMapSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {TreeMapSeries}\r\n\t */\r\n\tpublic _component!: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Data for the this particular item.\r\n\t *\r\n\t * @param {Object} value Item's data\r\n\t */\r\n\t//public set dataContext(value: Object) {\r\n\t//\tthis._dataContext = value;\r\n\t//}\r\n\r\n\r\n\r\n\t/**\r\n\t * @return {Object} Item's data\r\n\t */\r\n\t/*\r\n public get dataContext(): Object {\r\n\t // It's because data of tree series is TreeMapDataItems.\r\n\t if (this._dataContext) {\r\n\t\t return (this._dataContext).dataContext;\r\n\t }\r\n }*/\r\n\r\n\t/**\r\n\t * The name of the item's parent item.\r\n\t *\r\n\t * @return {string} Parent name\r\n\t */\r\n\tpublic get parentName(): string {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem && treeMapDataItem.parent) {\r\n\t\t\treturn treeMapDataItem.parent.name;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\treturn this.treeMapDataItem.value;\r\n\t}\r\n\r\n\t/**\r\n\t * A corresponding data item from the tree map.\r\n\t *\r\n\t * @readonly\r\n\t * @return {TreeMapDataItem} Data item\r\n\t */\r\n\tpublic get treeMapDataItem(): TreeMapDataItem {\r\n\t\treturn this._dataContext;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMapSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapSeriesAdapters extends IColumnSeriesAdapters, ITreeMapSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class TreeMapSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {ITreeMapSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ITreeMapSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ITreeMapSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ITreeMapSeriesEvents}\r\n\t */\r\n\tpublic _events!: ITreeMapSeriesEvents;\r\n\r\n\t/**\r\n\t * The level in treemap hierarchy series is at.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic level: number;\r\n\r\n\t/**\r\n\t * Type of the data item used by series.\r\n\t *\r\n\t * @type {TreeMapSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {TreeMap}\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\r\n\tpublic parentDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"TreeMapSeries\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.fillOpacity = 1;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.minBulletDistance = 0;\r\n\t\tthis.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n\t\tthis.columns.template.configField = \"config\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"background\");\r\n\t\tthis.dataFields.openValueX = \"x0\";\r\n\t\tthis.dataFields.valueX = \"x1\";\r\n\t\tthis.dataFields.openValueY = \"y0\";\r\n\t\tthis.dataFields.valueY = \"y1\";\r\n\r\n\t\tthis.sequencedInterpolation = false;\r\n\r\n\t\tthis.showOnInit = false;\r\n\r\n\t\t// otherwise nodes don't stack nicely to each other\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param {TreeMapSeriesDataItem} dataItem Data item\r\n\t * @param {Object} dataContext Raw data\r\n\t * @param {number} index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\t(dataContext).seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {TreeMapSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows series.\r\n\t *\r\n\t * @param {number} duration Duration of fade in (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\t\t\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n\t\t})\r\n\r\n\t\tlet animation = super.showReal(interpolationDuration);\r\n\t\tlet chart = this.chart;\r\n\t\tif(chart){\r\n\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\tanimation.events.on(\"animationended\", () => {\r\n\t\t\t\t\tchart.invalidateLayout();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tchart.invalidateLayout();\r\n\t\t\t}\r\n\t\t\tchart.invalidateLayout();\r\n\t\t}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param {number} duration Duration of fade out (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\t\t\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet animation = super.hideReal(interpolationDuration);\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n\t\t})\r\n\r\n\t\tlet chart = this.chart;\r\n\t\tif(chart){\r\n\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\tanimation.events.on(\"animationended\", () => {\r\n\t\t\t\t\tchart.invalidateLayout();\t\t\t\t\t\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tchart.invalidateLayout();\t\t\t\t\r\n\t\t\t}\r\n\t\t\tchart.invalidateLayout();\r\n\t\t}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Process values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic processValues() {\r\n\r\n\t\t// Just overriding so that inherited method does not kick in.\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate(){\r\n\r\n\t}\t\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Add empty data fields if the they are not set, so that XYSeries\r\n\t\t\t// dataField check does not result in error.\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tconfig.dataFields = {};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\t//column.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\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 * Module, defining Axis Renderer for horizontal 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererX, IAxisRendererXProperties, IAxisRendererXAdapters, IAxisRendererXEvents } from \"../axes/AxisRendererX\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DProperties extends IAxisRendererXProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DEvents extends IAxisRendererXEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererX3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererX3DAdapters extends IAxisRendererXAdapters, IAxisRendererX3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for horizontal 3D axis.\r\n *\r\n * @see {@link IAxisRendererX3DEvents} for a list of available events\r\n * @see {@link IAxisRendererX3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererX3D extends AxisRendererX {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t * @type {IAxisRendererX3DProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererX3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t * @type {AxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererX3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererX3DEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererX3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererX3D\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Grid} grid Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet h: number = this.getHeight();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement() {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet h = this.getHeight();\r\n\t\tlet dx = this.chart.dx3D;\r\n\t\tlet dy = this.chart.dy3D;\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {XYChart3D} value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {XYChart3D} Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param {AMEvent[\"propertychanged\"]} event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererX3D\"] = AxisRendererX3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","/**\r\n * Module, defining Axis Renderer for vertical 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"../axes/AxisRendererY\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DProperties extends IAxisRendererYProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererY3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererY3DAdapters extends IAxisRendererYAdapters, IAxisRendererY3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for vertical 3D axis.\r\n *\r\n * @see {@link IAxisRendererY3DEvents} for a list of available events\r\n * @see {@link IAxisRendererY3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererY3D extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisRendererY3DProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererY3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisRendererY3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererY3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererY3DEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererY3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererY3D\";\r\n\t\tthis._disposers.push(this._chart);\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Grid} grid Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number): void {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet w: number = this.getWidth();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet w: number = this.getWidth();\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: 0, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w + this.chart.dx3D, y: this.chart.dy3D });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {XYChart3D} value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {XYChart3D} Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param {AMEvent[\"propertychanged\"]} event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","/**\r\n * 3D column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Column3D } from \"../elements/Column3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nexport class ColumnSeries3DDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {Column3D}\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DProperties extends IColumnSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number}\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number}\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeries3DAdapters extends IColumnSeriesAdapters, IColumnSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IColumnSeries3DEvents} for a list of available Events\r\n * @see {@link IColumnSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries3D extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ColumnSeries3DDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Defines the type for data fields.\r\n\t *\r\n\t * @type {IColumnSeries3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IColumnSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IColumnSeries3DProperties}\r\n\t */\r\n\tpublic _properties!: IColumnSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IColumnSeries3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IColumnSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IColumnSeries3DEvents}\r\n\t */\r\n\tpublic _events!: IColumnSeries3DEvents;\r\n\r\n\t/**\r\n\t * Specifies how deep in 3d space columns should be drawn.\r\n\t *\r\n\t * Internal use only.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number}\r\n\t */\r\n\tpublic depthIndex: number;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {XYChart3D}\r\n\t */\r\n\tpublic _chart: XYChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ColumnSeries3D\";\r\n\r\n\t\tthis.columns.template.column3D.applyOnClones = true;\r\n\t\tthis.columns.template.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get columnsContainer(): Container {\r\n\t\tif (this.chart && this.chart.columnsContainer) {\r\n\t\t\treturn this.chart.columnsContainer;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._columnsContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tif(dataItem.column){\r\n\t\t\tdataItem.column.dx = this.dx;\r\n\t\t\tdataItem.column.dy = this.dy;\r\n\t\t}\r\n\t}\t\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tsuper.validateDataElements();\r\n\t\tif(this.chart){\r\n\t\t\tthis.chart.invalidateLayout();\t\r\n\t\t}\t\t\r\n\t}\t\t\r\n\r\n\t/**\r\n\t * Returns an element to use for 3D bar.\r\n\t * @ignore\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column3D();\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t\tlet template = this.columns.template; // todo: Cone is not Rectangle3D, maybe we should do some I3DShape?\r\n\t\ttemplate.column3D.depth = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} value Angle (0-360)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tlet template = this.columns.template;\r\n\t\ttemplate.column3D.angle = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Angle (0-360)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries3D\"] = ColumnSeries3D;\r\nregistry.registeredClasses[\"ColumnSeries3DDataItem\"] = ColumnSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries3D.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Candlestick } from \"../elements/Candlestick\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\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 [[CandlestickSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CandlestickSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {Candlestick}\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {CandlestickSeries}\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: CandlestickSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.values.lowValueX = {};\r\n\t\tthis.values.lowValueY = {};\r\n\t\tthis.values.highValueX = {};\r\n\t\tthis.values.highValueY = {};\r\n\r\n\t\tthis.className = \"CandlestickSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for horizontal axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set lowValueX(value: number) {\r\n\t\tthis.setValue(\"lowValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get lowValueX(): number {\r\n\t\treturn this.values.lowValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for vertical axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set lowValueY(value: number) {\r\n\t\tthis.setValue(\"lowValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get lowValueY(): number {\r\n\t\treturn this.values.lowValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for horizontal axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set highValueX(value: number) {\r\n\t\tthis.setValue(\"highValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get highValueX(): number {\r\n\t\treturn this.values.highValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for vertical axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set highValueY(value: number) {\r\n\t\tthis.setValue(\"highValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get highValueY(): number {\r\n\t\treturn this.values.highValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for horizontal axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set closeValueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get closeValueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for vertical axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set closeValueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get closeValueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for horizontal axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlowValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlowValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high numeric value for horizontal axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\thighValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\thighValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for horizontal axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlowDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for vertical axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlowDateY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for horizontal axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\thighDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for vertical axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\thighDateY?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CandlestickSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickSeriesAdapters extends IColumnSeriesAdapters, ICandlestickSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link ICandlestickSeriesEvents} for a list of available Events\r\n * @see {@link ICandlestickSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class CandlestickSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {CandlestickSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: CandlestickSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {ICandlestickSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ICandlestickSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICandlestickSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ICandlestickSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICandlestickSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ICandlestickSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICandlestickSeriesEvents}\r\n\t */\r\n\tpublic _events!: ICandlestickSeriesEvents;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t */\r\n\tprotected _xLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t */\r\n\tprotected _yLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t */\r\n\tprotected _xHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t */\r\n\tprotected _yHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CandlestickSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tlet positiveColor = interfaceColors.getFor(\"positive\");\r\n\t\tlet negativeColor = interfaceColors.getFor(\"negative\");\r\n\r\n\t\tthis.dropFromOpenState.properties.fill = negativeColor;\r\n\t\tthis.dropFromOpenState.properties.stroke = negativeColor;\r\n\r\n\t\tthis.riseFromOpenState.properties.fill = positiveColor;\r\n\t\tthis.riseFromOpenState.properties.stroke = positiveColor;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Candlestick Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {CandlestickSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CandlestickSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {CandlestickSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tthis.validateCandlestick(dataItem);\r\n\t}\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"dataItem\"]){\r\n\t\tlet column: Candlestick = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet lowLine = column.lowLine;\r\n\t\t\tlet highLine = column.highLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\r\n\t\t\t\tlowLine.x = x;\r\n\t\t\t\thighLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\tlowLine.y1 = yLow - pixelY;\r\n\t\t\t\thighLine.y1 = yHigh - pixelY;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.y2 = yOpen - pixelY;\r\n\t\t\t\t\thighLine.y2 = yClose - pixelY;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.y2 = yClose - pixelY;\r\n\t\t\t\t\thighLine.y2 = yOpen - pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\tlowLine.y = y;\r\n\t\t\t\thighLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\tlowLine.x1 = xLow - pixelX;\r\n\t\t\t\thighLine.x1 = xHigh - pixelX;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.x2 = xOpen - pixelX;\r\n\t\t\t\t\thighLine.x2 = xClose - pixelX;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.x2 = xClose - pixelX;\r\n\t\t\t\t\thighLine.x2 = xOpen - pixelX;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\t// LOW LINE\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeLowLine = rangeColumn.lowLine;\r\n\t\t\t\t\trangeLowLine.x = lowLine.x;\r\n\t\t\t\t\trangeLowLine.y = lowLine.y;\r\n\t\t\t\t\trangeLowLine.x1 = lowLine.x1;\r\n\t\t\t\t\trangeLowLine.x2 = lowLine.x2;\r\n\t\t\t\t\trangeLowLine.y1 = lowLine.y1;\r\n\t\t\t\t\trangeLowLine.y2 = lowLine.y2;\r\n\r\n\t\t\t\t\t// HIGH LINE\r\n\t\t\t\t\tlet rangehighLine = rangeColumn.highLine;\r\n\t\t\t\t\trangehighLine.x = highLine.x;\r\n\t\t\t\t\trangehighLine.y = highLine.y;\r\n\t\t\t\t\trangehighLine.x1 = highLine.x1;\r\n\t\t\t\t\trangehighLine.x2 = highLine.x2;\r\n\t\t\t\t\trangehighLine.y1 = highLine.y1;\r\n\t\t\t\t\trangehighLine.y2 = highLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic get xLowField(): string {\r\n\t\treturn this._xLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic get yLowField(): string {\r\n\t\treturn this._yLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic get xHighField(): string {\r\n\t\treturn this._xHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic get yHighField(): string {\r\n\t\treturn this._yHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tsuper.defineFields();\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tlet yAxisFieldName: string = $utils.capitalize(this.yAxis.axisFieldName);\r\n\t\t\tthis._yLowField = <$type.Keyof>(\"low\" + yAxisFieldName + \"Y\");\r\n\t\t\tthis._yHighField = <$type.Keyof>(\"high\" + yAxisFieldName + \"Y\");\r\n\t\t}\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tlet xAxisFieldName: string = $utils.capitalize(this.xAxis.axisFieldName);\r\n\t\t\tthis._xLowField = <$type.Keyof>(\"low\" + xAxisFieldName + \"X\");\r\n\t\t\tthis._xHighField = <$type.Keyof>(\"high\" + xAxisFieldName + \"X\");\r\n\t\t}\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xLowField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xHighField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yLowField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yHighField);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: Candlestick = marker.createChild(Candlestick);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet highLine: Line = column.lowLine;\r\n\t\tlet lowLine: Line = column.highLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLine.y = h / 2;\r\n\t\t\tlowLine.y = h / 2;\r\n\r\n\t\t\thighLine.x2 = w / 3;\r\n\t\t\tlowLine.x2 = w / 3;\r\n\t\t\tlowLine.x = w / 3 * 2;\r\n\t\t\tcolumn.column.x = w / 3;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\t\t\thighLine.x = w / 2;\r\n\t\t\tlowLine.x = w / 2;\r\n\r\n\t\t\thighLine.y2 = h / 3;\r\n\t\t\tlowLine.y2 = h / 3;\r\n\t\t\tlowLine.y = h / 3 * 2;\r\n\t\t\tcolumn.column.y = h / 3;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\t\tcolumn.fill = column.stroke;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Candlestick();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CandlestickSeries\"] = CandlestickSeries;\r\nregistry.registeredClasses[\"CandlestickSeriesDataItem\"] = CandlestickSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CandlestickSeries.ts","/**\r\n * Module that defines everything related to building OHLCs.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Candlestick, ICandlestickProperties, ICandlestickAdapters, ICandlestickEvents } from \"./Candlestick\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[OHLC]].\r\n */\r\nexport interface IOHLCProperties extends ICandlestickProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLC]].\r\n */\r\nexport interface IOHLCEvents extends ICandlestickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLC]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCAdapters extends ICandlestickAdapters, IOHLCProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates OHLCs.\r\n *\r\n * @see {@link IOHLCEvents} for a list of available events\r\n * @see {@link IOHLCAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class OHLC extends Candlestick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IOHLCProperties}\r\n\t */\r\n\tpublic _properties!: IOHLCProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IOHLCAdapters}\r\n\t */\r\n\tpublic _adapter!: IOHLCAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IOHLCEvents}\r\n\t */\r\n\tpublic _events!: IOHLCEvents;\r\n\r\n\r\n\t/**\r\n\t * Open line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic openLine: Line;\r\n\r\n\t/**\r\n\t * Close line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic closeLine: Line;\r\n\r\n\t/**\r\n\t * High-low line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic highLowLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLC\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\t//super.createAssets();\r\n\r\n\t\tthis.openLine = this.createChild(Line);\r\n\t\tthis.openLine.shouldClone = false;\r\n\r\n\t\tthis.highLowLine = this.createChild(Line);\r\n\t\tthis.highLowLine.shouldClone = false;\r\n\r\n\t\tthis.closeLine = this.createChild(Line);\r\n\t\tthis.closeLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[OHLC]].\r\n\t *\r\n\t * @param {OHLC} source Source OHLC\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.openLine) {\r\n\t\t\tthis.openLine.copyFrom(source.openLine);\r\n\t\t}\r\n\t\tif (this.highLowLine) {\r\n\t\t\tthis.highLowLine.copyFrom(source.highLowLine);\r\n\t\t}\r\n\t\tif (this.closeLine) {\r\n\t\t\tthis.closeLine.copyFrom(source.closeLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLC\"] = OHLC;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/OHLC.ts","/**\r\n * Module that defines everything related to building RadarColumns.\r\n * It is a container which has radarColumn element which is a Slice.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnAdapters extends IColumnAdapters, IRadarColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates RadarColumns.\r\n *\r\n * @see {@link IRadarColumnEvents} for a list of available events\r\n * @see {@link IRadarColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class RadarColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarColumnProperties}\r\n\t */\r\n\tpublic _properties!: IRadarColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarColumnEvents}\r\n\t */\r\n\tpublic _events!: IRadarColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Radar column element\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic radarColumn: Slice;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tthis.radarColumn = this.createChild(Slice);\r\n\t\tthis.radarColumn.shouldClone = false;\r\n\t\tthis.radarColumn.strokeOpacity = undefined;\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.radarColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[RadarColumn]].\r\n\t *\r\n\t * @param {RadarColumn} source Source RadarColumn\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.radarColumn) {\r\n\t\t\tthis.radarColumn.copyFrom(source.radarColumn);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * X coordinate for the slice tooltip.\r\n\t *\r\n\t * @return {number} X\r\n\t */\r\n\tprotected getTooltipX(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.radarColumn.tooltipX;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate for the slice tooltip.\r\n\t *\r\n\t * @return {number} Y\r\n\t */\r\n\tprotected getTooltipY(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.radarColumn.tooltipY;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumn\"] = RadarColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/RadarColumn.ts","/**\r\n * Defines Pyramid Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IFunnelSeriesAdapters, IFunnelSeriesDataFields, IFunnelSeriesEvents, IFunnelSeriesProperties, FunnelSeries, FunnelSeriesDataItem } from \"./FunnelSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { Color, color } from \"../../core/utils/Color\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PyramidSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PyramidSeriesDataItem extends FunnelSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PyramidSeries}\r\n\t */\r\n\tpublic _component!: PyramidSeries;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PyramidSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesDataFields extends IFunnelSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesProperties extends IFunnelSeriesProperties {\r\n\r\n\t/**\r\n\t * Bottom width in pixels or percent\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tbottomWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Top width in pixels or percent\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\ttopWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tpyramidHeight?: number | Percent;\r\n\r\n\t/**\r\n\t * Indicates whether slice value should sould influence its height or area\r\n\t * size.\r\n\t *\r\n\t * @default \"area\"\r\n\t * @type {\"height\" | \"area\"}\r\n\t */\r\n\tvalueIs?: \"height\" | \"area\";\r\n}\r\n\r\n/**\r\n * Defines events for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesEvents extends IFunnelSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PyramidSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPyramidSeriesAdapters extends IFunnelSeriesAdapters, IPyramidSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPyramidSeriesEvents} for a list of available Events\r\n * @see {@link IPyramidSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PyramidSeries extends FunnelSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPyramidSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPyramidSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPyramidSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPyramidSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPyramidSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPyramidSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPyramidSeriesEvents}\r\n\t */\r\n\tpublic _events!: IPyramidSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PyramidSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: PyramidSeriesDataItem;\r\n\r\n\t/**\r\n\t * [_nextWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _nextWidth: number;\r\n\r\n\tprotected _pyramidHeight: number;\r\n\r\n\tprotected _pyramidWidth: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PyramidSeries\";\r\n\t\tthis.topWidth = percent(0);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.pyramidHeight = percent(100);\r\n\t\tthis.valueIs = \"area\";\r\n\r\n\t\tthis.sliceLinks.template.width = 0;\r\n\t\tthis.sliceLinks.template.height = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {PyramidSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PyramidSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t\tthis._nextWidth = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * [getNextValue description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {FunnelSeriesDataItem} dataItem [description]\r\n\t * @return {number} [description]\r\n\t */\r\n\tprotected getNextValue(dataItem: FunnelSeriesDataItem): number {\r\n\t\tlet index = dataItem.index;\r\n\t\tlet nextValue: number = dataItem.getWorkingValue(\"value\");\r\n\t\tif (index < this.dataItems.length - 1) {\r\n\t\t\tlet nextItem = this.dataItems.getIndex(index + 1);\r\n\t\t\tnextValue = nextItem.getWorkingValue(\"value\");\r\n\t\t}\r\n\t\tif (nextValue == 0) {\r\n\t\t\tnextValue = 0.000001;\r\n\t\t}\r\n\t\treturn nextValue;\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElements description]\r\n\t * \r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements() {\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\tlet relValue = dataItem.getWorkingValue(\"value\") / dataItem.value;\r\n\t\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\tmaxHeight -= (sliceLink.pixelHeight * relValue);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tmaxWidth -= (sliceLink.pixelWidth * relValue);\r\n\t\t\t}\r\n\r\n\t\t})\r\n\r\n\t\tthis._pyramidHeight = $utils.relativeToValue(this.pyramidHeight, maxHeight);\r\n\t\tthis._pyramidWidth = $utils.relativeToValue(this.pyramidHeight, maxWidth);\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet y = (maxHeight - this._pyramidHeight) / 2;\r\n\t\t\tthis.slicesContainer.y = y\r\n\t\t\tthis.labelsContainer.y = y;\r\n\t\t\tthis.ticksContainer.y = y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet x = (maxWidth - this._pyramidWidth) / 2;\r\n\t\t\tthis.slicesContainer.x = x;\r\n\t\t\tthis.labelsContainer.x = x;\r\n\t\t\tthis.ticksContainer.x = x;\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElements();\r\n\t}\r\n\r\n\t/**\r\n\t * [decorateSlice description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t */\r\n\tprotected decorateSlice(dataItem: this[\"_dataItem\"]) {\r\n\r\n\t\tlet sum = this.dataItem.values.value.sum;\r\n\r\n\t\tif(sum == 0){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet slice = dataItem.slice;\r\n\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\tlet label = dataItem.label;\r\n\t\tlet tick = dataItem.tick;\r\n\r\n\t\tlet nextValue = this.getNextValue(dataItem);\r\n\t\tlet workingValue = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\tif (workingValue == 0) {\r\n\t\t\tworkingValue = 0.000001;\r\n\t\t}\r\n\r\n\t\tlet pyramidWidth = this._pyramidWidth;\r\n\t\tlet pyramidHeight = this._pyramidHeight;\r\n\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tlet linkWidth = sliceLink.pixelWidth;\r\n\t\tlet linkHeight = sliceLink.pixelHeight;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxWidth);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxWidth);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceHeight: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\r\n\t\t\t\tlet square = totalSquare * workingValue / sum;\r\n\r\n\t\t\t\tlet s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\r\n\r\n\t\t\t\tsliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet sum = this.dataItem.values.value.sum;\r\n\t\t\t\tsliceHeight = pyramidHeight * workingValue / sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceHeight * c;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tslice.height = sliceHeight;\r\n\t\t\tslice.width = maxWidth;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.y = this._nextY;\r\n\t\t\t//slice.x = maxWidth / 2;\t\t\t\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.x = maxWidth / 2;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.x = 0;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.y = slice.pixelY + slice.pixelHeight * tick.locationY;\r\n\r\n\t\t\tthis._nextY += slice.pixelHeight + linkHeight * workingValue / dataItem.value;\r\n\t\t\tsliceLink.y = this._nextY - linkHeight;\r\n\t\t\tsliceLink.x = maxWidth / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxHeight);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxHeight);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidWidth, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceWidth: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidWidth;\r\n\t\t\t\tlet square = totalSquare * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceWidth = (sliceTopWidth - Math.sqrt(sliceTopWidth * sliceTopWidth - 2 * square * c)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceWidth * sliceTopWidth) / sliceWidth;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsliceWidth = pyramidWidth * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceWidth * c;\r\n\t\t\t}\r\n\r\n\t\t\tslice.width = sliceWidth;\r\n\t\t\tslice.height = maxHeight;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.x = this._nextY;\r\n\t\t\t\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.y = maxHeight / 2;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tlabel.y = this.labelsContainer.measuredHeight;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlabel.x = slice.pixelX + slice.pixelWidth * tick.locationX;\r\n\r\n\t\t\tthis._nextY += slice.pixelWidth + linkWidth * workingValue / dataItem.value;\r\n\t\t\tsliceLink.x = this._nextY - linkWidth;\r\n\t\t\tsliceLink.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tthis._nextWidth = slice.bottomWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's tip in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` (default) means the pyramid will be perfectly pointy.\r\n\t * `50%` will have a cut off / blunt top that is half the width of the chart.\r\n\t * `100%` will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @default 0%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set topWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"topWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get topWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"topWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t *\r\n\t *\r\n\t * @default 100%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set pyramidHeight(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"pyramidHeight\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get pyramidHeight(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"pyramidHeight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's bottom (bsae) in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` means the pyramid's botto will be pointy.\r\n\t * `50%` will have a cut off / blunt bottom that is half the width of the chart.\r\n\t * `100%` (default) will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t * \r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set bottomWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"bottomWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get bottomWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"bottomWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates how slice's value will influence its size.\r\n\t *\r\n\t * `\"area\"` (default) means that the whole area of the pyramid (counting in\r\n\t * modifications by `topWidth` and `bottomWidth`) will be divvied up between\r\n\t * slices based on their value.\r\n\t *\r\n\t * With this setting at `\"area\"` the area of the trapezoids of each slice\r\n\t * will represent their value relatively to values of the other slices.\r\n\t *\r\n\t * This is a correct way to depict \"weight\" of each slice based on their\r\n\t * values.\r\n\t *\r\n\t * `\"height\"` means whole height (as opposed to area) of the pyramid will be\r\n\t * divvied up between slices. Actual slice width or area is not counted in.\r\n\t *\r\n\t * From the data-viz standpoint this does not make a lot of sense, since\r\n\t * slices with lesser values might appear more prominent if they are placed\r\n\t * towards thick end of the pyramid since their areas will be bigger.\r\n\t *\r\n\t * @default \"area\"\r\n\t * @param {\"area\" | \"height\"}\r\n\t */\r\n\tpublic set valueIs(value: \"area\" | \"height\") {\r\n\t\tif (this.setPropertyValue(\"valueIs\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"area\" | \"height\"}\r\n\t */\r\n\tpublic get valueIs(): \"area\" | \"height\" {\r\n\t\treturn this.getPropertyValue(\"valueIs\");\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PyramidSeries\"] = PyramidSeries;\r\nregistry.registeredClasses[\"PyramidSeriesDataItem\"] = PyramidSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PyramidSeries.ts","/**\r\n * Module that defines everything related to building Cone Columns.\r\n * It is a container which has coneColumn element which is a Cone.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Cone } from \"../../core/elements/3d/Cone\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeColumnAdapters extends IColumnAdapters, IConeColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates ConeColumns.\r\n *\r\n * @see {@link IConeColumnEvents} for a list of available events\r\n * @see {@link IConeColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ConeColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IConeColumnProperties}\r\n\t */\r\n\tpublic _properties!: IConeColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IConeColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: IConeColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IConeColumnEvents}\r\n\t */\r\n\tpublic _events!: IConeColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Cone column element\r\n\t * @type {Cone}\r\n\t */\r\n\tpublic coneColumn: Cone;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tcreateAssets() {\r\n\t\tthis.coneColumn = this.createChild(Cone);\r\n\t\tthis.coneColumn.shouldClone = false;\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.coneColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[ConeColumn]].\r\n\t *\r\n\t * @param {ConeColumn} source Source ConeColumn\r\n\t */\r\n\tcopyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.coneColumn) {\r\n\t\t\tthis.coneColumn.copyFrom(source.coneColumn);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeColumn\"] = ConeColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ConeColumn.ts","/**\r\n * Module that defines everything related to building Curved Columns.\r\n * It is a container which has CurvedColumn element which is a Sprite.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnProperties extends IColumnProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Tension\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * Orientation of the column\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @type {Orientation}\r\n\t */\r\n\torientation?: Orientation;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnAdapters extends IColumnAdapters, ICurvedColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates CurvedColumns.\r\n *\r\n * @see {@link ICurvedColumnEvents} for a list of available events\r\n * @see {@link ICurvedColumnAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICurvedColumnProperties}\r\n\t */\r\n\tpublic _properties!: ICurvedColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICurvedColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICurvedColumnEvents}\r\n\t */\r\n\tpublic _events!: ICurvedColumnEvents;\r\n\r\n\t/**\r\n\t * The element that holds curved column shape.\r\n\t * \r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic curvedColumn: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * [createAssets description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected createAssets(): void {\r\n\t\tthis.curvedColumn = this.createChild(Sprite);\r\n\t\tthis.curvedColumn.shouldClone = false;\r\n\r\n\t\tthis.setPropertyValue(\"tension\", 0.7);\r\n\r\n\t\tthis.width = percent(120);\r\n\t\tthis.height = percent(120);\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.curvedColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the element.\r\n\t * \r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tlet w = this.realWidth;\r\n\t\tlet h = this.realHeight;\r\n\t\tlet x = this.realX - this.pixelX;\r\n\t\tlet y = this.realY - this.pixelY;\r\n\r\n\t\tlet points: IPoint[];\r\n\r\n\t\tlet ww = this.width;\r\n\t\tlet pw = 0.8;\r\n\r\n\t\tlet tensionX = 1;\r\n\t\tlet tensionY = 1;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\ttensionX = this.tension;\r\n\t\t\tpoints = [{ x: 0, y: h + y }, { x: w / 2, y: y }, { x: w, y: h + y }];\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttensionY = this.tension;\r\n\t\t\tpoints = [{ x: x, y: 0 }, { x: x + w, y: h / 2 }, { x: x, y: h }];\r\n\t\t}\r\n\r\n\t\tlet path = $path.moveTo(points[0]) + new $smoothing.Tension(tensionX, tensionY).smooth(points);\r\n\t\tthis.column.path = path;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[CurvedColumn]].\r\n\t * \r\n\t * @param {CurvedColumn} source Source CurvedColumn\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.curvedColumn) {\r\n\t\t\tthis.curvedColumn.copyFrom(source.curvedColumn);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension of the curve.\r\n\t *\r\n\t * Tension defines how \"lose\" the line will be.\r\n\t *\r\n\t * 1 is the maximum tension which would result in pointy columns with\r\n\t * straight edges.\r\n\t *\r\n\t * The smaller the tension th wider the column will be.\r\n\t *\r\n\t * @default 0.7\r\n\t * @param {number} value tension (0-1)\r\n\t */\r\n\tpublic set tension(value: number) {\r\n\t\tthis.setPropertyValue(\"tension\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Tension (0-1)\r\n\t */\r\n\tpublic get tension(): number {\r\n\t\treturn this.getPropertyValue(\"tension\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the column.\r\n\t *\r\n\t * Available options: \"vertical\" (default) and \"horizontal\".\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @param {Orientation} value Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tthis.setPropertyValue(\"orientation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @type {Orientation} Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumn\"] = CurvedColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CurvedColumn.ts","import * as m from \"../es2015/charts\";\nwindow.am4charts = m;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./charts.js\n// module id = 319\n// module chunks = 4","/**\n * Module: gauge\n */\n\n/**\n * Elements: types\n */\nexport { GaugeChartDataItem, IGaugeChartDataFields, IGaugeChartProperties, IGaugeChartEvents, IGaugeChartAdapters, GaugeChart } from \"./.internal/charts/types/GaugeChart\";\nexport { RadarChartDataItem, IRadarChartDataFields, IRadarChartProperties, IRadarChartEvents, IRadarChartAdapters, RadarChart } from \"./.internal/charts/types/RadarChart\";\nexport { XYChartDataItem, IXYChartDataFields, IXYChartProperties, IXYChartEvents, IXYChartAdapters, XYChart } from \"./.internal/charts/types/XYChart\";\nexport { SerialChartDataItem, ISerialChartDataFields, ISerialChartProperties, ISerialChartEvents, ISerialChartAdapters, SerialChart } from \"./.internal/charts/types/SerialChart\";\nexport { PieChart3DDataItem, IPieChart3DDataFields, IPieChart3DProperties, IPieChart3DEvents, IPieChart3DAdapters, PieChart3D } from \"./.internal/charts/types/PieChart3D\";\nexport { PieChartDataItem, IPieChartDataFields, IPieChartProperties, IPieChartEvents, IPieChartAdapters, PieChart } from \"./.internal/charts/types/PieChart\";\nexport { SlicedChart, SlicedChartDataItem, ISlicedChartAdapters, ISlicedChartDataFields, ISlicedChartEvents, ISlicedChartProperties } from \"./.internal/charts/types/SlicedChart\";\nexport { FlowDiagramDataItem, IFlowDiagramDataFields, IFlowDiagramProperties, IFlowDiagramEvents, IFlowDiagramAdapters, FlowDiagram } from \"./.internal/charts/types/FlowDiagram\";\nexport { SankeyDiagramDataItem, ISankeyDiagramDataFields, ISankeyDiagramProperties, ISankeyDiagramEvents, ISankeyDiagramAdapters, SankeyDiagram } from \"./.internal/charts/types/SankeyDiagram\";\nexport { ChordDiagramDataItem, IChordDiagramDataFields, IChordDiagramProperties, IChordDiagramEvents, IChordDiagramAdapters, ChordDiagram } from \"./.internal/charts/types/ChordDiagram\";\nexport { TreeMapDataItem, ITreeMapDataFields, ITreeMapProperties, ITreeMapEvents, ITreeMapAdapters, TreeMap } from \"./.internal/charts/types/TreeMap\";\nexport { XYChart3DDataItem, IXYChart3DDataFields, IXYChart3DProperties, IXYChart3DEvents, IXYChart3DAdapters, XYChart3D } from \"./.internal/charts/types/XYChart3D\";\n\n/**\n * Elements: charts\n */\nexport { ChartDataItem, IChartDataFields, IChartProperties, IChartEvents, IChartAdapters, Chart } from \"./.internal/charts/Chart\";\nexport { LegendDataItem, LegendPosition, ILegendDataFields, ILegendProperties, ILegendEvents, ILegendAdapters, Legend, LegendSettings } from \"./.internal/charts/Legend\";\nexport { IHeatLegendProperties, IHeatLegendEvents, IHeatLegendAdapters, HeatLegend } from \"./.internal/charts/elements/HeatLegend\";\n\n/**\n * Elements: series\n */\nexport { SeriesDataItem, ISeriesDataFields, ISeriesProperties, ISeriesEvents, ISeriesAdapters, Series } from \"./.internal/charts/series/Series\";\nexport { XYSeriesDataItem, IXYSeriesDataFields, IXYSeriesProperties, IXYSeriesEvents, IXYSeriesAdapters, XYSeries } from \"./.internal/charts/series/XYSeries\";\nexport { LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesEvents, ILineSeriesAdapters, LineSeries } from \"./.internal/charts/series/LineSeries\";\nexport { ILineSeriesSegmentProperties, ILineSeriesSegmentEvents, ILineSeriesSegmentAdapters, LineSeriesSegment } from \"./.internal/charts/series/LineSeriesSegment\";\nexport { CandlestickSeriesDataItem, ICandlestickSeriesDataFields, ICandlestickSeriesProperties, ICandlestickSeriesEvents, ICandlestickSeriesAdapters, CandlestickSeries } from \"./.internal/charts/series/CandlestickSeries\";\nexport { OHLCSeriesDataItem, IOHLCSeriesDataFields, IOHLCSeriesProperties, IOHLCSeriesEvents, IOHLCSeriesAdapters, OHLCSeries } from \"./.internal/charts/series/OHLCSeries\";\nexport { ColumnSeriesDataItem, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesEvents, IColumnSeriesAdapters, ColumnSeries } from \"./.internal/charts/series/ColumnSeries\";\nexport { StepLineSeriesDataItem, IStepLineSeriesDataFields, IStepLineSeriesProperties, IStepLineSeriesEvents, IStepLineSeriesAdapters, StepLineSeries } from \"./.internal/charts/series/StepLineSeries\";\nexport { RadarSeriesDataItem, IRadarSeriesDataFields, IRadarSeriesProperties, IRadarSeriesEvents, IRadarSeriesAdapters, RadarSeries } from \"./.internal/charts/series/RadarSeries\";\nexport { RadarColumnSeriesDataItem, IRadarColumnSeriesDataFields, IRadarColumnSeriesProperties, IRadarColumnSeriesEvents, IRadarColumnSeriesAdapters, RadarColumnSeries } from \"./.internal/charts/series/RadarColumnSeries\";\nexport { PieSeriesDataItem, IPieSeriesDataFields, IPieSeriesProperties, IPieSeriesEvents, IPieSeriesAdapters, PieSeries } from \"./.internal/charts/series/PieSeries\";\nexport { FunnelSeries, FunnelSeriesDataItem, IFunnelSeriesAdapters, IFunnelSeriesDataFields, IFunnelSeriesEvents, IFunnelSeriesProperties } from \"./.internal/charts/series/FunnelSeries\";\nexport { IPyramidSeriesAdapters, IPyramidSeriesDataFields, IPyramidSeriesEvents, IPyramidSeriesProperties, PyramidSeries, PyramidSeriesDataItem } from \"./.internal/charts/series/PyramidSeries\";\nexport { IPictorialStackedSeriesAdapters, IPictorialStackedSeriesDataFields, IPictorialStackedSeriesEvents, IPictorialStackedSeriesProperties, PictorialStackedSeries, PictorialStackedSeriesDataItem } from \"./.internal/charts/series/PictorialStackedSeries\";\nexport { IPieTickProperties, IPieTickEvents, IPieTickAdapters, PieTick } from \"./.internal/charts/elements/PieTick\";\nexport { FunnelSlice, IFunnelSliceAdapters, IFunnelSliceEvents, IFunnelSliceProperties } from \"./.internal/charts/elements/FunnelSlice\";\nexport { IPieSeries3DProperties, IPieSeries3DDataFields, PieSeries3DDataItem, IPieSeries3DEvents, IPieSeries3DAdapters, PieSeries3D } from \"./.internal/charts/series/PieSeries3D\";\nexport { TreeMapSeriesDataItem, ITreeMapSeriesDataFields, ITreeMapSeriesProperties, ITreeMapSeriesEvents, ITreeMapSeriesAdapters, TreeMapSeries } from \"./.internal/charts/series/TreeMapSeries\";\nexport { ColumnSeries3DDataItem, IColumnSeries3DDataFields, IColumnSeries3DProperties, IColumnSeries3DEvents, IColumnSeries3DAdapters, ColumnSeries3D } from \"./.internal/charts/series/ColumnSeries3D\";\nexport { ConeSeriesDataItem, IConeSeriesDataFields, IConeSeriesProperties, IConeSeriesEvents, IConeSeriesAdapters, ConeSeries } from \"./.internal/charts/series/ConeSeries\";\nexport { CurvedColumnSeries, CurvedColumnSeriesDataItem, ICurvedColumnSeriesAdapters, ICurvedColumnSeriesDataFields, ICurvedColumnSeriesProperties, ICurvedColumnSeriesEvents } from \"./.internal/charts/series/CurvedColumnSeries\";\n\n/**\n * Elements: axes\n */\nexport { AxisDataItem, IAxisDataFields, IAxisProperties, IAxisEvents, IAxisAdapters, Axis } from \"./.internal/charts/axes/Axis\";\nexport { IGridProperties, IGridEvents, IGridAdapters, Grid } from \"./.internal/charts/axes/Grid\";\nexport { IAxisTickProperties, IAxisTickEvents, IAxisTickAdapters, AxisTick } from \"./.internal/charts/axes/AxisTick\";\nexport { IAxisLabelProperties, IAxisLabelEvents, IAxisLabelAdapters, AxisLabel } from \"./.internal/charts/axes/AxisLabel\";\nexport { IAxisLineProperties, IAxisLineEvents, IAxisLineAdapters, AxisLine } from \"./.internal/charts/axes/AxisLine\";\nexport { IAxisFillProperties, IAxisFillEvents, IAxisFillAdapters, AxisFill } from \"./.internal/charts/axes/AxisFill\";\nexport { IAxisRendererProperties, IAxisRendererEvents, IAxisRendererAdapters, AxisRenderer } from \"./.internal/charts/axes/AxisRenderer\";\nexport { IAxisBreakProperties, IAxisBreakEvents, IAxisBreakAdapters, AxisBreak } from \"./.internal/charts/axes/AxisBreak\";\nexport { ValueAxisDataItem, IMinMaxStep, IValueAxisDataFields, IValueAxisProperties, IValueAxisEvents, IValueAxisAdapters, ValueAxis } from \"./.internal/charts/axes/ValueAxis\";\nexport { CategoryAxisDataItem, ICategoryAxisDataFields, ICategoryAxisProperties, ICategoryAxisEvents, ICategoryAxisAdapters, CategoryAxis } from \"./.internal/charts/axes/CategoryAxis\";\nexport { ICategoryAxisBreakProperties, ICategoryAxisBreakEvents, ICategoryAxisBreakAdapters, CategoryAxisBreak } from \"./.internal/charts/axes/CategoryAxisBreak\";\nexport { DateAxisDataItem, IDateAxisDataFields, IDateAxisProperties, IDateAxisEvents, IDateAxisAdapters, DateAxis } from \"./.internal/charts/axes/DateAxis\";\nexport { DurationAxisDataItem, DurationAxis, IDurationAxisAdapters, IDurationAxisDataFields, IDurationAxisEvents, IDurationAxisProperties } from \"./.internal/charts/axes/DurationAxis\";\nexport { IDateAxisBreakProperties, IDateAxisBreakEvents, IDateAxisBreakAdapters, DateAxisBreak } from \"./.internal/charts/axes/DateAxisBreak\";\nexport { IValueAxisBreakProperties, IValueAxisBreakEvents, IValueAxisBreakAdapters, ValueAxisBreak } from \"./.internal/charts/axes/ValueAxisBreak\";\nexport { IAxisRendererXProperties, IAxisRendererXEvents, IAxisRendererXAdapters, AxisRendererX } from \"./.internal/charts/axes/AxisRendererX\";\nexport { IAxisRendererYProperties, IAxisRendererYEvents, IAxisRendererYAdapters, AxisRendererY } from \"./.internal/charts/axes/AxisRendererY\";\nexport { IAxisRendererRadialProperties, IAxisRendererRadialEvents, IAxisRendererRadialAdapters, AxisRendererRadial } from \"./.internal/charts/axes/AxisRendererRadial\";\nexport { IAxisLabelCircularProperties, IAxisLabelCircularEvents, IAxisLabelCircularAdapters, AxisLabelCircular } from \"./.internal/charts/axes/AxisLabelCircular\";\nexport { IAxisRendererCircularProperties, IAxisRendererCircularEvents, IAxisRendererCircularAdapters, AxisRendererCircular } from \"./.internal/charts/axes/AxisRendererCircular\";\nexport { IAxisFillCircularProperties, IAxisFillCircularEvents, IAxisFillCircularAdapters, AxisFillCircular } from \"./.internal/charts/axes/AxisFillCircular\";\nexport { IGridCircularProperties, IGridCircularEvents, IGridCircularAdapters, GridCircular } from \"./.internal/charts/axes/GridCircular\";\nexport { IAxisRendererX3DProperties, IAxisRendererX3DEvents, IAxisRendererX3DAdapters, AxisRendererX3D } from \"./.internal/charts/axes/AxisRendererX3D\";\nexport { IAxisRendererY3DProperties, IAxisRendererY3DEvents, IAxisRendererY3DAdapters, AxisRendererY3D } from \"./.internal/charts/axes/AxisRendererY3D\";\n\n/**\n * Elements: elements\n */\nexport { ITickProperties, ITickEvents, ITickAdapters, Tick } from \"./.internal/charts/elements/Tick\";\nexport { IBulletProperties, IBulletEvents, IBulletAdapters, Bullet } from \"./.internal/charts/elements/Bullet\";\nexport { ILabelBulletProperties, ILabelBulletEvents, ILabelBulletAdapters, LabelBullet } from \"./.internal/charts/elements/LabelBullet\";\nexport { ICircleBulletProperties, ICircleBulletEvents, ICircleBulletAdapters, CircleBullet } from \"./.internal/charts/elements/CircleBullet\";\nexport { ErrorBullet, IErrorBulletAdapters, IErrorBulletEvents, IErrorBulletProperties } from \"./.internal/charts/elements/ErrorBullet\";\nexport { IXYChartScrollbarProperties, IXYChartScrollbarEvents, IXYChartScrollbarAdapters, XYChartScrollbar } from \"./.internal/charts/elements/XYChartScrollbar\";\nexport { IClockHandProperties, IClockHandEvents, IClockHandAdapters, ClockHand } from \"./.internal/charts/elements/ClockHand\";\n\nexport { IFlowDiagramNodeProperties, IFlowDiagramNodeEvents, IFlowDiagramNodeAdapters, FlowDiagramNode } from \"./.internal/charts/elements/FlowDiagramNode\";\nexport { IFlowDiagramLinkProperties, IFlowDiagramLinkEvents, IFlowDiagramLinkAdapters, FlowDiagramLink } from \"./.internal/charts/elements/FlowDiagramLink\";\n\nexport { ISankeyNodeProperties, ISankeyNodeEvents, ISankeyNodeAdapters, SankeyNode } from \"./.internal/charts/elements/SankeyNode\";\nexport { ISankeyLinkProperties, ISankeyLinkEvents, ISankeyLinkAdapters, SankeyLink } from \"./.internal/charts/elements/SankeyLink\";\n\nexport { IChordNodeProperties, IChordNodeEvents, IChordNodeAdapters, ChordNode } from \"./.internal/charts/elements/ChordNode\";\nexport { IChordLinkProperties, IChordLinkEvents, IChordLinkAdapters, ChordLink } from \"./.internal/charts/elements/ChordLink\";\n\nexport { NavigationBarDataItem, INavigationBarDataFields, INavigationBarProperties, INavigationBarEvents, INavigationBarAdapters, NavigationBar } from \"./.internal/charts/elements/NavigationBar\";\n\nexport { Column, IColumnAdapters, IColumnEvents, IColumnProperties } from \"./.internal/charts/elements/Column\";\nexport { Candlestick, ICandlestickAdapters, ICandlestickEvents, ICandlestickProperties } from \"./.internal/charts/elements/Candlestick\";\nexport { OHLC, IOHLCAdapters, IOHLCEvents, IOHLCProperties } from \"./.internal/charts/elements/OHLC\";\nexport { RadarColumn, IRadarColumnAdapters, IRadarColumnEvents, IRadarColumnProperties } from \"./.internal/charts/elements/RadarColumn\";\nexport { Column3D, IColumn3DAdapters, IColumn3DEvents, IColumn3DProperties } from \"./.internal/charts/elements/Column3D\";\nexport { ConeColumn, IConeColumnAdapters, IConeColumnEvents, IConeColumnProperties } from \"./.internal/charts/elements/ConeColumn\";\nexport { CurvedColumn, ICurvedColumnAdapters, ICurvedColumnEvents, ICurvedColumnProperties } from \"./.internal/charts/elements/CurvedColumn\";\n\n\n/**\n * Elements: cursors\n */\nexport { IXYCursorProperties, IXYCursorEvents, IXYCursorAdapters, XYCursor } from \"./.internal/charts/cursors/XYCursor\";\nexport { ICursorProperties, ICursorEvents, ICursorAdapters, Cursor } from \"./.internal/charts/cursors/Cursor\";\nexport { IRadarCursorProperties, IRadarCursorEvents, IRadarCursorAdapters, RadarCursor } from \"./.internal/charts/cursors/RadarCursor\";\n\n\n\n// WEBPACK FOOTER //\n// ../../src/charts.ts","/**\r\n * Module for building Gauge charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart, IRadarChartProperties, IRadarChartDataFields, IRadarChartAdapters, IRadarChartEvents, RadarChartDataItem } from \"./RadarChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, IListEvents, ListDisposer } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Component, IComponentEvents } from \"../../core/Component\";\r\nimport { ClockHand } from \"../elements/ClockHand\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[GaugeChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class GaugeChartDataItem extends RadarChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {GaugeChart}\r\n\t */\r\n\tpublic _component!: GaugeChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartDataFields extends IRadarChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartProperties extends IRadarChartProperties { }\r\n\r\n/**\r\n * Defines events for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartEvents extends IRadarChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GaugeChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGaugeChartAdapters extends IRadarChartAdapters, IGaugeChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Gauge chart.\r\n *\r\n * @see {@link IGaugeChartEvents} for a list of available Events\r\n * @see {@link IGaugeChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/gauge-chart/} for documentation\r\n * @important\r\n */\r\nexport class GaugeChart extends RadarChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IGaugeChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IGaugeChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IGaugeChartProperties}\r\n\t */\r\n\tpublic _properties!: IGaugeChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IGaugeChartAdapters}\r\n\t */\r\n\tpublic _adapter!: IGaugeChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IGaugeChartEvents}\r\n\t */\r\n\tpublic _events!: IGaugeChartEvents;\r\n\r\n\t/**\r\n\t * A list of [[ClockHand]] items displayed on this Gauge chart.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tpublic hands: ListTemplate;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChart\";\r\n\r\n\t\tthis.startAngle = 180;\r\n\t\tthis.endAngle = 360;\r\n\r\n\t\tthis.hands = new ListTemplate(new ClockHand());\r\n\t\tthis.hands.events.on(\"inserted\", this.processHand, this, false);\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.hands));\r\n\t\tthis._disposers.push(this.hands.template);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Gauge chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a [[ClockHand]] when it is added to the chart.\r\n\t *\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tprotected processHand(event: IListEvents[\"inserted\"]): void {\r\n\t\tlet hand: ClockHand = event.newValue;\r\n\t\tif (!hand.axis) {\r\n\t\t\thand.axis = this.xAxes.getIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GaugeChart\"] = GaugeChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/GaugeChart.ts","/**\r\n * 3D Pie chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieChart, IPieChartProperties, IPieChartDataFields, IPieChartAdapters, IPieChartEvents, PieChartDataItem } from \"./PieChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { PieSeries3D } from \"../series/PieSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieChart3DDataItem extends PieChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieChart3D}\r\n\t */\r\n\tpublic _component!: PieChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DDataFields extends IPieChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DProperties extends IPieChartProperties {\r\n\r\n\t/**\r\n\t * Pie's \"depth\" or \"height\" in pixels.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Pie's angle at which we are looking at it. (degrees)\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DEvents extends IPieChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieChart3DAdapters extends IPieChartAdapters, IPieChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D Pie chart.\r\n *\r\n * * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czech Republic\",\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\": \"Czech Republic\",\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\": \"Czech Republic\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"Pie3DChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChart3DEvents} for a list of available Events\r\n * @see {@link IPieChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nexport class PieChart3D extends PieChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t *\r\n\t * @type {IPieChart3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieChart3DProperties}\r\n\t */\r\n\tpublic _properties!: IPieChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieChart3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieChart3DEvents}\r\n\t */\r\n\tpublic _events!: IPieChart3DEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PieSeries3D}\r\n\t */\r\n\tpublic _seriesType: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3D\";\r\n\r\n\t\tthis.depth = 20;\r\n\t\tthis.angle = 10;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D pie in pixels.\r\n\t *\r\n\t * This will determine \"height\" of the pie.\r\n\t *\r\n\t * @default 20\r\n\t * @param {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value);\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * An angle of a \"point of view\" in degrees.\r\n\t *\r\n\t * @default 10\r\n\t * @param {number} value Angle (degrees)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Angle (degrees)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series.\r\n\t *\r\n\t * @return {PieSeries3D} New series\r\n\t */\r\n\tprotected createSeries():this[\"_seriesType\"]{\r\n\t\treturn new PieSeries3D();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieChart3D\"] = PieChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PieChart3D.ts","/**\r\n * Sliced chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, IPercentChartProperties, IPercentChartDataFields, IPercentChartAdapters, IPercentChartEvents, PercentChartDataItem } from \"./PercentChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { FunnelSeries, FunnelSeriesDataItem } from \"../series/FunnelSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, IListEvents, ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[SlicedChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class SlicedChartDataItem extends PercentChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {SlicedChart}\r\n\t */\r\n\tpublic _component!: SlicedChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartDataFields extends IPercentChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[SlicedChart]]\r\n */\r\nexport interface ISlicedChartProperties extends IPercentChartProperties { }\r\n\r\n/**\r\n * Defines events for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartEvents extends IPercentChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SlicedChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISlicedChartAdapters extends IPercentChartAdapters, ISlicedChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Sliced chart.\r\n *\r\n * @see {@link ISlicedChartEvents} for a list of available Events\r\n * @see {@link ISlicedChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class SlicedChart extends PercentChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {ISlicedChartDataFields}\r\n\t */\r\n\tpublic _dataFields: ISlicedChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ISlicedChartProperties}\r\n\t */\r\n\tpublic _properties!: ISlicedChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ISlicedChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ISlicedChartEvents}\r\n\t */\r\n\tpublic _events!: ISlicedChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {FunnelSeries}\r\n\t */\r\n\tpublic _seriesType: FunnelSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChart\";\r\n\r\n\t\tthis.seriesContainer.layout = \"horizontal\";\r\n\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Sliced chart\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the chart, causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SlicedChart\"] = SlicedChart;\r\nregistry.registeredClasses[\"SlicedChartDataItem\"] = SlicedChartDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/SlicedChart.ts","/**\r\n * Chord diagram module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, IChartProperties, IChartDataFields, IChartAdapters, IChartEvents, ChartDataItem } from \"../Chart\";\r\nimport { FlowDiagram, FlowDiagramDataItem, IFlowDiagramAdapters, IFlowDiagramDataFields, IFlowDiagramEvents, IFlowDiagramProperties } from \"./FlowDiagram\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ChordNode } from \"../elements/ChordNode\";\r\nimport { ChordLink } from \"../elements/ChordLink\";\r\nimport { LinearGradientModifier } from \"../../core/rendering/fills/LinearGradientModifier\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { toColor, Color } from \"../../core/utils/Color\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo rearange notes after dragged\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ChordDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ChordDiagramDataItem extends FlowDiagramDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {ChordDiagram}\r\n\t */\r\n\tpublic _component!: ChordDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t * @type {ChordLink}\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t *\r\n\t * @type {ChordNode}\r\n\t */\r\n\tpublic fromNode: ChordNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t *\r\n\t * @type {ChordNode}\r\n\t */\r\n\tpublic toNode: ChordNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagramDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramDataFields extends IFlowDiagramDataFields {\r\n\r\n\t/**\r\n\t * Name of the source node.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tfromName?: string;\r\n\r\n\t/**\r\n\t * Name of the target node.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\ttoName?: string;\r\n\r\n\t/**\r\n\t * Value of the link between two nodes.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * Color of a from node\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcolor?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[ChordDiagram]]\r\n */\r\nexport interface IChordDiagramProperties extends IFlowDiagramProperties {\r\n\t/**\r\n\t * Radius of the Chord. Absolute or relative.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes. Absolute or relative. Negative value means that the inner radius will be calculated from the radius, not from the center.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * If you set this to true, all the lines will be of the same width.\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tnonRibbon?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramEvents extends IFlowDiagramEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordDiagramAdapters extends IFlowDiagramAdapters, IChordDiagramProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Chord Diagram chart.\r\n *\r\n * @see {@link IChordDiagramEvents} for a list of available Events\r\n * @see {@link IChordDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/chord-diagram/} for documentation\r\n * @important\r\n */\r\nexport class ChordDiagram extends FlowDiagram {\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t *\r\n\t * @type {ChordDiagramDataItem}\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IChordDiagramDataFields}\r\n\t */\r\n\tpublic _dataFields: IChordDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IChordDiagramProperties}\r\n\t */\r\n\tpublic _properties!: IChordDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordDiagramEvents}\r\n\t */\r\n\tpublic _events!: IChordDiagramEvents;\r\n\r\n\t/**\r\n\t * A list of chart's Chord nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate}\r\n\t */\r\n\tpublic nodes: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t * @type {ChordLink}\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * Sorted nodes iterator.\r\n\t *\r\n\t * @ignore\r\n\t * @type {Iterator}\r\n\t */\r\n\tprotected _sorted: $iter.Iterator<[string, ChordNode]>;\r\n\r\n\t/**\r\n\t * [valueAngle description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tpublic valueAngle: number = 0;\r\n\r\n\t/**\r\n\t * A container for chord elemens.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic chordContainer:Container;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node:ChordNode;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagram\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\r\n\t\tthis.innerRadius = - 15;\r\n\r\n\t\tthis.nodePadding = 5;\r\n\r\n\t\tlet chordContainer = this.chartContainer.createChild(Container);\r\n\t\tchordContainer.align = \"center\";\r\n\t\tchordContainer.valign = \"middle\";\r\n\t\tchordContainer.shouldClone = false;\r\n\t\tchordContainer.layout = \"absolute\";\r\n\t\tthis.chordContainer = chordContainer;\r\n\r\n\t\tthis.nodesContainer.parent = chordContainer;\r\n\t\tthis.linksContainer.parent = chordContainer;\r\n\r\n\t\tthis.chartContainer.events.on(\"maxsizechanged\", this.invalidate, this, false); \r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Redraws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tlet nodesContainer = this.nodesContainer;\r\n\r\n\t\tlet endAngle = this.endAngle;\r\n\t\tlet startAngle = this.startAngle + this.nodePadding / 2;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(chartContainer.innerWidth / rect.width, chartContainer.innerHeight / rect.height);\r\n\r\n\t\tif(!$type.isNumber(maxRadius)){\r\n\t\t\tmaxRadius = 0;\r\n\t\t}\r\n\r\n\t\tlet chartRadius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\r\n\t\tlet radius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\t\tlet pixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, radius, true);\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\t\tlet count = 0;\r\n\r\n\t\tlet newTotal = 0;\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tthis.getNodeValue(node);\r\n\t\t\tcount++;\r\n\t\t\tlet value = node.total;\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\t\t\tnewTotal += value;\r\n\t\t});\r\n\r\n\t\tthis.valueAngle = (endAngle - this.startAngle - this.nodePadding * count) / newTotal;\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet slice = node.slice;\r\n\r\n\t\t\tslice.radius = radius;\r\n\t\t\tslice.innerRadius = pixelInnerRadius;\r\n\r\n\t\t\tlet value = node.total;\r\n\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tnode.adjustedTotal = value;\r\n\r\n\t\t\tlet arc: number;\r\n\t\t\tif (this.nonRibbon) {\r\n\t\t\t\tarc = (endAngle - this.startAngle) / count - this.nodePadding;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tarc = this.valueAngle * value;\r\n\t\t\t}\r\n\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.startAngle = startAngle;\r\n\t\t\tnode.trueStartAngle = startAngle;\r\n\t\t\tnode.parent = this.nodesContainer;\r\n\t\t\tnode.validate(); // otherwise flickers - nodes are already created, but not yet positioned etc.\r\n\t\t\tstartAngle += arc + this.nodePadding;\r\n\t\t})\r\n\r\n\t\tthis.chordContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.chordContainer.invalidateLayout();\r\n\r\n\t\tsuper.validate();\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Chord diagram\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new data item.\r\n\t *\r\n\t * @return {this} Data item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ChordDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * If you set this to true, all the lines will be of the same width. This is done by making middleLine of a ChordLink visible.\r\n\t *\r\n\t * @param {boolean} value\r\n\t */\r\n\tpublic set nonRibbon(value: boolean) {\r\n\t\tthis.setPropertyValue(\"nonRibbon\", value, true);\r\n\t\tthis.links.template.middleLine.strokeOpacity = 1;\r\n\t\tthis.links.template.link.fillOpacity = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Non-ribbon\r\n\t */\r\n\tpublic get nonRibbon(): boolean {\r\n\t\treturn this.getPropertyValue(\"nonRibbon\");\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createNode():this[\"_node\"]{\r\n\t\tlet node = new ChordNode();\r\n\t\tthis._disposers.push(node);\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createLink():this[\"_link\"]{\r\n\t\tlet link = new ChordLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordDiagram\"] = ChordDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/ChordDiagram.ts","/**\r\n * Functionality for drawing quadratic curves.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Line, ILineProperties, ILineAdapters, ILineEvents } from \"./Line\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../Sprite\";\r\nimport { IPoint, IOrientationPoint } from \"../defs/IPoint\";\r\nimport { IWavedShape } from \"../defs/IWavedShape\";\r\nimport { color } from \"../utils/Color\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $type from \"../utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines available properties for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveProperties extends ILineProperties {\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tcpx?: number;\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tcpy?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveEvents extends ILineEvents { }\r\n\r\n/**\r\n * Defines adapters for [[QuadraticCurve]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IQuadraticCurveAdapters extends ILineAdapters, IQuadraticCurveProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws a waved line.\r\n *\r\n * @see {@link IQuadraticCurveEvents} for a list of available events\r\n * @see {@link IQuadraticCurveAdapters} for a list of available Adapters\r\n */\r\nexport class QuadraticCurve extends Line {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IQuadraticCurveProperties}\r\n\t */\r\n\tpublic _properties!: IQuadraticCurveProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IQuadraticCurveAdapters}\r\n\t */\r\n\tpublic _adapter!: IQuadraticCurveAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IQuadraticCurveEvents}\r\n\t */\r\n\tpublic _events!: IQuadraticCurveEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"QuadraticCurve\";\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\t\tthis.pixelPerfect = false;\r\n\r\n\t\tthis.fill = color();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the waved line.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\t//super.draw();\r\n\t\tif($type.isNumber(this.x1 + this.x2 + this.y1 + this.y2 + this.cpx + this.cpy )){\r\n\r\n\t\t\tlet p1: IPoint = { x: this.x1, y: this.y1 };\r\n\t\t\tlet p2: IPoint = { x: this.x2, y: this.y2 };\r\n\t\t\tlet cp: IPoint = { x: this.cpx, y: this.cpy };\r\n\r\n\t\t\tlet d: string = $path.moveTo(p1) + $path.quadraticCurveTo(p2, cp);\r\n\r\n\t\t\tthis.path = d;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t *\r\n\t * @param {number} value X\r\n\t */\r\n\tpublic set cpx(value: number) {\r\n\t\tthis.setPropertyValue(\"cpx\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} X\r\n\t */\r\n\tpublic get cpx(): number {\r\n\t\treturn this.getPropertyValue(\"cpx\");\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t *\r\n\t * @param {number} value Y\r\n\t */\r\n\tpublic set cpy(value: number) {\r\n\t\tthis.setPropertyValue(\"cpy\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Y\r\n\t */\r\n\tpublic get cpy(): number {\r\n\t\treturn this.getPropertyValue(\"cpy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position along the line (0-1) into pixel coordinates.\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {IOrientationPoint} Coordinates\r\n\t */\r\n\tpublic positionToPoint(position: number): IOrientationPoint {\r\n\t\tlet p1 = {x:this.x1, y:this.y1};\r\n\t\tlet cp = {x:this.cpx, y:this.cpy};\r\n\t\tlet p2 = {x:this.x2, y:this.y2};\r\n\r\n\t\tlet point1 = $math.getPointOnQuadraticCurve(p1, p2, cp, position);\r\n\t\tlet point2 = $math.getPointOnQuadraticCurve(p1, p2, cp, position + 0.001);\r\n\r\n\t\treturn {x:point1.x, y:point1.y, angle:$math.getAngle(point1, point2)};\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/core/elements/QuadraticCurve.ts","/**\r\n * TreeMap chart module.\r\n *\r\n * Parts of the functionality used in this module are taken from D3.js library\r\n * (https://d3js.org/)\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Component, IComponentEvents } from \"../../core/Component\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { TreeMapSeries } from \"../series/TreeMapSeries\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { TreeMapSeriesDataItem } from \"../series/TreeMapSeries\";\r\nimport { NavigationBar } from \"../elements/NavigationBar\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {TreeMap}\r\n\t */\r\n\tpublic _component!: TreeMap;\r\n\r\n\t/**\r\n\t * A treemap level this data item is displayed at.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _level: number;\r\n\r\n\t/**\r\n\t * Related series.\r\n\t *\r\n\t * @type {TreeMapSeries}\r\n\t */\r\n\tprotected _series: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Related series data item.\r\n\t *\r\n\t * @type {TreeMapSeriesDataItem}\r\n\t */\r\n\tpublic seriesDataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {TreeMapDataItem[]}\r\n\t */\r\n\tpublic rows: TreeMapDataItem[] = [];\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number}\r\n\t */\r\n\tpublic rowsRatio: number;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic dice: boolean;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapDataItem\";\r\n\r\n\t\tthis.values.value = {};\r\n\r\n\t\tthis.values.x0 = {};\r\n\r\n\t\tthis.values.y0 = {};\r\n\r\n\t\tthis.values.x1 = {};\r\n\r\n\t\tthis.values.y1 = {};\r\n\r\n\t\tthis.hasChildren.children = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Numeric value of the item.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\tlet value = this.values[\"value\"].workingValue;\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t\tif (this.children) {\r\n\t\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\t\tif ($type.isNumber(child.value)) {\r\n\t\t\t\t\t\tvalue += child.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\tpublic get percent(): number {\r\n\t\tif (this.parent) {\r\n\t\t\treturn this.value / this.parent.value * 100;\r\n\t\t}\r\n\t\treturn 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} value X\r\n\t */\r\n\tpublic set x0(value: number) {\r\n\t\tthis.setValue(\"x0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} X\r\n\t */\r\n\tpublic get x0(): number {\r\n\t\treturn this.values.x0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} value X\r\n\t */\r\n\tpublic set x1(value: number) {\r\n\t\tthis.setValue(\"x1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} X\r\n\t */\r\n\tpublic get x1(): number {\r\n\t\treturn this.values.x1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} value Y\r\n\t */\r\n\tpublic set y0(value: number) {\r\n\t\tthis.setValue(\"y0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Y\r\n\t */\r\n\tpublic get y0(): number {\r\n\t\treturn this.values.y0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} value Y\r\n\t */\r\n\tpublic set y1(value: number) {\r\n\t\tthis.setValue(\"y1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Y\r\n\t */\r\n\tpublic get y1(): number {\r\n\t\treturn this.values.y1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's name.\r\n\t *\r\n\t * @param {string} name Name\r\n\t */\r\n\tpublic set name(name: string) {\r\n\t\tthis.setProperty(\"name\", name);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties.name;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of item's sub-children.\r\n\t *\r\n\t * Having children means that the TreeMap chat will automatically be\r\n\t * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n\t * display its children.\r\n\t *\r\n\t * Treemap can have any level of nesting.\r\n\t *\r\n\t * @param {OrderedListTemplate} children Item's children\r\n\t */\r\n\tpublic set children(children: OrderedListTemplate) {\r\n\t\tthis.setProperty(\"children\", children);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {OrderedListTemplate} Item's children\r\n\t */\r\n\tpublic get children(): OrderedListTemplate {\r\n\t\treturn this.properties.children;\r\n\t}\r\n\r\n\t/**\r\n\t * Depth level in the treemap hierarchy.\r\n\t *\r\n\t * The top-level item will have level set at 0. Its children will have\r\n\t * level 1, and so on.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\tif (!this.parent) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.parent.level + 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's color.\r\n\t *\r\n\t * If not set, will use parent's color, or, if that is not set either,\r\n\t * automatically assigned color from chart's color set. (`chart.colors`)\r\n\t *\r\n\t * @param {Color} value Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Color} Color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\tlet color = this.properties.color;\r\n\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.parent) {\r\n\t\t\t\tcolor = this.parent.color;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tcolor = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn color;\r\n\t}\r\n\r\n\t/**\r\n\t * series of data item\r\n\t * @todo: proper descrition\r\n\t */\r\n\tpublic set series(series: TreeMapSeries) {\r\n\t\tif (this._series) {\r\n\t\t\tthis.component.series.removeValue(this._series);\r\n\t\t\tthis._series.dispose();\r\n\t\t}\r\n\t\tthis._series = series;\r\n\t\tthis._disposers.push(series);\r\n\t}\r\n\r\n\tpublic get series(): TreeMapSeries {\r\n\t\treturn this._series;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMap]].\r\n */\r\nexport interface ITreeMapDataFields extends IXYChartDataFields {\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's numeric value.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's sub-items.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tchildren?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's name.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's color.\r\n\t *\r\n\t * If not set, a new color will be automatically assigned to each item as\r\n\t * defined by theme.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcolor?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMap]].\r\n */\r\nexport interface ITreeMapProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Maximum levels the chart will allow drilling down to.\r\n\t *\r\n\t * @default 2\r\n\t * @type {number}\r\n\t */\r\n\tmaxLevels?: number;\r\n\r\n\t/**\r\n\t * Current drill-down level the treemap is at.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tcurrentLevel?: number;\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * @default \"descending\"\r\n\t * @type {\"none\" | \"ascending\" | \"descending\"}\r\n\t */\r\n\tsorting?: \"none\" | \"ascending\" | \"descending\";\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[TreeMap]].\r\n */\r\nexport interface ITreeMapEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMap]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapAdapters extends IXYChartAdapters, ITreeMapProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapEvents} for a list of available Events\r\n * @see {@link ITreeMapAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/} for documentation\r\n */\r\nexport class TreeMap extends XYChart {\r\n\r\n\t/**\r\n\t * Defines a type of the data item used for this chart.\r\n\t *\r\n\t * @type {TreeMapDataItem}\r\n\t */\r\n\tpublic _dataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {ITreeMapDataFields}\r\n\t */\r\n\tpublic _dataFields: ITreeMapDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ITreeMapProperties}\r\n\t */\r\n\tpublic _properties!: ITreeMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ITreeMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ITreeMapEvents}\r\n\t */\r\n\tpublic _events!: ITreeMapEvents;\r\n\r\n\t/**\r\n\t * A horizontal value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t *\r\n\t * @type {ValueAxis}\r\n\t */\r\n\tpublic xAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * A vertical value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t *\r\n\t * @type {ValueAxis}\r\n\t */\r\n\tpublic yAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * An algorithm used to divide area into squares based on their value.\r\n\t *\r\n\t * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"layoutAlgorithm\": \"sliceDice\",\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n\t * @default squarify\r\n\t * @type {function}\r\n\t */\r\n\tpublic layoutAlgorithm: (parent: TreeMapDataItem) => void = this.squarify;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PieSeries}\r\n\t */\r\n\tpublic _seriesType: TreeMapSeries;\r\n\r\n\t/**\r\n\t * [_homeDataItem description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {TreeMapDataItem}\r\n\t */\r\n\tprotected _homeDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * [_tempSeries description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {TreeMapSeries[]}\r\n\t */\r\n\tprotected _tempSeries: TreeMapSeries[];\r\n\r\n\t/**\r\n\t * A text dispalyed on the home button in breadcurmb nav control.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tprotected _homeText: string;\r\n\r\n\t/**\r\n\t * A set of colors to be applied autoamtically to each new chart item, if\r\n\t * not explicitly set.\r\n\t *\r\n\t * @type {ColorSet}\r\n\t */\r\n\tpublic colors: ColorSet;\r\n\r\n\t/**\r\n\t * Holds series object for each TreeMap level.\r\n\t *\r\n\t * \"0\" is the top-level series.\r\n\t * \"1\" is the second level.\r\n\t * Etc.\r\n\t *\r\n\t * @todo Description\r\n\t * @param {DictionaryTemplate} Templates for each level\r\n\t */\r\n\tpublic seriesTemplates: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * Is the chart zoomable?\r\n\t *\r\n\t * If the chart is `zoomable`, and items have sub-items, the chart will\r\n\t * drill-down to sub-items when click on their parent item.\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic zoomable: boolean = true;\r\n\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t *\r\n\t * @type {NavigationBar}\r\n\t */\r\n\tprotected _navigationBar: NavigationBar;\r\n\r\n\t/**\r\n\t * Currently selected data item.\r\n\t * @type {TreeMapDataItem}\r\n\t * @readonly\r\n\t */\r\n\tpublic currentlyZoomed: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMap\";\r\n\r\n\t\tthis.maxLevels = 2;\r\n\t\tthis.currentLevel = 0;\r\n\r\n\t\tthis.colors = new ColorSet();\r\n\t\tthis.sorting = \"descending\";\r\n\r\n\t\t// create two value axes for the chart\r\n\t\tlet xAxis = this.xAxes.push(new ValueAxis());\r\n\t\txAxis.title.disabled = true;\r\n\t\txAxis.strictMinMax = true;\r\n\r\n\t\tlet xRenderer = xAxis.renderer;\r\n\t\txRenderer.inside = true;\r\n\t\txRenderer.labels.template.disabled = true;\r\n\t\txRenderer.ticks.template.disabled = true;\r\n\t\txRenderer.grid.template.disabled = true;\r\n\t\txRenderer.axisFills.template.disabled = true;\r\n\t\txRenderer.minGridDistance = 100;\r\n\t\txRenderer.line.disabled = true;\r\n\t\txRenderer.baseGrid.disabled = true;\r\n\t\t//xRenderer.inversed = true;\r\n\r\n\t\tlet yAxis = this.yAxes.push(new ValueAxis());\r\n\t\tyAxis.title.disabled = true;\r\n\t\tyAxis.strictMinMax = true;\r\n\r\n\t\tlet yRenderer = yAxis.renderer;\r\n\t\tyRenderer.inside = true;\r\n\t\tyRenderer.labels.template.disabled = true;\r\n\t\tyRenderer.ticks.template.disabled = true;\r\n\t\tyRenderer.grid.template.disabled = true;\r\n\t\tyRenderer.axisFills.template.disabled = true;\r\n\t\tyRenderer.minGridDistance = 100;\r\n\t\tyRenderer.line.disabled = true;\r\n\t\tyRenderer.baseGrid.disabled = true;\r\n\t\tyRenderer.inversed = true;\r\n\r\n\t\t// shortcuts\r\n\t\tthis.xAxis = xAxis;\r\n\t\tthis.yAxis = yAxis;\r\n\r\n\t\tconst template = new TreeMapSeries();\r\n\t\tthis.seriesTemplates = new DictionaryTemplate(template);\r\n\t\tthis._disposers.push(new DictionaryDisposer(this.seriesTemplates));\r\n\t\tthis._disposers.push(template);\r\n\r\n\t\tthis.zoomOutButton.events.on(\"hit\", () => {\r\n\t\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis.seriesTemplates.events.on(\"insertKey\", (event) => {\r\n\t\t\tevent.newValue.isTemplate = true;\r\n\t\t}, undefined, false)\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t *\r\n\t * @type {NavigationBar}\r\n\t */\r\n\tpublic set navigationBar(navigationBar: NavigationBar) {\r\n\t\tif (this._navigationBar != navigationBar) {\r\n\t\t\tthis._navigationBar = navigationBar;\r\n\t\t\tnavigationBar.parent = this;\r\n\t\t\tnavigationBar.toBack();\r\n\t\t\tnavigationBar.links.template.events.on(\"hit\", (event) => {\r\n\t\t\t\tlet dataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tthis.zoomToChartDataItem(dataItem);\r\n\t\t\t\tthis.createTreeSeries(dataItem);\r\n\t\t\t}, undefined, true);\r\n\r\n\t\t\tthis._disposers.push(navigationBar);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns navigationBar if it is added to a chart\r\n\t */\r\n\tpublic get navigationBar(): NavigationBar {\r\n\t\treturn this._navigationBar;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * (Re)validates chart's data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.dispose();\r\n\t\t}\r\n\r\n\t\tlet homeDataItem = this.dataItems.template.clone(); // cant' use createDataItem here!\r\n\r\n\t\tthis._homeDataItem = homeDataItem;\r\n\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tdataItem.parent = homeDataItem;\r\n\t\t});\r\n\r\n\t\thomeDataItem.children = this.dataItems;\r\n\r\n\t\thomeDataItem.x0 = 0;\r\n\t\thomeDataItem.y0 = 0;\r\n\t\thomeDataItem.name = this._homeText;\r\n\r\n\t\tlet maxX = 1000;\r\n\t\tlet maxY = (maxX * this.pixelHeight / this.pixelWidth) || 1000;\r\n\r\n\t\thomeDataItem.x1 = maxX;\r\n\t\thomeDataItem.y1 = maxY;\r\n\r\n\t\tthis.xAxis.min = 0;\r\n\t\tthis.xAxis.max = maxX;\r\n\r\n\t\tthis.yAxis.min = 0;\r\n\t\tthis.yAxis.max = maxY;\r\n\r\n\t\tthis.layoutItems(homeDataItem);\r\n\r\n\t\tthis.createTreeSeries(homeDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Layouts and sizes all items according to their value and\r\n\t * `layoutAlgorithm`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Parent data item\r\n\t */\r\n\tpublic layoutItems(parent: TreeMapDataItem, sorting?: \"none\" | \"ascending\" | \"descending\"): void {\r\n\t\tif (parent) {\r\n\t\t\tlet children = parent.children;\r\n\r\n\t\t\tif (!sorting) {\r\n\t\t\t\tsorting = this.sorting;\r\n\t\t\t}\r\n\r\n\t\t\tif (sorting == \"ascending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn a.value - b.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (sorting == \"descending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn b.value - a.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.layoutAlgorithm(parent);\r\n\r\n\t\t\tfor (let i = 0, len = children.length; i < len; i++) {\r\n\r\n\t\t\t\tlet node = children.getIndex(i);\r\n\r\n\t\t\t\tif (node.children) {\r\n\t\t\t\t\tthis.layoutItems(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates and returns a new treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param {TreeMapDataItem} dataItem Data item to create series out of\r\n\t */\r\n\tprotected createTreeSeries(dataItem: TreeMapDataItem) {\r\n\t\tthis._tempSeries = [];\r\n\r\n\t\tlet navigationData = [dataItem];\r\n\r\n\t\t// create parent series and navigation data\r\n\t\tlet parentDataItem = dataItem.parent;\r\n\t\twhile (parentDataItem != undefined) {\r\n\t\t\tthis.initSeries(parentDataItem);\r\n\t\t\tnavigationData.push(parentDataItem);\r\n\t\t\tparentDataItem = parentDataItem.parent;\r\n\t\t}\r\n\r\n\t\tnavigationData.reverse();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.data = navigationData;\r\n\t\t}\r\n\r\n\t\t// create series and children series\r\n\t\tthis.createTreeSeriesReal(dataItem);\r\n\r\n\t\t// add those which are not in the list\r\n\t\t$array.each(this._tempSeries, (series) => {\r\n\t\t\tif (this.series.indexOf(series) == -1) {\r\n\t\t\t\tthis.series.push(series);\r\n\t\t\t}\r\n\t\t\tseries.zIndex = series.level;\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * [createTreeSeriesReal description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {TreeMapDataItem} dataItem [description]\r\n\t */\r\n\tprotected createTreeSeriesReal(dataItem: TreeMapDataItem) {\r\n\t\tif (dataItem.children) {\r\n\t\t\tlet level = dataItem.level;\r\n\r\n\t\t\tif (level < this.currentLevel + this.maxLevels) {\r\n\r\n\t\t\t\tthis.initSeries(dataItem);\r\n\r\n\t\t\t\tfor (let i = 0; i < dataItem.children.length; i++) {\r\n\t\t\t\t\tlet child = dataItem.children.getIndex(i);\r\n\t\t\t\t\tif (child.children) {\r\n\t\t\t\t\t\tthis.createTreeSeriesReal(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * Overriding, as tree map series are created on the fly all the time\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Initializes the treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param {TreeMapDataItem} dataItem Chart data item\r\n\t */\r\n\tprotected initSeries(dataItem: TreeMapDataItem) {\r\n\t\tif (!dataItem.series) {\r\n\t\t\tlet series: TreeMapSeries;\r\n\r\n\t\t\tlet template = this.seriesTemplates.getKey(dataItem.level.toString());\r\n\t\t\tif (template) {\r\n\t\t\t\tseries = template.clone();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tseries = this.series.create();\r\n\t\t\t}\r\n\r\n\t\t\tseries.name = dataItem.name;\r\n\t\t\tseries.parentDataItem = dataItem;\r\n\t\t\tdataItem.series = series;\r\n\r\n\t\t\tlet level = dataItem.level;\r\n\t\t\tseries.level = level;\r\n\r\n\t\t\tlet dataContext: any = dataItem.dataContext;\r\n\t\t\tif (dataContext) {\r\n\t\t\t\tseries.config = dataContext.config;\r\n\t\t\t}\r\n\r\n\t\t\tthis.dataUsers.removeValue(series); // series do not use data directly, that's why we remove it\r\n\t\t\tseries.data = dataItem.children.values;\r\n\t\t\tseries.fill = dataItem.color;\r\n\r\n\t\t\tseries.columnsContainer.hide(0);\r\n\t\t\tseries.bulletsContainer.hide(0);\r\n\r\n\t\t\tseries.columns.template.adapter.add(\"fill\", (fill, target) => {\r\n\t\t\t\tlet dataItem = target.dataItem;\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet treeMapDataItem = dataItem.treeMapDataItem;\r\n\t\t\t\t\tif (treeMapDataItem) {\r\n\t\t\t\t\t\ttarget.fill = treeMapDataItem.color;\r\n\t\t\t\t\t\ttarget.adapter.remove(\"fill\"); //@todo: make it possible adapters applied once?\r\n\t\t\t\t\t\treturn treeMapDataItem.color;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.zoomable && (dataItem.level > this.currentLevel || (dataItem.children && dataItem.children.length > 0))) {\r\n\t\t\t\tseries.columns.template.cursorOverStyle = MouseCursorStyle.pointer;\r\n\t\t\t\tif (this.zoomable) {\r\n\t\t\t\t\tseries.columns.template.events.on(\"hit\", (event) => {\r\n\t\t\t\t\t\tlet seriesDataItem = event.target.dataItem;\r\n\r\n\t\t\t\t\t\tif (dataItem.level > this.currentLevel) {\r\n\t\t\t\t\t\t\tthis.zoomToChartDataItem(seriesDataItem.treeMapDataItem.parent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthis.zoomToSeriesDataItem(seriesDataItem);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}, this, undefined);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._tempSeries.push(dataItem.series);\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles bullets so that labels that belong to current drill level are\r\n\t * shown.\r\n\t *\r\n\t * @param {number} duration Animation duration (ms)\r\n\t */\r\n\tprotected toggleBullets(duration?: number): void {\r\n\t\t// hide all series which are not in tempSeries\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (this._tempSeries.indexOf(series) == - 1) {\r\n\t\t\t\t//series.hideReal(duration);\r\n\t\t\t\tseries.columnsContainer.hide();\r\n\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t//series.showReal(duration);\r\n\t\t\t\tseries.columnsContainer.show();\r\n\t\t\t\tseries.bulletsContainer.show(duration);\r\n\r\n\t\t\t\tif (series.level < this.currentLevel) {\r\n\t\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item in series.\r\n\t *\r\n\t * @param {TreeMapSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic zoomToSeriesDataItem(dataItem: TreeMapSeriesDataItem): void {\r\n\t\tthis.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} dataItem Data item\r\n\t */\r\n\tpublic zoomToChartDataItem(dataItem: TreeMapDataItem): void {\r\n\t\tif (dataItem && dataItem.children) {\r\n\t\t\tthis.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n\t\t\tthis.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n\r\n\t\t\tthis.currentLevel = dataItem.level;\r\n\t\t\tthis.currentlyZoomed = dataItem;\r\n\r\n\t\t\tthis.createTreeSeries(dataItem);\r\n\r\n\t\t\tlet rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n\r\n\t\t\tif (rangeChangeAnimation && !rangeChangeAnimation.isFinished()) {\r\n\t\t\t\tthis._dataDisposers.push(rangeChangeAnimation);\r\n\t\t\t\trangeChangeAnimation.events.once(\"animationended\", () => {\r\n\t\t\t\t\tthis.toggleBullets();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.toggleBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"TreeMap chart\");\r\n\t\t}\r\n\t\t//this.homeText = this.language.translate(\"Home\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {XYSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Maximum drill-down levels the chart will allow going to.\r\n\t *\r\n\t * If set, the chart will not drill-down further, even if there are sub-items\r\n\t * available.\r\n\t *\r\n\t * Set to `1` to disable drill down functionality.\r\n\t *\r\n\t * @param {number} value Maximum drill-down level\r\n\t */\r\n\tpublic set maxLevels(value: number) {\r\n\t\tthis.setPropertyValue(\"maxLevels\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Maximum drill-down level\r\n\t */\r\n\tpublic get maxLevels(): number {\r\n\t\treturn this.getPropertyValue(\"maxLevels\");\r\n\t}\r\n\r\n\t/**\r\n\t * Current drill-down level the chart is at.\r\n\t *\r\n\t * @param {number} value Current level\r\n\t */\r\n\tpublic set currentLevel(value: number) {\r\n\t\tthis.setPropertyValue(\"currentLevel\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Current level\r\n\t */\r\n\tpublic get currentLevel(): number {\r\n\t\treturn this.getPropertyValue(\"currentLevel\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * Available options: \"none\", \"ascending\", and \"descending\" (default).\r\n\t *\r\n\t * @default \"descending\"\r\n\t * @param {\"none\" | \"ascending\" | \"descending\"} value [description]\r\n\t */\r\n\tpublic set sorting(value: \"none\" | \"ascending\" | \"descending\") {\r\n\t\tthis.setPropertyValue(\"sorting\", value, true);\r\n\t}\r\n\r\n\tpublic get sorting(): \"none\" | \"ascending\" | \"descending\" {\r\n\t\treturn this.getPropertyValue(\"sorting\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new series of the suitable type.\r\n\t *\r\n\t * @return {this} new series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new TreeMapSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A text displayed on the \"home\" button which is used to go back to level 0\r\n\t * after drill into sub-items.\r\n\t *\r\n\t * @param {string} value Home text\r\n\t */\r\n\tpublic set homeText(value: string) {\r\n\t\tthis._homeText = value;\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.name = this._homeText;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Home text\r\n\t */\r\n\tpublic get homeText(): string {\r\n\t\treturn this._homeText;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Instantiate layout algorithm\r\n\t\t\tif ($type.hasValue(config[\"layoutAlgorithm\"]) && $type.isString(config[\"layoutAlgorithm\"])) {\r\n\t\t\t\tswitch (config[\"layoutAlgorithm\"]) {\r\n\t\t\t\t\tcase \"squarify\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.squarify;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"binaryTree\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.binaryTree;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"slice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.slice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"dice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.dice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"sliceDice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.sliceDice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdelete config[\"layoutAlgorithm\"];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Set type for navigation bar\r\n\t\t\tif ($type.hasValue(config.navigationBar) && !$type.hasValue(config.navigationBar.type)) {\r\n\t\t\t\tconfig.navigationBar.type = \"NavigationBar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Measures the size of container and informs its children of how much size\r\n\t * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n\t * properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.layoutItems(this.currentlyZoomed);\r\n\t}\r\n\r\n\t/**\r\n\t * Validates (processes) data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\t\tsuper.validateDataItems();\r\n\t\tthis.layoutItems(this._homeDataItem);\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.validateRawData();\r\n\t\t});\r\n\r\n\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * TREEMAP LAYOUT FUNCTIONS\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * The functions below are from D3.js library (https://d3js.org/)\r\n\t *\r\n\t * --------------------------------------------------------------------------\r\n\t * Copyright 2017 Mike Bostock\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t *\r\n\t * 1. Redistributions of source code must retain the above copyright notice,\r\n\t * this list of conditions and the following disclaimer.\r\n\t *\r\n\t * 2. Redistributions in binary form must reproduce the above copyright\r\n\t * notice,this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t *\r\n\t * 3. Neither the name of the copyright holder nor the names of its\r\n\t * contributors may be used to endorse or promote products derived from\r\n\t * this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n\t * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n\t * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n\t * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n\t * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n\t * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n\t * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n\t * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n\t * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n\t * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n\t * POSSIBILITY OF SUCH DAMAGE.\r\n\t * --------------------------------------------------------------------------\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: binaryTree.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic binaryTree(parent: TreeMapDataItem): void {\r\n\t\tlet nodes = parent.children,\r\n\t\t\ti, n = nodes.length,\r\n\t\t\tsum, sums = new Array(n + 1);\r\n\r\n\t\tfor (sums[0] = sum = i = 0; i < n; ++i) {\r\n\t\t\tsums[i + 1] = sum += nodes.getIndex(i).value;\r\n\t\t}\r\n\r\n\t\tpartition(0, n, parent.value, parent.x0, parent.y0, parent.x1, parent.y1);\r\n\r\n\t\tfunction partition(i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) {\r\n\t\t\tif (i >= j - 1) {\r\n\t\t\t\tlet node = nodes.getIndex(i);\r\n\t\t\t\tnode.x0 = x0, node.y0 = y0;\r\n\t\t\t\tnode.x1 = x1, node.y1 = y1;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet valueOffset = sums[i],\r\n\t\t\t\tvalueTarget = (value / 2) + valueOffset,\r\n\t\t\t\tk = i + 1,\r\n\t\t\t\thi = j - 1;\r\n\r\n\t\t\twhile (k < hi) {\r\n\t\t\t\tlet mid = k + hi >>> 1;\r\n\t\t\t\tif (sums[mid] < valueTarget) k = mid + 1;\r\n\t\t\t\telse hi = mid;\r\n\t\t\t}\r\n\r\n\t\t\tif ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k)--k;\r\n\r\n\t\t\tlet valueLeft = sums[k] - valueOffset,\r\n\t\t\t\tvalueRight = value - valueLeft;\r\n\r\n\t\t\tif ((x1 - x0) > (y1 - y0)) {\r\n\t\t\t\tlet xk = (x0 * valueRight + x1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, xk, y1);\r\n\t\t\t\tpartition(k, j, valueRight, xk, y0, x1, y1);\r\n\t\t\t} else {\r\n\t\t\t\tlet yk = (y0 * valueRight + y1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, x1, yk);\r\n\t\t\t\tpartition(k, j, valueRight, x0, yk, x1, y1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic slice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (y1 - y0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.x0 = x0, node.x1 = x1;\r\n\t\t\tnode.y0 = y0, node.y1 = y0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: dice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic dice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (x1 - x0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.y0 = y0, node.y1 = y1;\r\n\t\t\tnode.x0 = x0, node.x1 = x0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slideDice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic sliceDice(parent: TreeMapDataItem): void {\r\n\t\tparent.level & 1 ? this.slice(parent) : this.dice(parent);\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: squarify.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic squarify(parent: TreeMapDataItem): void {\r\n\t\tlet ratio = (1 + Math.sqrt(5)) / 2;\r\n\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children;\r\n\t\tlet nodeValue;\r\n\t\tlet i0 = 0;\r\n\t\tlet i1 = 0;\r\n\t\tlet n = nodes.length;\r\n\t\tlet dx;\r\n\t\tlet dy;\r\n\t\tlet value = parent.value;\r\n\t\tlet sumValue;\r\n\t\tlet minValue;\r\n\t\tlet maxValue;\r\n\t\tlet newRatio;\r\n\t\tlet minRatio;\r\n\t\tlet alpha;\r\n\t\tlet beta;\r\n\r\n\t\twhile (i0 < n) {\r\n\t\t\tdx = x1 - x0, dy = y1 - y0;\r\n\r\n\t\t\t// Find the next non-empty node.\r\n\t\t\tdo sumValue = nodes.getIndex(i1++).value; while (!sumValue && i1 < n);\r\n\t\t\tminValue = maxValue = sumValue;\r\n\t\t\talpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\tminRatio = Math.max(maxValue / beta, beta / minValue);\r\n\r\n\t\t\t// Keep adding nodes while the aspect ratio maintains or improves.\r\n\t\t\tfor (; i1 < n; ++i1) {\r\n\t\t\t\tsumValue += nodeValue = nodes.getIndex(i1).value;\r\n\t\t\t\tif (nodeValue < minValue) {\r\n\t\t\t\t\tminValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tif (nodeValue > maxValue) {\r\n\t\t\t\t\tmaxValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\t\tnewRatio = Math.max(maxValue / beta, beta / minValue);\r\n\t\t\t\tif (newRatio > minRatio) {\r\n\t\t\t\t\tsumValue -= nodeValue; break;\r\n\t\t\t\t}\r\n\t\t\t\tminRatio = newRatio;\r\n\t\t\t}\r\n\r\n\t\t\t// Position and record the row orientation.\r\n\t\t\tlet row = this.dataItems.template.clone();\r\n\t\t\trow.value = sumValue;\r\n\t\t\trow.dice = dx < dy;\r\n\t\t\trow.children = nodes.slice(i0, i1);\r\n\t\t\trow.x0 = x0;\r\n\t\t\trow.y0 = y0;\r\n\t\t\trow.x1 = x1;\r\n\t\t\trow.y1 = y1;\r\n\r\n\t\t\tif (row.dice) {\r\n\t\t\t\trow.y1 = value ? y0 += dy * sumValue / value : y1;\r\n\t\t\t\tthis.dice(row);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\trow.x1 = value ? x0 += dx * sumValue / value : x1, y1;\r\n\t\t\t\tthis.slice(row);\r\n\t\t\t}\r\n\t\t\tvalue -= sumValue, i0 = i1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleDataItemValueChange(dataItem?: this[\"_dataItem\"], name?:string): void {\r\n\t\tif(name == \"value\"){\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?:string): void {\r\n\t\tif(name == \"value\"){\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\t\t\tlet legendData: Array = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tif (series.level == 1) {\r\n\t\t\t\t\tif (!series.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(series);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\t\t\tlegend.data = legendData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\r\n\t\tsuper.disposeData();\r\n\r\n\t\tthis._homeDataItem = undefined;\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxis.disposeData();\r\n\t\tthis.yAxis.disposeData();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMap\"] = TreeMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/TreeMap.ts","/**\r\n * Module for building 3D serial charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisRendererX3D } from \"../axes/AxisRendererX3D\";\r\nimport { AxisRendererY3D } from \"../axes/AxisRendererY3D\";\r\nimport { ColumnSeries3D } from \"../series/ColumnSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChart3DDataItem extends XYChartDataItem {\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines available properties for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Depths of the chart in pixels.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChart3DAdapters extends IXYChartAdapters, IXYChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D XY chart.\r\n *\r\n * @see {@link IXYChart3DEvents} for a list of available Events\r\n * @see {@link IXYChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart3D extends XYChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t *\r\n\t * @type {IXYChart3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYChart3DProperties}\r\n\t */\r\n\tpublic _properties!: IXYChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChart3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChart3DEvents}\r\n\t */\r\n\tpublic _events!: IXYChart3DEvents;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for X axes.\r\n\t *\r\n\t * @type {[type]}\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX3D = AxisRendererX3D;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for Y axes.\r\n\t * @type {[type]}\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY3D = AxisRendererY3D;\r\n\r\n\t/**\r\n\t * A container to add 3D column elements to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3D\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.depth = 30;\r\n\t\tthis.angle = 30;\r\n\r\n\t\t// Creeate container for columns\r\n\t\tlet columnsContainer = this.seriesContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis.columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columnsContainer.mask = this.createChild(Sprite);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D chart / columns in pixels.\r\n\t *\r\n\t * @param {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated horizontal 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Offset (px)\r\n\t */\r\n\tpublic get dx3D(): number {\r\n\t\treturn $math.cos(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated vertical 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Offset (px)\r\n\t */\r\n\tpublic get dy3D(): number {\r\n\t\treturn -$math.sin(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates layout\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.fixLayout();\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\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\t}\r\n\r\n\t/**\r\n\t * Updates column positions, offset and dimensions based on chart's angle\r\n\t * and depth.\r\n\t */\r\n\tprotected fixColumns(): void {\r\n\t\tlet count: number = 1;\r\n\t\tlet i = 0;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tif (!series.clustered && i > 0) {\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tseries.depthIndex = count - 1;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet s: number = 0;\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tseries.depth = this.depth / (count );\r\n\t\t\t\tseries.angle = this.angle;\r\n\t\t\t\tseries.dx = this.depth / (count) * $math.cos(this.angle) * (series.depthIndex);\r\n\t\t\t\tseries.dy = -this.depth / (count) * $math.sin(this.angle) * (series.depthIndex);\r\n\r\n\t\t\t\tlet i: number = 1;\r\n\t\t\t\tseries.columns.each((column) => {\r\n\t\t\t\t\tcolumn.zIndex = 1000 * i + s - series.depthIndex * 100;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t});\r\n\r\n\t\t\t\ts++;\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.maskColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\tprotected maskColumns() {\r\n\t\tlet w: number = this.plotContainer.pixelWidth;\r\n\t\tlet h: number = this.plotContainer.pixelHeight;\r\n\r\n\t\tlet dx: number = this.dx3D;\r\n\t\tlet dy: number = this.dy3D;\r\n\r\n\t\tlet path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy }) + $path.lineTo({ x: w + dx, y: h + dy }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: 0, y: h }) + $path.closePath();\r\n\r\n\t\tlet columnsContainer = this.columnsContainer;\r\n\t\tif (columnsContainer && columnsContainer.mask) {\r\n\t\t\tcolumnsContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart3D\"] = XYChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart3D.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { CandlestickSeries, CandlestickSeriesDataItem, ICandlestickSeriesDataFields, ICandlestickSeriesProperties, ICandlestickSeriesAdapters, ICandlestickSeriesEvents } from \"./CandlestickSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { OHLC } from \"../elements/OHLC\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\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 [[OHLCSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class OHLCSeriesDataItem extends CandlestickSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the OHLC elements.\r\n\t * @type {OHLC}\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {OHLCSeries}\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: OHLCSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"OHLCSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesDataFields extends ICandlestickSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesProperties extends ICandlestickSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesEvents extends ICandlestickSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLCSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCSeriesAdapters extends ICandlestickSeriesAdapters, IOHLCSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link IOHLCSeriesEvents} for a list of available Events\r\n * @see {@link IOHLCSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class OHLCSeries extends CandlestickSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {OHLCSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: OHLCSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IOHLCSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IOHLCSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IOHLCSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IOHLCSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IOHLCSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IOHLCSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IOHLCSeriesEvents}\r\n\t */\r\n\tpublic _events!: IOHLCSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLCSeries\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"OHLC Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {OHLCSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new OHLCSeriesDataItem();\r\n\t}\r\n\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"_dataItem\"]) {\r\n\t\tlet column: OHLC = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet openLine = column.openLine;\r\n\t\t\tlet highLowLine = column.highLowLine;\r\n\t\t\tlet closeLine = column.closeLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\t\t\t\thighLowLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\topenLine.y1 = yOpen - pixelY;\r\n\t\t\t\topenLine.y2 = yOpen - pixelY;\r\n\t\t\t\topenLine.x1 = 0;\r\n\t\t\t\topenLine.x2 = x;\r\n\r\n\t\t\t\tcloseLine.y1 = yClose - pixelY;\r\n\t\t\t\tcloseLine.y2 = yClose - pixelY;\r\n\t\t\t\tcloseLine.x1 = x;\r\n\t\t\t\tcloseLine.x2 = 2 * x;\r\n\r\n\t\t\t\thighLowLine.y1 = yHigh - pixelY;\r\n\t\t\t\thighLowLine.y2 = yLow - pixelY;\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\thighLowLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\topenLine.x1 = xOpen - pixelX;\r\n\t\t\t\topenLine.x2 = xOpen - pixelX;\r\n\t\t\t\topenLine.y1 = y;\r\n\t\t\t\topenLine.y2 = 2 * y;\r\n\r\n\t\t\t\tcloseLine.x1 = xClose - pixelX;\r\n\t\t\t\tcloseLine.x2 = xClose - pixelX;\r\n\t\t\t\tcloseLine.y1 = 0;\r\n\t\t\t\tcloseLine.y2 = y;\r\n\r\n\t\t\t\thighLowLine.x1 = xHigh - pixelX;\r\n\t\t\t\thighLowLine.x2 = xLow - pixelX;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeOpenLine = rangeColumn.openLine;\r\n\t\t\t\t\trangeOpenLine.x = openLine.x;\r\n\t\t\t\t\trangeOpenLine.y = openLine.y;\r\n\t\t\t\t\trangeOpenLine.x1 = openLine.x1;\r\n\t\t\t\t\trangeOpenLine.x2 = openLine.x2;\r\n\t\t\t\t\trangeOpenLine.y1 = openLine.y1;\r\n\t\t\t\t\trangeOpenLine.y2 = openLine.y2;\r\n\r\n\t\t\t\t\tlet rangeCloseLine = rangeColumn.closeLine;\r\n\t\t\t\t\trangeCloseLine.x = closeLine.x;\r\n\t\t\t\t\trangeCloseLine.y = closeLine.y;\r\n\t\t\t\t\trangeCloseLine.x1 = closeLine.x1;\r\n\t\t\t\t\trangeCloseLine.x2 = closeLine.x2;\r\n\t\t\t\t\trangeCloseLine.y1 = closeLine.y1;\r\n\t\t\t\t\trangeCloseLine.y2 = closeLine.y2;\r\n\r\n\t\t\t\t\tlet rangeHighLowLine = rangeColumn.highLowLine;\r\n\t\t\t\t\trangeHighLowLine.x = highLowLine.x;\r\n\t\t\t\t\trangeHighLowLine.y = highLowLine.y;\r\n\t\t\t\t\trangeHighLowLine.x1 = highLowLine.x1;\r\n\t\t\t\t\trangeHighLowLine.x2 = highLowLine.x2;\r\n\t\t\t\t\trangeHighLowLine.y1 = highLowLine.y1;\r\n\t\t\t\t\trangeHighLowLine.y2 = highLowLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: OHLC = marker.createChild(OHLC);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet openLine: Line = column.openLine;\r\n\t\tlet closeLine: Line = column.closeLine;\r\n\t\tlet highLowLine: Line = column.highLowLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLowLine.y = h / 2;\r\n\t\t\thighLowLine.x2 = w;\r\n\r\n\t\t\topenLine.x = w / 3 * 2;\r\n\t\t\topenLine.y2 = h / 2;\r\n\r\n\t\t\tcloseLine.x = w / 3;\r\n\t\t\tcloseLine.y2 = h;\r\n\t\t\tcloseLine.y1 = h / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\r\n\t\t\thighLowLine.x = w / 2;\r\n\t\t\thighLowLine.y2 = h;\r\n\r\n\t\t\topenLine.y = h / 3 * 2;\r\n\t\t\topenLine.x2 = w / 2;\r\n\r\n\t\t\tcloseLine.y = h / 3;\r\n\t\t\tcloseLine.x2 = w;\r\n\t\t\tcloseLine.x1 = w / 2;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new OHLC();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLCSeries\"] = OHLCSeries;\r\nregistry.registeredClasses[\"OHLCSeriesDataItem\"] = OHLCSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/OHLCSeries.ts","/**\r\n * Step line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { StepLineSeriesSegment } from \"./StepLineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[StepLineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class StepLineSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {StepLineSeries}\r\n\t */\r\n\tpublic _component!: StepLineSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesProperties extends ILineSeriesProperties {\r\n\tnoRisers?: boolean;\r\n\r\n\tstartLocation?: number;\r\n\r\n\tendLocation?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesAdapters extends ILineSeriesAdapters, IStepLineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a step line graph.\r\n *\r\n * @see {@link IStepLineSeriesEvents} for a list of available Events\r\n * @see {@link IStepLineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class StepLineSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IStepLineSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IStepLineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IStepLineSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IStepLineSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IStepLineSeriesEvents}\r\n\t */\r\n\tpublic _events!: IStepLineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {StepLineSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: StepLineSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: StepLineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeries\";\r\n\t\tthis.applyTheme();\r\n\t\tthis.startLocation = 0;\r\n\t\tthis.endLocation = 1;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {StepLineSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new StepLineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tlet x0: number = this.xAxis.getX(dataItem, xField, startLocation);\r\n\t\tlet y0: number = this.yAxis.getY(dataItem, yField, startLocation);\r\n\r\n\t\tlet x1: number = this.xAxis.getX(dataItem, xField, endLocation);\r\n\t\tlet y1: number = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\tx0 = $math.fitToRange(x0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty0 = $math.fitToRange(y0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\tx1 = $math.fitToRange(x1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty1 = $math.fitToRange(y1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\t// this might make an impression that points are duplicated, and they indeed are, but this is needed to handle gaps in data\r\n\t\tif (!this.noRisers && this.connect) {\r\n\t\t\tif (points.length > 1) {\r\n\t\t\t\tlet prevPoint: IPoint = points[points.length - 1];\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y1 });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: x0, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: x1, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y0 });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet point0: IPoint = { x: x0, y: y0 };\r\n\t\tlet point1: IPoint = { x: x1, y: y1 };\r\n\r\n\t\tif (backwards) {\r\n\t\t\tpoints.push(point1, point0);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpoints.push(point0, point1);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param {LineSeriesSegment} segment Segment\r\n\t * @param {IPoint[]} points Segment points\r\n\t * @param {IPoint[]} closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: StepLineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet vertical = false;\r\n\t\tif (this.yAxis == this.baseAxis) {\r\n\t\t\tvertical = true;\r\n\t\t}\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY, this.noRisers, vertical);\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new StepLineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if step line series should draw only horizontal (or only\r\n\t * vertical, depending on base axis) lines, instead of connecting them with\r\n\t * vertical (or horizontal) lines.\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value No risers\r\n\t */\r\n\tpublic set noRisers(value: boolean) {\r\n\t\tthis.setPropertyValue(\"noRisers\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} No risers\r\n\t */\r\n\tpublic get noRisers(): boolean {\r\n\t\treturn this.getPropertyValue(\"noRisers\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * start location of the step\r\n\t *\r\n\t * @param {number} value Location (0-1)\r\n\t * @default 0\r\n\t */\r\n\tpublic set startLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"startLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Location (0-1)\r\n\t */\r\n\tpublic get startLocation(): number {\r\n\t\treturn this.getPropertyValue(\"startLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Step end location.\r\n\t *\r\n\t * @param {number} value Location (0-1)\r\n\t * #default 1\r\n\t */\r\n\tpublic set endLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"endLocation\", value, true);\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Location (0-1)\r\n\t */\r\n\tpublic get endLocation(): number {\r\n\t\treturn this.getPropertyValue(\"endLocation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeries\"] = StepLineSeries;\r\nregistry.registeredClasses[\"StepLineSeriesDataItem\"] = StepLineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeries.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ILineSeriesSegmentAdapters, ILineSeriesSegmentEvents, ILineSeriesSegmentProperties, LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentProperties extends ILineSeriesSegmentProperties { }\r\n\r\n/**\r\n * Defines events for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentEvents extends ILineSeriesSegmentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesSegmentAdapters extends ILineSeriesSegmentAdapters, IStepLineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link IStepLineSeriesSegmentEvents} for a list of available events\r\n * @see {@link IStepLineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class StepLineSeriesSegment extends LineSeriesSegment {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IStepLineSeriesSegmentProperties}\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IStepLineSeriesSegmentAdapters}\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IStepLineSeriesSegmentEvents}\r\n\t */\r\n\tpublic _events!: IStepLineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesSegment\";\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint[]} points Points to connect\r\n\t * @param {IPoint[]} closePoints ?\r\n\t * @param {number} smoothnessX Horizontal bezier setting (?)\r\n\t * @param {number} smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number, noRisers?: boolean, vertical?: boolean): void {\r\n\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\r\n\t\t\tif (noRisers) {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]);\r\n\t\t\t\tif (points.length > 0) {\r\n\t\t\t\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\t\t\t\tlet point = points[i];\r\n\t\t\t\t\t\tif (i / 2 == Math.round(i / 2)) {\r\n\t\t\t\t\t\t\tpath += $path.moveTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tpath += $path.lineTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath = $path.moveTo(points[0]) + $path.polyline(points);\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]) + $path.polyline(points);\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeriesSegment\"] = StepLineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","/**\r\n * Radar column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { RadarColumn } from \"../elements/RadarColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {RadarColumnSeries}\r\n\t */\r\n\tpublic _component!: RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnSeriesAdapters extends IColumnSeriesAdapters, IRadarColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IRadarColumnSeriesEvents} for a list of available Events\r\n * @see {@link IRadarColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: RadarColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IRadarColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IRadarColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarColumnSeriesEvents}\r\n\t */\r\n\tpublic _events!: IRadarColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {RadarChart}\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a RadarColumn element to use as column in radar chart.\r\n\t *\r\n\t * @return {this[\"_column\"]} RadarColumn.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new RadarColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {RadarColumnSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\tlet yField: string = this.yField;\r\n\t\tlet yOpenField: string = this.yOpenField;\r\n\t\tlet xField: string = this.xField;\r\n\t\tlet xOpenField: string = this.xOpenField;\r\n\r\n\t\tlet lAngle: number;\r\n\t\tlet rAngle: number;\r\n\r\n\t\tlet tRadius: number;\r\n\t\tlet bRadius: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet cellAngle = (endAngle - startAngle) / (this.dataItems.length * (this.end - this.start));\r\n\r\n\t\tstartAngle = startAngle + startLocation * cellAngle;\r\n\t\tendAngle = endAngle - (1 - endLocation) * cellAngle;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\r\n\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\tpercentWidth = 100;\r\n\t\t}\r\n\r\n\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\tstartLocation += offset;\r\n\t\tendLocation -= offset;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, dataItem.locations[yField], \"valueY\"), y: this.yAxis.getY(dataItem, yField, dataItem.locations[yField], \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xOpenField, startLocation, \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xField, endLocation, \"valueX\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, startLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yField, startLocation, \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, endLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, endLocation, \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xField, dataItem.locations[xField], \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xOpenField, dataItem.locations[xOpenField], \"valueX\");\r\n\t\t}\r\n\r\n\t\tif (rAngle < lAngle) {\r\n\t\t\tlet temp = rAngle;\r\n\t\t\trAngle = lAngle;\r\n\t\t\tlAngle = temp;\r\n\t\t}\r\n\r\n\t\tlAngle = $math.fitToRange(lAngle, startAngle, endAngle);\r\n\t\trAngle = $math.fitToRange(rAngle, startAngle, endAngle);\r\n\r\n\t\tlet radarColumn = dataItem.column;\r\n\t\tif (!radarColumn) {\r\n\t\t\tradarColumn = this.columns.create();\r\n\t\t\tdataItem.column = radarColumn;\r\n\t\t\t$object.forceCopyProperties(this.columns.template, radarColumn, visualProperties);\r\n\t\t\tdataItem.addSprite(radarColumn);\r\n\t\t\tthis.setColumnStates(radarColumn);\r\n\t\t}\r\n\r\n\t\tlet slice = radarColumn.radarColumn;\r\n\r\n\t\tslice.startAngle = lAngle;\r\n\r\n\t\tlet arc = rAngle - lAngle;\r\n\r\n\t\tif (arc > 0) {\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.radius = tRadius;\r\n\t\t\tslice.innerRadius = bRadius;\r\n\t\t\tradarColumn.__disabled = false;\r\n\r\n\t\t\tradarColumn.parent = this.columnsContainer;\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tif (rangeColumn.dataItem) {\r\n\t\t\t\t\t\t$array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet slice = radarColumn.radarColumn;\r\n\t\t\t\tslice.startAngle = lAngle;\r\n\t\t\t\tslice.arc = arc;\r\n\t\t\t\tslice.radius = tRadius;\r\n\t\t\t\tslice.innerRadius = bRadius;\r\n\r\n\t\t\t\tif (slice.invalid) {\r\n\t\t\t\t\tslice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\trangeColumn.parent = this.columnsContainer;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {RadarColumnSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarColumnSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return {string} SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumnSeries\"] = RadarColumnSeries;\r\nregistry.registeredClasses[\"RadarColumnSeriesDataItem\"] = RadarColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarColumnSeries.ts","/**\r\n * Defines Pictorial Stacked Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPyramidSeriesAdapters, IPyramidSeriesDataFields, IPyramidSeriesEvents, IPyramidSeriesProperties, PyramidSeries, PyramidSeriesDataItem } from \"./PyramidSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { Color, color } from \"../../core/utils/Color\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PictorialStackedSeriesDataItem extends PyramidSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PictorialStackedSeries}\r\n\t */\r\n\tpublic _component!: PictorialStackedSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PictorialStackedSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesDataFields extends IPyramidSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesProperties extends IPyramidSeriesProperties {\r\n\tpicture?: Sprite;\r\n}\r\n\r\n/**\r\n * Defines events for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesEvents extends IPyramidSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPictorialStackedSeriesAdapters extends IPyramidSeriesAdapters, IPictorialStackedSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a PictorialStacked series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPictorialStackedSeriesEvents} for a list of available Events\r\n * @see {@link IPictorialStackedSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PictorialStackedSeries extends PyramidSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPictorialStackedSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPictorialStackedSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPictorialStackedSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesEvents}\r\n\t */\r\n\tpublic _events!: IPictorialStackedSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PictorialStackedSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: PictorialStackedSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds a Sprite that acts as an intelligent mask for the serries.\r\n\t * \r\n\t * @type {Sprite}\r\n\t */\r\n\tprotected _maskSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PictorialStackedSeries\";\r\n\t\tthis.topWidth = percent(100);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.valueIs = \"height\";\r\n\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis._maskSprite = this.slicesContainer.createChild(Sprite);\r\n\t\tthis._maskSprite.visible = false;\r\n\t\tthis._maskSprite.zIndex = 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Sizes the mask to fit the series.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\r\n\t\tlet maxWidth = this.slicesContainer.maxWidth;\r\n\t\tlet maxHeight = this.slicesContainer.maxHeight;\r\n\r\n\t\tlet maskSprite = this._maskSprite;\r\n\t\t//maskSprite.validatePosition(); // for some reason size of the maskSprite is 0x0 after we removed validatePosition in afterdraw\r\n\r\n\t\tlet pictureWidth = maskSprite.measuredWidth / maskSprite.scale;\r\n\t\tlet pictureHeight = maskSprite.measuredHeight / maskSprite.scale;\r\n\r\n\t\tlet scale = $math.min(maxHeight / pictureHeight, maxWidth / pictureWidth);\r\n\r\n\t\tif(scale == Infinity){\r\n\t\t\tscale = 1; // can't return here, won't draw legend properly\r\n\t\t}\r\n\r\n\t\tscale = $math.max(0.001, scale);\r\n\r\n\t\tlet newWidth = $math.min(maxWidth, pictureWidth * scale);\r\n\t\tlet newHeight = $math.min(maxHeight, pictureHeight * scale);\r\n\r\n\t\tmaskSprite.scale = scale;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\r\n\t\t\tthis.topWidth = newWidth + 4;\r\n\t\t\tthis.bottomWidth = newWidth + 4;\r\n\t\t\tthis.pyramidHeight = newHeight;\r\n\t\t\tmaskSprite.x = maxWidth / 2;\r\n\t\t\tmaskSprite.y = newHeight / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.topWidth = newHeight + 4;\r\n\t\t\tthis.bottomWidth = newHeight + 4;\r\n\t\t\tthis.pyramidHeight = newWidth;\r\n\t\t\tmaskSprite.valign = \"middle\";\r\n\t\t\tmaskSprite.x = newWidth / 2;\r\n\t\t\tmaskSprite.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tmaskSprite.verticalCenter = \"middle\";\r\n\t\tmaskSprite.horizontalCenter = \"middle\";\r\n\r\n\t\tthis.slicesContainer.mask = this._maskSprite;\r\n\r\n\t\tsuper.validateDataElements();\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {PictorialStackedSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PictorialStackedSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Sprite]] element that is used as a series mask.\r\n\t *\r\n\t * If set, this element's shape will be used to apply shape to the whole\r\n\t * stacked pictorial series.\r\n\t *\r\n\t * You can use this element's `path` property to set an SVG path for the\r\n\t * shape:\r\n\t *\r\n\t * ```TypeScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JSON\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * \"type\": \"PictorialStackedSeries\",\r\n\t * // ...\r\n\t * \"maskSprite\": {\r\n\t * \"path\": iconPath\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @return {Sprite} Mask sprite\r\n\t */\r\n\tpublic get maskSprite(): Sprite {\r\n\t\treturn this._maskSprite;\r\n\t}\r\n\r\n\t/**\r\n\t * Inits FunnelSlice.\r\n\t *\r\n\t * @param {FunnelSlice} slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tsuper.initSlice(slice);\r\n\r\n\t\tlet hs = slice.states.getKey(\"hover\");\r\n\t\tif (hs) {\r\n\t\t\ths.properties.expandDistance = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PictorialStackedSeries\"] = PictorialStackedSeries;\r\nregistry.registeredClasses[\"PictorialStackedSeriesDataItem\"] = PictorialStackedSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","/**\r\n * ConeSeries module\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { ConeColumn } from \"../elements/ConeColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ConeSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ConeSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {ConeColumn}\r\n\t */\r\n\tpublic _column: ConeColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {ConeSeries}\r\n\t */\r\n\tpublic _component!: ConeSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeSeriesAdapters extends IColumnSeriesAdapters, IConeSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a cone graph.\r\n *\r\n * @see {@link IConeSeriesEvents} for a list of available Events\r\n * @see {@link IConeSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ConeSeries extends ColumnSeries {\r\n\r\n\tpublic _column: ConeColumn;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ConeSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IConeSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IConeSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IConeSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IConeSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IConeSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IConeSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IConeSeriesEvents}\r\n\t */\r\n\tpublic _events!: IConeSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ConeSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new ConeColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return {string} SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet dx = 0;\r\n\t\tlet dy = 0;\r\n\t\tlet column = this.columns.getIndex(0);\r\n\t\tif(column){\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tdy = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdx = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn $path.rectToPath({\r\n\t\t\t\tx: -dx,\r\n\t\t\t\ty: 0,\r\n\t\t\t\twidth: this.xAxis.axisLength + dx,\r\n\t\t\t\theight: this.yAxis.axisLength + dy\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tlet column = dataItem.column;\r\n\t\tif(column){\r\n\t\t\tlet coneColumn = dataItem.column.coneColumn;\r\n\r\n\t\t\tconeColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tconeColumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconeColumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeSeries\"] = ConeSeries;\r\nregistry.registeredClasses[\"ConeSeriesDataItem\"] = ConeSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ConeSeries.ts","/**\r\n * CurvedColumnSeries module.\r\n * \r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { CurvedColumn } from \"../elements/CurvedColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CurvedColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {ConeColumn}\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {CurvedColumnSeries}\r\n\t */\r\n\tpublic _component!: CurvedColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnSeriesAdapters extends IColumnSeriesAdapters, ICurvedColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a curved columns graph.\r\n *\r\n * @see {@link ICurvedColumnSeriesEvents} for a list of available Events\r\n * @see {@link ICurvedColumnSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Dfines type of the column.\r\n\t * \r\n\t * @type {CurvedColumn}\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\t/**\r\n\t * Defines type of the data item.\r\n\t *\r\n\t * @type {CurvedColumnSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: CurvedColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ICurvedColumnSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ICurvedColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesEvents}\r\n\t */\r\n\tpublic _events!: ICurvedColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CurvedColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for the curved column.\r\n\t * \r\n\t * @ignore Exclude from docs\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new CurvedColumn();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\tlet column = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet curvedColumn = dataItem.column.curvedColumn;\r\n\r\n\t\t\tcurvedColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tcolumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumnSeries\"] = CurvedColumnSeries;\r\nregistry.registeredClasses[\"CurvedColumnSeriesDataItem\"] = CurvedColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","/**\r\n * DurationAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { ValueAxisBreak } from \"./ValueAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DurationAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DurationAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {DurationAxis}\r\n\t */\r\n\tpublic _component!: DurationAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisDataFields extends IValueAxisDataFields { }\r\n\r\n/**\r\n * Defines properties for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisProperties extends IValueAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DurationAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDurationAxisAdapters extends IValueAxisAdapters, IDurationAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create an axis that shows time durations.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DurationAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information about duration formatters.\r\n * @see {@link IDurationAxisEvents} for a list of available Events\r\n * @see {@link IDurationAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DurationAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t *\r\n\t * @type {IDurationAxisDataFields}\r\n\t */\r\n\tpublic _dataFields: IDurationAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IDurationAxisProperties}\r\n\t */\r\n\tpublic _properties!: IDurationAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDurationAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: IDurationAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IDurationAxisEvents}\r\n\t */\r\n\tpublic _events!: IDurationAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t *\r\n\t * @type {DurationAxisDataItem}\r\n\t */\r\n\tpublic _dataItem: DurationAxisDataItem;\r\n\r\n\t/**\r\n\t * A base unit (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t */\r\n\tprotected _baseUnit: TimeUnit = \"second\";\r\n\r\n\t/**\r\n\t * A special duration format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tprotected _tooltipDurationFormat: string;\r\n\r\n\t/**\r\n\t * Axis date format chosen dynamically based on min/max and baseUnit.\r\n\t * \r\n\t * @readonly\r\n\t */\r\n\tpublic axisDurationFormat: string;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"maxZoomFactor\", 1000000);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DurationFormatter]].\r\n\t *\r\n\t * @param {number} value Source value\r\n\t * @return {string} Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number, format?: string): string {\r\n\t\treturn this.durationFormatter.format(value, format || this.axisDurationFormat);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts actual min and max scale values so that the axis starts and ends\r\n\t * at \"nice\" values, unless `strictMinMax` is set.\r\n\t *\r\n\t * The `difference` can be something else than `max - min`, because of the\r\n\t * axis breaks.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {number} min [description]\r\n\t * @param {number} max [description]\r\n\t * @param {number} difference [description]\r\n\t * @param {number} gridCount [description]\r\n\t * @param {boolean} strictMode [description]\r\n\t * @return {IMinMaxStep} [description]\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number, difference: number, gridCount: number, strictMode?: boolean): IMinMaxStep {\r\n\r\n\t\tlet minMaxStep: IMinMaxStep;\r\n\r\n\t\tlet timeUnit = this.baseUnit;\r\n\t\t// we don't allow to go to smaller units, setting so to avoid invalidation\r\n\t\tthis.setPropertyValue(\"maxPrecision\", 0);\r\n\r\n\t\tif (timeUnit == \"millisecond\" || timeUnit == \"second\" || timeUnit == \"minute\" || timeUnit == \"hour\") {\r\n\t\t\t// will fail if 0\r\n\t\t\tif (gridCount <= 1) {\r\n\t\t\t\tgridCount = 1;\r\n\t\t\t}\r\n\r\n\t\t\tgridCount = Math.round(gridCount);\r\n\r\n\t\t\tlet initialMin: number = min;\r\n\t\t\tlet initialMax: number = max;\r\n\r\n\t\t\t// in case min and max is the same, use max\r\n\t\t\tif (difference === 0) {\r\n\t\t\t\tdifference = Math.abs(max);\r\n\t\t\t}\r\n\r\n\t\t\tlet step = difference / gridCount;\r\n\r\n\t\t\tlet divisors = [60, 30, 20, 15, 10, 2, 1];\r\n\t\t\tlet realDivisor = 1;\r\n\r\n\t\t\tif (timeUnit == \"hour\") {\r\n\t\t\t\tdivisors = [24, 12, 6, 4, 2, 1];\r\n\t\t\t}\r\n\r\n\t\t\tfor (let divisor of divisors) {\r\n\t\t\t\tif (difference / divisor > gridCount) {\r\n\t\t\t\t\trealDivisor = divisor;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet count = Math.ceil(((max - min) / realDivisor) / gridCount);\r\n\r\n\t\t\tlet exponent: number = Math.log(Math.abs(count)) * Math.LOG10E;\r\n\t\t\tlet power = Math.pow(10, Math.floor(exponent)) / 10;\r\n\t\t\tlet reducedCount = count / power;\r\n\r\n\t\t\t// find closest to divisor\r\n\t\t\tlet closest = $math.closest(divisors, reducedCount);\r\n\t\t\tcount = closest * power;\r\n\r\n\t\t\tstep = realDivisor * count;\r\n\r\n\t\t\tlet unit = this.durationFormatter.getValueUnit(step, this.baseUnit);\r\n\r\n\t\t\tmin = Math.floor(min / step) * step;\r\n\t\t\tmax = Math.ceil(max / step) * step;\r\n\r\n\t\t\tif (strictMode) {\r\n\t\t\t\tmin -= step;\r\n\t\t\t\tif (min < 0 && initialMin >= 0) {\r\n\t\t\t\t\tmin = 0;\r\n\t\t\t\t}\r\n\t\t\t\tmax += step;\r\n\r\n\t\t\t\tif (max > 0 && initialMax <= 0) {\r\n\t\t\t\t\tmax = 0;\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\t\t\tminMaxStep = { min: min, max: max, step: step };\r\n\t\t}\r\n\t\telse {\r\n\t\t\tminMaxStep = super.adjustMinMax(min, max, difference, gridCount, strictMode);\r\n\t\t}\r\n\r\n\t\t// choose duration formatter based on step\r\n\t\tthis.axisDurationFormat = this.durationFormatter.getFormat(minMaxStep.step, minMaxStep.max, this.baseUnit);\r\n\r\n\t\treturn minMaxStep;\r\n\t}\r\n\r\n\t/**\r\n\t * A special duration format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information.\r\n\t * @param {string} value Duration format for axis labels\r\n\t */\r\n\tpublic set tooltipDurationFormat(value: string) {\r\n\t\tthis._tooltipDurationFormat = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Duration format for axis labels\r\n\t */\r\n\tpublic get tooltipDurationFormat(): string {\r\n\t\treturn this._tooltipDurationFormat;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a axis tooltip, based on specific position within\r\n\t * axis.\r\n\t *\r\n\t * The label will be formatted as per [[NumberFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Position (px)\r\n\t * @return {string} Label (numeric value)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet value: number = $math.round(this.positionToValue(position), this._stepDecimalPlaces);\r\n\t\treturn this.adapter.apply(\"getTooltipText\", this.formatLabel(value, this.tooltipDurationFormat));\r\n\t}\r\n\r\n\t/**\r\n\t * A base unit (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * Available options: \"millisecond\", \"second\" (default), \"minute\", \"hour\",\r\n\t * \"day\", \"week\", \"month\", \"year\".\r\n\t *\r\n\t * @default \"second\"\r\n\t * @param {TimeUnit} timeUnit\r\n\t */\r\n\tpublic set baseUnit(timeUnit: TimeUnit) {\r\n\t\tif (this._baseUnit != timeUnit) {\r\n\t\t\tthis._baseUnit = timeUnit;\r\n\t\t\tthis.durationFormatter.baseUnit = timeUnit;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {TimeUnit} Base unit\r\n\t */\r\n\tpublic get baseUnit(): TimeUnit {\r\n\t\treturn this._baseUnit;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param {this} source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.baseUnit = source.baseUnit;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DurationAxis\"] = DurationAxis;\r\nregistry.registeredClasses[\"DurationAxisDataItem\"] = DurationAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DurationAxis.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface ICircleBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface ICircleBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICircleBulletAdapters extends IBulletAdapters, ICircleBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class CircleBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICircleBulletProperties}\r\n\t */\r\n\tpublic _properties!: ICircleBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICircleBulletAdapters}\r\n\t */\r\n\tpublic _adapter!: ICircleBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICircleBulletEvents}\r\n\t */\r\n\tpublic _events!: ICircleBulletEvents;\r\n\r\n\t/**\r\n\t * A label (textual) element for the bullet.\r\n\t *\r\n\t * @type {Circle}\r\n\t */\r\n\tpublic circle: Circle;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CircleBullet\";\r\n\r\n\t\tlet circle = this.createChild(Circle);\r\n\t\tcircle.shouldClone = false;\r\n\t\tcircle.radius = 5;\r\n\t\tcircle.isMeasured = false;\r\n\t\tthis.circle = circle;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[CircleBullet]].\r\n\t *\r\n\t * @param {this} source Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.circle.copyFrom(source.circle);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CircleBullet\"] = CircleBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CircleBullet.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface IErrorBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface IErrorBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface IErrorBulletAdapters extends IBulletAdapters, IErrorBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ErrorBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IErrorBulletProperties}\r\n\t */\r\n\tpublic _properties!: IErrorBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IErrorBulletAdapters}\r\n\t */\r\n\tpublic _adapter!: IErrorBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IErrorBulletEvents}\r\n\t */\r\n\tpublic _events!: IErrorBulletEvents;\r\n\r\n\tpublic errorLine:Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ErrorBullet\";\r\n\t\tthis.errorLine = this.createChild(Sprite);\r\n\t\tthis.errorLine.shouldClone = false;\r\n\t\tthis.width = 20;\r\n\t\tthis.height = 20;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.isDynamic = true;\r\n\t}\r\n\r\n\r\n\tvalidatePosition(){\r\n\t\tsuper.validatePosition();\r\n\t\tlet w = this.pixelWidth / 2;\r\n\t\tlet h = this.pixelHeight / 2;\r\n\r\n\t\tthis.errorLine.path = $path.moveTo({x:-w, y:-h}) + $path.lineTo({x:w, y:-h}) + $path.moveTo({x:0, y:-h}) + $path.lineTo({x:0, y:h}) + $path.moveTo({x:-w, y:h}) + $path.lineTo({x:w, y:h});\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[ErrorBullet]].\r\n\t *\r\n\t * @param {this} source Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.errorLine.copyFrom(source.errorLine);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ErrorBullet\"] = ErrorBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ErrorBullet.ts","/**\r\n * Functionality for drawing simple NavigationBar.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Component, IComponentProperties, IComponentAdapters, IComponentEvents, IComponentDataFields } from \"../../core/Component\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { DataItem } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { TextLink } from \"../../core/elements/TextLink\";\r\nimport { Triangle } from \"../../core/elements/Triangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[NavigationBar]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class NavigationBarDataItem extends DataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {NavigationBar}\r\n\t */\r\n\tpublic _component!: NavigationBar;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBarDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Name of the navigation bar item.\r\n\t *\r\n\t * @param {string} value Name\r\n\t */\r\n\tpublic set name(value: string) {\r\n\t\tthis.setProperty(\"name\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties[\"name\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarDataFields extends IComponentDataFields {\r\n\r\n\t/**\r\n\t * Name of nav var item.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tname?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarProperties extends IComponentProperties {\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarEvents extends IComponentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[NavigationBar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface INavigationBarAdapters extends IComponentAdapters, INavigationBarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * NavigationBar class can be used to create a multi-level breadcrumb-style\r\n * navigation control.\r\n *\r\n * @see {@link INavigationBarEvents} for a list of available events\r\n * @see {@link INavigationBarAdapters} for a list of available Adapters\r\n * @todo Implement better\r\n * @important\r\n */\r\nexport class NavigationBar extends Component {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t *\r\n\t * @type {NavigationBarDataFIelds}\r\n\t */\r\n\tpublic _dataFields: INavigationBarDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {INavigationBarProperties}\r\n\t */\r\n\tpublic _properties!: INavigationBarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {INavigationBarAdapters}\r\n\t */\r\n\tpublic _adapter!: INavigationBarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {INavigationBarEvents}\r\n\t */\r\n\tpublic _events!: INavigationBarEvents;\r\n\r\n\t/**\r\n\t * A list of breadcrumbs (links) in the nav bar.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tpublic links: ListTemplate;\r\n\r\n\t/**\r\n\t * [_linksIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {.ListIterator}\r\n\t */\r\n\tprotected _linksIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * [_separatorsIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {.ListIterator}\r\n\t */\r\n\tprotected _separatorsIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * A reference to the link which is currently active.\r\n\t *\r\n\t * @type {TextLink}\r\n\t */\r\n\tpublic activeLink: TextLink;\r\n\r\n\t/**\r\n\t * A list of elements used as nav bar item separators.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tpublic separators: ListTemplate;\r\n\r\n\t/**\r\n\t * Identifies the type of the [[DataItem]] used in this element.\r\n\t *\r\n\t * @type {NavigationBarDataItem}\r\n\t */\r\n\tpublic _dataItem!: NavigationBarDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet textLink = new TextLink();\r\n\t\ttextLink.valign = \"middle\";\r\n\t\ttextLink.paddingTop = 8;\r\n\t\ttextLink.paddingBottom = 8;\r\n\r\n\t\tthis.paddingBottom = 2;\r\n\r\n\t\tthis.links = new ListTemplate(textLink);\r\n\t\tthis._disposers.push(new ListDisposer(this.links));\r\n\t\tthis._disposers.push(textLink);\r\n\r\n\t\tthis._linksIterator = new $iter.ListIterator(this.links, () => this.links.create());\r\n\t\tthis._linksIterator.createNewItems = true;\r\n\r\n\t\tlet triangle = new Triangle();\r\n\t\ttriangle.direction = \"right\";\r\n\t\ttriangle.width = 8;\r\n\t\ttriangle.height = 12;\r\n\t\ttriangle.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\ttriangle.fillOpacity = 0.5;\r\n\t\ttriangle.valign = \"middle\";\r\n\t\ttriangle.marginLeft = 10;\r\n\t\ttriangle.marginRight = 10;\r\n\r\n\t\tthis.separators = new ListTemplate(triangle);\r\n\t\tthis._disposers.push(new ListDisposer(this.separators));\r\n\t\tthis._disposers.push(triangle);\r\n\r\n\t\tlet activeLink = new TextLink();\r\n\t\tthis.activeLink = activeLink;\r\n\t\tactiveLink.copyFrom(textLink);\r\n\t\tactiveLink.valign = \"middle\";\r\n\t\tactiveLink.fontWeight = \"bold\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.layout = \"grid\";\r\n\t\tthis.dataFields.name = \"name\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Completely redraws the navigation bar.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tthis.removeChildren();\r\n\t\tthis._linksIterator.reset();\r\n\t\tsuper.validateDataElements();\r\n\t\t//@todo: dispose\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a visual element for a data item (nav item).\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {NavigationBarDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\tlet textLink: TextLink;\r\n\t\tif (dataItem.index < this.dataItems.length - 1) {\r\n\t\t\ttextLink = this._linksIterator.getLast();\r\n\t\t\ttextLink.parent = this;\r\n\t\t\tlet separator = this.separators.create();\r\n\t\t\tseparator.parent = this;\r\n\t\t\tseparator.valign = \"middle\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttextLink = this.activeLink;\r\n\t\t\ttextLink.events.copyFrom(this.links.template.events);\r\n\t\t\ttextLink.hide(0);\r\n\t\t\ttextLink.show();\r\n\t\t\ttextLink.parent = this;\r\n\t\t}\r\n\t\ttextLink.dataItem = dataItem;\r\n\t\ttextLink.text = dataItem.name;\r\n\t\ttextLink.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"NavigationBar\"] = NavigationBar;\r\nregistry.registeredClasses[\"NavigationBarDataItem\"] = NavigationBarDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/NavigationBar.ts","/**\r\n * Column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, IXYSeriesDataFields, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { SpriteState } from \"../../core/SpriteState\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { Axis, AxisItemLocation } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Column } from \"../elements/Column\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { IDataItemEvents } from \"../../core/DataItem\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\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 [[ColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ColumnSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * A Column Element\r\n\t * @type {Column}\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\t/**\r\n\t * Indicates if this data items close value is lower than its open value.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic droppedFromOpen: boolean;\r\n\r\n\t/**\r\n\t * Indicates if this items value is lower than previous data item's value.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic droppedFromPrevious: boolean;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {ColumnSeries}\r\n\t */\r\n\tpublic _component!: ColumnSeries;\r\n\r\n\t/**\r\n\t * A dictionary storing axes ranges columns by axis uid\r\n\t *\r\n\t * @type {Dictionary}\r\n\t * @ignore\r\n\t */\r\n\tprotected _rangesColumns: Dictionary;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\r\n\t\tthis.locations[\"dateX\"] = 0.5;\r\n\t\tthis.locations[\"dateY\"] = 0.5;\r\n\r\n\t\tthis.locations[\"categoryX\"] = 0.5;\r\n\t\tthis.locations[\"categoryY\"] = 0.5;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A column used to draw a column for this data item.\r\n\t *\r\n\t * @param {Column} column\r\n\t */\r\n\tpublic set column(column: this[\"_column\"]) {\r\n\t\tthis.setColumn(column);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Column} Column\r\n\t */\r\n\tpublic get column(): this[\"_column\"] {\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tprotected setColumn(column: this[\"_column\"]) {\r\n\t\tif (this._column && column != this._column) {\r\n\t\t\t$array.remove(this.sprites, this._column);\r\n\t\t}\r\n\t\tthis._column = column;\r\n\r\n\t\tif (column) {\r\n\t\t\tlet prevDataItem: ColumnSeriesDataItem = column.dataItem;\r\n\t\t\tif (prevDataItem && prevDataItem != this) {\r\n\t\t\t\tprevDataItem.column = undefined;\r\n\t\t\t}\r\n\t\t\tthis.addSprite(column);\r\n\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\tthis.component.columns.removeValue(column);\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * A dictionary storing axes ranges columns by axis uid\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tpublic get rangesColumns(): Dictionary {\r\n\t\tif (!this._rangesColumns) {\r\n\t\t\tthis._rangesColumns = new Dictionary();\r\n\t\t}\r\n\t\treturn this._rangesColumns;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with pther series.\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tclustered?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeriesAdapters extends IXYSeriesAdapters, IColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a column graph.\r\n *\r\n * @see {@link IColumnSeriesEvents} for a list of available Events\r\n * @see {@link IColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries extends XYSeries {\r\n\t/**\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IColumnSeriesEvents}\r\n\t */\r\n\tpublic _events!: IColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {ColumnSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: ColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of column elements.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tprotected _columns: ListTemplate;\r\n\r\n\t/**\r\n\t * Container to put column elements in.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tprotected _columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Start location within cell for columns.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _startLocation: number = 0;\r\n\r\n\t/**\r\n\t * End location within cell for columns.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _endLocation: number = 1;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t */\r\n\tprotected _dropFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t */\r\n\tprotected _dropFromPreviousState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t */\r\n\tprotected _riseFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t */\r\n\tprotected _riseFromPreviousState: SpriteState;\r\n\r\n\r\n\t/**\r\n\t * When working value of dataItem changes, we must process all the values to calculate sum, min, max etc. Also update stack values. This is quite expensive operation.\r\n\t * Unfortunately we do not know if user needs this processed values or not. By setting simplifiedProcessing = true you disable this processing and in case working\r\n\t * value changes, we only redraw the particular column. Do not do this if you have staked chart or use calculated values in bullets or in tooltips.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic simplifiedProcessing: boolean = false;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.strokeOpacity = 0;\r\n\t\tthis.fillOpacity = 1;\r\n\r\n\t\tthis.clustered = true;\r\n\r\n\t\tlet columnsContainer = this.mainContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis._columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columns;\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\r\n\t\tthis.tooltipColorSource = this.columns.template;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A container that columns are created in.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic get columnsContainer() {\r\n\t\treturn this._columnsContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Column Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {ColumnSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ColumnSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\t//@todo Check if we can do better than use `instanceof`\r\n\t\t// find start/end locations based on clustered/stacked settings\r\n\t\t// go through chart series instead of base axis series, because axis series doesn't maintain order\r\n\t\tlet baseAxisSeries = this.chart.series;\r\n\t\tlet clusterCount: number = 0;\r\n\t\tlet index: number = 0;\r\n\r\n\t\t$iter.each(baseAxisSeries.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries) {\r\n\t\t\t\tif (this.baseAxis == series.baseAxis) {\r\n\t\t\t\t\tif ((!series.stacked && series.clustered) || clusterCount === 0) {\r\n\t\t\t\t\t\tclusterCount++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (series == this) {\r\n\t\t\t\t\t\tindex = clusterCount - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet renderer = this.baseAxis.renderer;\r\n\r\n\t\tlet cellStartLocation: number = renderer.cellStartLocation;\r\n\t\tlet cellEndLocation: number = renderer.cellEndLocation;\r\n\r\n\t\tthis._startLocation = cellStartLocation + (index / clusterCount) * (cellEndLocation - cellStartLocation);\r\n\t\tthis._endLocation = cellStartLocation + (index + 1) / clusterCount * (cellEndLocation - cellStartLocation);\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\tif (dataItem.index < this.startIndex || dataItem.index >= this.endIndex) {\r\n\t\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ColumnSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t// important oder here, first real, then super. we need this to know size\r\n\t\tthis.validateDataElementReal(dataItem);\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative start location for the data item.\r\n\t *\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t * @return {number} Location (0-1)\r\n\t */\r\n\tprotected getStartLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet startLocation = this._startLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tstartLocation += dataItem.locations[this.xOpenField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstartLocation += dataItem.locations[this.yOpenField] - 0.5;\r\n\t\t}\r\n\t\treturn startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?:string): void {\r\n\t\tif (this.simplifiedProcessing) {\r\n\t\t\tthis.validateDataElement(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative end location for the data item.\r\n\t *\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t * @return {number} Location (0-1)\r\n\t */\r\n\tprotected getEndLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet endLocation = this._endLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tendLocation += dataItem.locations[this.xField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tendLocation += dataItem.locations[this.yField] - 0.5;\r\n\t\t}\r\n\t\treturn endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//\tif (dataItem.hasValue([this.xField, this.yField])) { // todo: this doesn't work with categories, think of a better way\r\n\t\tlet l: number;\r\n\t\tlet r: number;\r\n\t\tlet t: number;\r\n\t\tlet b: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet xField = this.xField;\r\n\t\tlet xOpenField = this.xOpenField;\r\n\t\tlet yField = this.yField;\r\n\t\tlet yOpenField = this.yOpenField;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\t\tlet percentHeight: number = template.percentHeight;\r\n\r\n\t\tlet pixelWidth: number = template.pixelWidth;\r\n\t\tlet pixelHeight: number = template.pixelHeight;\r\n\r\n\t\tlet maxWidth: number = template.maxWidth;\r\n\t\tlet maxHeight: number = template.maxHeight;\r\n\r\n\t\tlet paddingLeft: number = template.pixelPaddingLeft;\r\n\t\tlet paddingRight: number = template.pixelPaddingRight;\r\n\t\tlet paddingTop: number = template.pixelPaddingTop;\r\n\t\tlet paddingBottom: number = template.pixelPaddingBottom;\r\n\r\n\t\tlet outOfBounds: boolean = false;\r\n\r\n\t\t// two category axes\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields) || !dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\t\t}\r\n\t\telse if (this.baseAxis == this.xAxis) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in percent\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomLocation = dataItem.locations[yOpenField];\r\n\t\t\tlet topLocation = dataItem.locations[yField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tbottomLocation = 0;\r\n\t\t\t\ttopLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tb = this.yAxis.getY(dataItem, yOpenField, bottomLocation);\r\n\t\t\tt = this.yAxis.getY(dataItem, yField, topLocation);\r\n\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[xField] = startLocation + (endLocation - startLocation) / 2;\r\n\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((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\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.column) {\r\n\t\t\t// otherwise might flicker when enabling\r\n\t\t\tdataItem.column.width = 0;\r\n\t\t\tdataItem.column.height = 0;\r\n\t\t\tdataItem.column.__disabled = true;\r\n\t\t}\r\n\r\n\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\tlet rangeColumn: Sprite = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\tif (rangeColumn) {\r\n\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\trangeColumn.width = 0;\r\n\t\t\t\trangeColumn.height = 0;\r\n\t\t\t\trangeColumn.__disabled = true;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Apply different state/coloring to columns based on the change value.\r\n\t *\r\n\t * @param {Sprite} sprite Sprite to apply state to\r\n\t * @todo Do not apply accessibility to wicks of the candlesticks\r\n\t */\r\n\tprotected setColumnStates(sprite: Sprite): void {\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = sprite.dataItem;\r\n\r\n\t\tif (this.xAxis instanceof ValueAxis || this.yAxis instanceof ValueAxis) {\r\n\t\t\tlet open: number;\r\n\t\t\tlet value: number;\r\n\t\t\tlet change: number;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tif (this.xOpenField && this.xField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.xOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.xField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.xAxis.axisFieldName + \"X\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.yOpenField && this.yField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.yOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.yField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.yAxis.axisFieldName + \"Y\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (value < open) {\r\n\t\t\t\tdataItem.droppedFromOpen = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromOpenState)\r\n\t\t\t\tsprite.setState(this._dropFromOpenState, 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromOpen = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromOpenState)\r\n\t\t\t\tsprite.setState(this._riseFromOpenState, 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (change < 0) {\r\n\t\t\t\tdataItem.droppedFromPrevious = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromPreviousState)\r\n\t\t\t\tsprite.setState((this._dropFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromPrevious = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromPreviousState)\r\n\t\t\t\tsprite.setState((this._riseFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of column elements in the series.\r\n\t *\r\n\t * @return {ListTemplate} Columns\r\n\t */\r\n\tpublic get columns(): ListTemplate {\r\n\t\tif (!this._columns) {\r\n\t\t\tthis._columns = new ListTemplate(this.createColumnTemplate());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._columns));\r\n\t\t\tthis._disposers.push(this._columns.template);\r\n\t\t}\r\n\t\treturn this._columns;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a column element to use as a template.\r\n\t *\r\n\t * @return {this[\"_column\"]} Column template\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column();\r\n\t}\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with pther series.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Clustered?\r\n\t */\r\n\tpublic set clustered(value: boolean) {\r\n\t\tthis.setPropertyValue(\"clustered\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Clustered?\r\n\t */\r\n\tpublic get clustered(): boolean {\r\n\t\treturn this.getPropertyValue(\"clustered\");\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return {SpriteState} State\r\n\t */\r\n\tpublic get dropFromOpenState(): SpriteState {\r\n\t\tif (!this._dropFromOpenState) {\r\n\t\t\tthis._dropFromOpenState = this.states.create(\"dropFromOpenState\");\r\n\t\t}\r\n\t\treturn this._dropFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return {SpriteState} State\r\n\t */\r\n\tpublic get dropFromPreviousState(): SpriteState {\r\n\t\tif (!this._dropFromPreviousState) {\r\n\t\t\tthis._dropFromPreviousState = this.states.create(\"dropFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._dropFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return {SpriteState} State\r\n\t */\r\n\tpublic get riseFromOpenState(): SpriteState {\r\n\t\tif (!this._riseFromOpenState) {\r\n\t\t\tthis._riseFromOpenState = this.states.create(\"riseFromOpenState\");\r\n\t\t}\r\n\t\treturn this._riseFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return {SpriteState} State\r\n\t */\r\n\tpublic get riseFromPreviousState(): SpriteState {\r\n\t\tif (!this._riseFromPreviousState) {\r\n\t\t\tthis._riseFromPreviousState = this.states.create(\"riseFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._riseFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates value of the related legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ColumnSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\r\n\t\tif (this.legendDataItem) {\r\n\t\t\tlet marker: Container = this.legendDataItem.marker;\r\n\t\t\tlet fromOpenState: SpriteState;\r\n\t\t\tlet fromPreviousState: SpriteState;\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tif (dataItem.droppedFromOpen) {\r\n\t\t\t\t\tfromOpenState = this._dropFromOpenState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromOpenState = this._riseFromOpenState;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (dataItem.droppedFromPrevious) {\r\n\t\t\t\t\tfromPreviousState = this._dropFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromPreviousState = this._riseFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(marker.children.iterator(), (child) => {\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tchild.setState(fromPreviousState);\r\n\t\t\t\t\tchild.setState(fromOpenState);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// todo: think what to do here, maybe apply above states based on totals?\r\n\t\t\t\t\tchild.setState(this._riseFromPreviousState);\r\n\t\t\t\t\tchild.setState(this._riseFromOpenState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[ColumnSeries]].\r\n\t *\r\n\t * @param {ColumnSeries} source Source series\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.columns.template.copyFrom(source.columns.template);\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationX(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet y location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationY(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixVerticalCoordinate(coordinate: number): number {\r\n\t\tlet paddingBottom = this.columns.template.pixelPaddingBottom;\r\n\t\tlet paddingTop = this.columns.template.pixelPaddingTop;\r\n\r\n\t\tlet minY: number = -paddingTop;\r\n\t\tlet maxY: number = this.yAxis.axisLength + paddingBottom;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minY, maxY);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixHorizontalCoordinate(coordinate: number): number {\r\n\t\tlet paddingLeft = this.columns.template.pixelPaddingLeft;\r\n\t\tlet paddingRight = this.columns.template.pixelPaddingRight;\r\n\r\n\t\tlet minX: number = -paddingLeft;\r\n\t\tlet maxX: number = this.xAxis.axisLength + paddingRight;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minX, maxX);\r\n\t}\r\n}\r\n\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"],"sourceRoot":""}