{"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","dataChangeUpdate","leftAxesWidth","measuredWidth","rightAxesWidth","paddingLeft","paddingRight","handleXAxisChange","event","updateXAxis","target","handleYAxisChange","updateYAxis","processXAxis","axis","newValue","chart","renderer","axisLetter","observe","handleXAxisRangeChange","dataProvider","processAxis","processYAxis","handleYAxisRangeChange","range","getCommonAxisRange","xAxes","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","start","end","yAxes","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","showAxisTooltip","showSeriesTooltip","x","y","hideObjectTooltip","updateLegendValue","sprites","sprite","hideTooltip","position","topLeft","bottomRight","pixelWidth","pixelHeight","seriesPoints","each","tooltip","setBounds","point","showTooltipAtPosition","sort","a","b","length","top_1","bottom","topSeriesPoints","botSeriesPoints","i","len","nextY","pointY","invalid","validate","label","pixelY","measuredHeight","pixelMarginBottom","nextHeight","pixelMarginTop","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","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","pointerOrientation","returnBulletDefaultState","_tmin","clear","_tmax","_smin","_smax","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","maxY","getStackValue","stackX","stackY","processSeriesDataItems","xAxisId","yAxisId","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","stackedSeries","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","_minSeriesDifference","MAX_VALUE","gridInterval","_gridInterval","gridDuration","pushAll","periodCount","baseDuration","handleSelectionExtremesChange","calculateZoom","chooseInterval","_minZoomed","_maxZoomed","_gridCount","baseInterval","_gridDate","Date","_nextGridUnit","_intervalDuration","_difference","findClosestIndex","hasMoreThanOne","postProcessSeriesDataItem","addEmptyUnitsBreaks","startDate","toString","skipEmptyPeriods","startTime","startTimeStr","this_1","create","_axisBreaks","breakGridCount","gridDate","getGridDate","intervalCount","realIntervalCount","prevTimestamp","newDate","timestamp","getBreaklessDate","durationBreaksRemoved","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","leftCount","leftDataItem","leftDate","rightCount","rightDataItem","rightDate","getCurrentLabelFormat","ticks","labels","zoomToDates","skipRangeEvent","parse","zoomToValues","asIs","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","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","local","_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","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","invalidateLayout","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","sum","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","positionBullets","mAngle1","mAngle2","cpx","cpy","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// commented, because series does this.\r\n\t\t\t//$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\t//axis.dataChangeUpdate();\r\n\t\t\t//});\r\n\r\n\t\t\t//$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\t//axis.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.showAxisTooltip(this.xAxes, xPosition);\r\n\t\t\tthis.showAxisTooltip(this.yAxes, 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\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\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}\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\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 topSeriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\t\t\tlet botSeriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\r\n\t\t\tfor (let i = 0, len = seriesPoints.length; i < len; i++) {\r\n\t\t\t\tif (seriesPoints[i].point.y < top + (bottom - top) / 2) {\r\n\t\t\t\t\ttopSeriesPoints.push(seriesPoints[i]);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tbotSeriesPoints.push(seriesPoints[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet nextY = top;\r\n\r\n\t\t\t//@todo: solve overlapping when tooltips are close to center\r\n\t\t\tfor (let i = 0, len = topSeriesPoints.length; i < len; i++) {\r\n\t\t\t\tlet series = topSeriesPoints[i].series;\r\n\t\t\t\tlet pointY = topSeriesPoints[i].point.y;\r\n\t\t\t\tlet tooltip = series.tooltip;\r\n\r\n\t\t\t\ttooltip.setBounds({ x: 0, y: nextY, width: this.pixelWidth, height: bottom });\r\n\r\n\t\t\t\tif (tooltip.invalid) {\r\n\t\t\t\t\ttooltip.validate();\r\n\t\t\t\t}\r\n\t\t\t\ttooltip.toBack();\r\n\t\t\t\t//@labeltodo\r\n\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}\r\n\r\n\t\t\tlet nextHeight = bottom;\r\n\t\t\tfor (let i = botSeriesPoints.length - 1; i >= 0; i--) {\r\n\t\t\t\tlet series = botSeriesPoints[i].series;\r\n\t\t\t\tlet tooltip = series.tooltip;\r\n\t\t\t\tlet pointY = botSeriesPoints[i].point.y;\r\n\r\n\t\t\t\ttooltip.setBounds({ x: 0, y: 0, width: this.pixelWidth, height: nextHeight });\r\n\t\t\t\tif (tooltip.invalid) {\r\n\t\t\t\t\ttooltip.validate();\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttooltip.toBack();\r\n\t\t\t\t//@labeltodo\r\n\t\t\t\tnextHeight = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY - tooltip.pixelY + pointY - tooltip.pixelMarginTop }, tooltip).y;\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}\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\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\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\t\tif (this.xAxis) {\r\n\t\t\tthis.xAxis.dataChangeUpdate();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tthis.yAxis.dataChangeUpdate();\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);\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\tminX = $math.min(minX, stackX);\r\n\t\t\t\t}\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\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));\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));\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\tfor (let a of dataItem.bullets) {\r\n\t\t\t\t\t\t\t\tlet bullet = a[1]\r\n\t\t\t\t\t\t\t\tbullet.isHover = true;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis._prevTooltipDataItem = dataItem;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (this.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 * 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\"]): void {\r\n\t\tsuper.handleDataItemWorkingValueChange(dataItem);\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.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\tskipEmptyPeriods?: boolean;\r\n\tmarkUnitChange?: 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 * [_minSeriesDifference description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _minSeriesDifference: number = Number.MAX_VALUE;\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\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: 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]);\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\r\n\t/**\r\n\t * [dataChangeUpdate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic dataChangeUpdate(): void {\r\n\t\tsuper.dataChangeUpdate();\r\n\t\tthis._minSeriesDifference = Number.MAX_VALUE;\r\n\r\n\t\t// use day duration if only one item. as this method is called before data is processed, we check data.length and not dataItems.length\r\n\t\tlet hasMoreThanOne = false;\r\n\r\n\t\tif (this.chart.data.length > 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tif (series.data.length > 1) {\r\n\t\t\t\t\thasMoreThanOne = true;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tif (!hasMoreThanOne) {\r\n\t\t\tthis._minSeriesDifference = $time.getDuration(\"day\");\r\n\t\t}\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\tpublic 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 = 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\taxisBreak.gridDate = $time.round(new Date(axisBreak.adjustedStartValue), axisBreak.gridInterval.timeUnit);\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 = this.getBreaklessDate(axisBreak, this.baseInterval.timeUnit, this.baseInterval.count);\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\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\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 + 1);\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) {\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\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\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 value + 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 value + 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\t\t\tif (this._minSeriesDifference > difference) {\r\n\t\t\t\tthis._minSeriesDifference = difference;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet differece: number = time - prevSeriesTime;\r\n\t\tif (differece > 0) {\r\n\t\t\tif (this._minSeriesDifference > differece) {\r\n\t\t\t\tthis._minSeriesDifference = differece;\r\n\t\t\t}\r\n\t\t}\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._minSeriesDifference, 1);\r\n\t\t// handle short months\r\n\t\tif (this._minSeriesDifference >= $time.getDuration(\"day\", 27) && baseInterval.timeUnit == \"week\") {\r\n\t\t\tbaseInterval.timeUnit = \"month\";\r\n\t\t}\r\n\t\t// handle daylight saving\r\n\t\tif (this._minSeriesDifference >= $time.getDuration(\"hour\", 23) && baseInterval.timeUnit == \"hour\") {\r\n\t\t\tbaseInterval.timeUnit = \"day\";\r\n\t\t}\r\n\r\n\t\tbaseInterval.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 * @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 `changeDateFormats` to apply different formats to the first label in\r\n\t * 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 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\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\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);\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): 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) {\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/**\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\tcreateAssets() {\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\tcopyFrom(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 {\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/**\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\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\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\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\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\t\t\t\tthis.positionBullets();\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\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 * ============================================================================\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\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\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\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 * 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\r\n\tcreateAssets() {\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\tcopyFrom(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\tcreateAssets() {\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\tcopyFrom(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\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\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\tpublic 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 properties from other element of the same type.\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\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\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\"].value;\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\"]): void {\r\n\t\tthis.invalidateDataItems();\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\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\"]): 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);\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\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\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 (!$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":""}