{"version":3,"sources":["webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/DateAxisBreak.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/DateAxis.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/CategoryAxisBreak.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/CategoryAxis.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/XYSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/XYChartScrollbar.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/XYChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/LineSeriesSegment.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/DurationAxis.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/LineSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/RadarSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisFillCircular.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/GridCircular.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisLabelCircular.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRendererCircular.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRendererRadial.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/RadarChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/ClockHand.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/GaugeChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/PercentSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/PercentChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/PieTick.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/PieSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/PieChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/PieSeries3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/PieChart3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/SlicedChart.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/FlowDiagramNode.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/FlowDiagramLink.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/FlowDiagram.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/LabelBullet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/SankeyNode.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/SankeyLink.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/SankeyDiagram.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/ChordNode.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/core/elements/QuadraticCurve.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/ChordLink.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/ChordDiagram.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/Column.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/ColumnSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/TreeMapSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/TreeMap.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRendererX3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/axes/AxisRendererY3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/Column3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/ColumnSeries3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/types/XYChart3D.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/Candlestick.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/CandlestickSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/OHLC.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/OHLCSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/StepLineSeriesSegment.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/StepLineSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/RadarColumn.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/RadarColumnSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/FunnelSlice.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/FunnelTick.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/FunnelSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/PyramidSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/PictorialStackedSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/ConeColumn.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/ConeSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/CurvedColumn.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/series/CurvedColumnSeries.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/CircleBullet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/ErrorBullet.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/elements/NavigationBar.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/cursors/Cursor.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/cursors/XYCursor.js","webpack:///./node_modules/@amcharts/amcharts4/.internal/charts/cursors/RadarCursor.js"],"names":["_super","DateAxisBreak","_this","call","this","className","applyTheme","Object","defineProperty","prototype","get","getPropertyValue","set","value","setPropertyValue","startValue","getTime","axis","invalidate","invalidateSeries","enumerable","configurable","endValue","ValueAxisBreak","registeredClasses","DateAxisDataItem","values","date","endDate","dates","setDate","ValueAxis","DateAxis","_gapBreaks","gridIntervals","List","groupIntervals","dateFormats","Dictionary","periodChangeDateFormats","_baseIntervalReal","timeUnit","count","_prevSeriesTime","_minDifference","_firstWeekDay","groupMin","groupMax","snapTooltip","tooltipPosition","groupCount","events","on","getDFFormatter","pushAll","axisFieldName","fillRule","dataItem","component","gridInterval","_gridInterval","gridDuration","Math","round","min","axisFill","__disabled","applyInternalDefaults","hasKey","setKey","language","translate","createDataItem","createAxisBreak","validateDataItems","start","end","baseDuration","periodCount","max","getFirstWeekDay","mainBaseDuration","mainBaseInterval","maxZoomFactor","_deltaMinMax","newPeriodCount","zoom","handleSelectionExtremesChange","calculateZoom","difference","adjustDifference","_minZoomed","_maxZoomed","dataSetChanged","groupData","modifiedDifference","startLocation","endLocation","groupInterval","chooseInterval","_groupInterval","newId","_currentDataSetId","dispatch","series","each","baseAxis","setDataSet","_gridCount","baseInterval","_nextGridUnit","_intervalDuration","_gridDate","Date","minZoomed","_df","utc","timezoneMinutes","timezone","iterator","field_1","getAxisField","undefined","minZoomedStr","toString","startDataItem","dataItemsByAxis","getKey","uid","currentDataSetId","startIndex","findFirst","index","dataItems","findClosestIndex","x","maxZoomed","maxZoomedStr","endDataItem","endIndex","length","outOfRange","dataRangeInvalid","validateDataRange","time","key","previousDataItem","getIndex","previousDate","validateData","minDifference","Number","MAX_VALUE","seriesDataChangeUpdate","postProcessSeriesDataItems","seriesGroupUpdate","addEmptyUnitsBreaks","JSON","stringify","_baseInterval","mainDataSet","postProcessSeriesDataItem","groupSeriesData","dataGrouped","bulletsContainer","removeChildren","intervals_1","mainIntervalDuration_1","interval","intervalDuration","push","_dataSets","dispose","clear","axisLetter","dataSetId","dataSet","template","clone","dataSets","newDataItem","roundedDate","previousTime","NEGATIVE_INFINITY","i","dataFields","dfkey","df","dfk","indexOf","getDate","firstDayOfWeek","currentTime","_adapterO","vkey","apply","dataField","workingValue","create","dataContext","setWorkingLocation","locations","dateX","openDateX","dateY","openDateY","_index","dvalues","open","close","low","high","sum","average","propertyFields","fieldValue","f","properties","hasProperties","setProperty","groupDataItems","groupFieldName","groupFields","dateFormatter","intervalID","startDate","startTime","setCalculatedValue","skipEmptyPeriods","_axisBreaks","axisBreak","_loop_1","this_1","startTimeStr","hasData","axisBreaks","fixAxisBreaks","breakGridCount","ceil","endPosition","startPosition","adjustedEndValue","adjustedStartValue","gridDate","getGridDate","intervalCount","realIntervalCount","prevTimestamp","newDate","timestamp","isInBreak","durationBreaksRemoved","countBreaksRemoved","getBreaklessDate","validateAxisElements","prevGridDate","dataItemsIterator_1","_dataItemsIterator","resetIterators","_loop_2","this_2","format","markUnitChange","text","find","appendDataItem","validateDataElement","renderer_1","renderer","breakSize","timeUnit_1","intervalCount_1","startPoint","endPoint","minGridDistance","prevGridDate_1","timestamp_1","_loop_3","text_1","moveValue","adjustedMax","itemIndex","_axisItemCount","endTimestamp","position","valueToPosition","fillEndPosition","isRange","tick","disabled","updateTickElement","grid","updateGridElement","fill","updateFillElement","mask","bullet","updateBullet","label","location_1","location","updateLabelElement","adjustMinMax","step","fixMin","endTime","fixMax","duration","gridCount","intervals","lastIndex","formatLabel","dateToPosition","anyToPosition","dateToPoint","point","positionToPoint","angle","positionToAngle","y","anyToPoint","valueToPoint","positionToDate","positionToValue","getPositionX","stackKey","range","getTimeByLocation","baseValue","getPositionY","stack","getValue","getAngle","workingLocations","processSeriesDataItem","timezoneOffset","setTime","getTimezoneOffset","setValue","openTime","openDate","prevSeriesTime","abs","differece","updateAxisBySeries","_mainBaseInterval","timeInterval","breakTemplate","startLine","endLine","fillShape","invalidateData","getTooltipText","tooltipDate","tooltipDateFormat","dateFormat","getPositionLabel","roundPosition","axisLocation","getCellStartPosition","getCellEndPosition","getSeriesDataItem","findNearest","deltaValue","nextDate","key_1","Infinity","getCurrentLabelFormat","initRenderer","ticks","labels","baseGrid","animateMinMax","animation","animate","property","from","_minAdjusted","to","_maxAdjusted","rangeChangeDuration","rangeChangeEasing","handleExtremesChange","id","_finalMin","_finalMax","zoomToDates","skipRangeEvent","instantly","adjust","parse","zoomToValues","isEnd","isStart","groupInterval_1","min_1","max_1","POSITIVE_INFINITY","seriesMin","seriesMax","ds","mindi","maxdi","xAxis","yAxis","asIs","field","copyFrom","source","showTooltipAtPosition","local","toAxisPosition","closestDate_1","actualDate","actualTime_1","closestTime_1","tooltipLocation","chart","cursor","snapToSeries","showTooltipAtDataItem","_seriesPoints","tooltipText","tooltipHTML","hideTooltip","inited","makeGap","previous","connect","autoGapCount","prevDate","prevTime","CategoryAxisBreak","indexToPosition","invalidateDataItems","category","categoryToIndex","AxisBreak","CategoryAxisDataItem","seriesDataItems","endCategory","deltaPosition","isEnabled","oldCategory","deltaCoordinate","Axis","CategoryAxis","dataItemsByCategory","_lastDataItem","_disposers","addDisposer","event","removeKey","oldValue","categoryAxisDataItem","seriesId","remove","_series","invalidateDataRange","positionToIndex","minIndex","maxIndex","axisDataItem","i_1","seriesDataItem","validate","dataCount","floor","invalid","maxCount","axisLength","MAX_SAFE_INTEGER","frequency","_startIndex","_endIndex","_frequency","len","b","frequency_1","itemIndex_1","validateBreaks","validateAxisRanges","ghostLabel","invalidateLayout","fillEndIndex","fillPosition","AxisRendererY","measuredWidth","AxisRendererX","measuredHeight","html","currentText","disposeData","processDataItem","getDataItem","breakStartIndex","breakEndIndex","categoryToPosition","categoryToPoint","zoomToCategories","startCategory","zoomToIndexes","getAnyRangePath","startPos","endPos","getPositionRangePath","getFirstSeriesDataItem","categoryX","categoryY","getLastSeriesDataItem","getSeriesDataItemByCategory","index_1","sdi_1","category_1","getX","basePoint","categories","getY","tooltipDataItem","tooltip","breakStartPosition","breakEndPosition","breakPosition","positionToCategory","processConfig","config","sortBySeries","map","addDelayedMap","XYSeriesDataItem","customValue","valueX","valueY","openValueX","openValueY","setLocation","setCategory","openCategoryX","openCategoryY","getMin","fields","working","stackValue","getWorkingValue","getMax","Series","XYSeries","_xAxis","_yAxis","_xValueFields","_yValueFields","usesShowFields","_dataSetChanged","_maxxX","_maxxY","_propertiesChanged","isMeasured","cursorTooltipEnabled","cursorHoverEnabled","excludeFromTotal","mainContainer","Sprite","setElement","paper","add","stacked","_showBullets","pointerOrientation","stackToNegative","hideTooltipWhileZooming","returnBulletDefaultState","observe","legendDataItem","childrenCreated","legend","readerTitle","resetExtremes","_tmin","_tmax","_smin","_smax","dataChangeUpdate","valueYShow","openValueXShow","openValueYShow","defineFields","data","updateItemReaderText","_xField","_yField","Error","name","isHidden","hide","setInitialWorkingValues","e","_chart","raiseCriticalError","updateDataItem","dataItemsX","clearCatAxis","dataItemsY","xAxisFieldName","xField","xOpenField","yAxisFieldName","yField","yOpenField","_xOpenField","_yOpenField","addValueField","setCategoryAxisField","setDateAxisField","afterDraw","createMask","path_1","getMaskPath","axisRanges","fillPath","path","width","height","plotContainer","maxWidth","maxHeight","pixelY","pixelX","minBulletDistance","updateTooltip","maskBullets","leftAxesContainer","layout","rightAxesContainer","gridContainer","topAxesContainer","bottomAxesContainer","xAxes","setXAxis","oldAxis","removeValue","registerSeries","yAxes","setYAxis","handleYAxisSet","_baseAxis","addData","rawDataItem","removeCount","skipRaw","scrollbarSeries","_parseDataFrom","setData","changed","_prevStartIndex","_prevEndIndex","appeared","processValues","minX","maxX","minY","maxY","workingStartIndex","workingEndIndex","getStackValue","stackX","stackY","processSeriesDataItems","xAxisId","yAxisId","dispatchImmediately","stackedSeries","isDisposed","tmin","isShowing","tmax","_prevTooltipDataItem","xPosition","yPosition","visible","isHiding","getAdjustedXLocation","bulletLocationX","getAdjustedYLocation","bulletLocationY","e_1","_a","hideSeriesTooltipsOnSelection","selection","downPoint","updateLegendValue","tooltipXField","tooltipYField","tooltipPoint","getPoint","pixelHeight","pixelWidth","tooltipX","tooltipY","type","target","_b","sprites","_c","next","done","sprite","parent","interactions","isRealHover","isHover","e_1_1","error","return","showTooltip","e_2","fireEvent","e_2_1","shouldCreateBullet","bulletTemplate","hasValue","disabledField","positionBullet","getBulletLocationX","getBulletLocationY","positionX","positionY","openValue","closeValue","middleValue","rightLocation","locationX","leftLocation","openPositionX","topLocation","locationY","bottomLocation","openPositionY","positionBulletReal","bulletLocation","updateStacking","invalidateProcessedData","show","anim","delay","interpolationDuration","defaultState","transitionDuration","animationsEnabled","a","realDuration","sequencedInterpolation","sequencedInterpolationDelay","disable","enable","isFinished","hidden","hiddenState","validateDataElements","handleDataItemWorkingValueChange","axisSeries","field_2","backwards","prevSeries","prevDataItem","prevValue","prevRealValue","_tooltipXField","_tooltipYField","selectionMin","selectionMax","processingErrors","xKey","yKey","stackKeyX","stackKeyY","_itemReaderTextChanged","val","itemReaderText","axisBulletsContainer","XYChartScrollbar","interfaceColors","InterfaceColorSet","padding","scrollbarChart","createChild","shouldClone","margin","interactionsEnabled","_scrollbarChart","filter","DesaturateFilter","filterUnits","filters","minHeight","minWidth","unselectedOverlay","getFor","fillOpacity","toBack","_unselectedOverlay","background","cornerRadius","thumbBackground","thumb","hoverState","states","downState","handleSeriesAdded","handleSeriesRemoved","sourceSeries","newValue","zoomOutButton","inputDateFormat","locale","addXAxis","addYAxis","onlyShowOnViewport","queue","stroke","title","inside","line","strokeOpacity","minLabelPosition","maxLabelPosition","axisFills","labelsTemplate","maxZoomCount","minZoomCount","vAxis_1","sourceAxis","clonedFrom","minDefined","maxDefined","vAxis_2","vAxis_3","vAxis_4","showOnInit","zoomOutAxes","updateByOrientation","orientation","off","err","handleDataChanged","dataProvider","invalidateRawData","updateThumb","dispatchEvents","w","h","Scrollbar","XYChartDataItem","SerialChart","XYChart","_axisRendererX","_axisRendererY","arrangeTooltips","chartContainer","topAxesCont","Container","zIndex","yAxesAndPlotCont","yAxesAndPlotContainer","bottomAxesCont","leftAxesCont","contentAlign","updateXAxesMargins","plotCont","mouseWheelBehavior","_cursorContainer","rightAxesCont","seriesContainer","ZoomOutButton","align","valign","marginTop","marginRight","_bulletMask","exportable","draw","toFront","updateSeriesLegend","updatePlotElements","leftAxesWidth","rightAxesWidth","paddingLeft","paddingRight","reinit","handleXAxisChange","updateXAxis","handleYAxisChange","updateYAxis","processXAxis","handleXAxisRangeChange","processAxis","processYAxis","handleYAxisRangeChange","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","minZoomFactor","seriesAppeared","scrollbarY","scrollbar","skipRangeEvents","axes","zoomable","syncWithAxis","axisStart","axisEnd","inversed","opposite","processRenderer","_dataUsers","breakContainer","Disposer","dataUsers","updateSeriesMasks","_xAxes","handleAxisRemoval","autoDispose","_yAxes","removeFromInvalidComponents","dataInvalid","patterns","colors","backgroundOpacity","Color","_cursor","removeDispose","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","tapToActivate","setTapToActivate","xPosition_1","yPosition_1","showSeriesTooltip","exceptAxes_1","dataItems_1","snpSeries","closestDataItem_1","getClosest","closestSeries","handleSnap","_cursorXPosition","showAxisTooltip","_cursorYPosition","sortSeriesTooltips","closestDataItem","minDistance","xPos","positionToCoordinate","toGlobalPosition","yPos","dxPosition","dyPosition","distance","sqrt","pow","hideObjectTooltip","seriesPoints","setBounds","cursor_1","maxTooltipDistance","nearestSeries_1","nearestPoint_1","cursorPoint_1","smallestDistance_1","seriesPoint","fixedPoint","newSeriesPoints_1","handleOutReal","np","topLeft_1","bottomRight_1","sum_1","filteredSeriesPoints_1","firstSeries","sort","reverse","averageY","svgContainer","SVGContainer","top_1","bottom","dropped","nextHeight","pointY","pixelMarginTop","nextY","pixelMarginBottom","except","getUpdatedRange","behavior","xRange","priority","yRange","_panStartXRange","_panStartYRange","_panEndXRange","panEndRange","panStartRange","delta","snapOnPan","_panEndYRange","maxPanOut","axisRange","newStart","newEnd","newRange","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","adapter","arg","_scrollbarY","handleYScrollbarChange","fixRange","declination","stop","realRange","originalRange","cellWidth","handleWheel","svgPoint","htmlContainer","cssScale","plotPoint","shift","handleWheelReal","handleHorizontalWheel","horizontalMouseWheelBehavior","rangeX","rangeY","shiftStep","differenceX","newStartX","newEndX","differenceY","newStartY","newEndY","location2X","location2Y","_mouseWheelDisposer","wheelable","hoverable","_mouseWheelDisposer2","dataSourceDateFields","populateDataSourceFields","dataSourceNumberFields","len_1","len_2","configOrder","createSeries","_zoomOutButton","button","addScrollbarData","removeScrollbarData","dataUser","removeData","isTouchProtected","handleTapToActivate","handleTapToActivateDeactivation","relevant","Responsive","maybeXS","state","stateId","sbstate","LineSeriesSegment","fillSprite","strokeSprite","drawSegment","points","closePoints","smoothnessX","smoothnessY","smoothing","smooth","closed","lineElement","fillElement","DurationAxisDataItem","DurationAxis","_baseUnit","durationFormatter","axisDurationFormat","strictMode","minMaxStep","baseUnit","initialMin","initialMax","divisors","realDivisor","divisors_1","divisors_1_1","divisor","exponent","log","LOG10E","power","reducedCount","closest","getValueUnit","getFormat","_tooltipDurationFormat","_stepDecimalPlaces","valueStr","tooltipDurationFormat","LineSeriesDataItem","LineSeries","segments","createSegment","applyOnClones","_segmentsIterator","createNewItems","tensionX","tensionY","segmentsContainer","initialY","setWorkingValue","initialX","notRange","segment","tooltipColorSource","reset","openSegmentWrapper","_adjustedStartIndex","sliceData","findAdjustedIndex","_workingStartIndex","_workingEndIndex","adjustedIndex","openIndex","params","openSegment","getSegment","getFirst","addToClose","closeIndex","propertiesChanged","strokeDasharray","contents","group","node","removeAttribute","valuesFound","updateSegmentProperties","addPoints","closeSegment","itemProperties","checkOnly","propertyName","currentValue","currentValueStr","createLegendMarker","marker","disposeChildren","Line","x2","y2","Rectangle","color","colorOrig","bullets","Bullet","copyToLegendMarker","hasLabels","children","child","Label","RadarSeriesDataItem","RadarSeries","connectEnds","radius","startAngle","endAngle","pixelRadius","pixelInnerRadius","unshift","moveTo","updateRendererRefs","rendererX","rendererY","axisRendererY","AxisFillCircular","element","innerRadius","setPercentProperty","AxisFill","GridCircular","pixelPerfect","Grid","AxisLabelCircular","fdx","fdy","locationOnPath","rotation","textAlign","textPathElement","axisRadius","sign","pixelRadiusY","axisRadiusY","fixPosition","dx","dy","isNegative","realRadius","Percent","relativeRotation","labelRadius","bent","point_1","attr","horizontalCenter","verticalCenter","bbox","pixelPaddingBottom","pixelPaddingTop","pixelPaddingLeft","pixelPaddingRight","dH","dW","_measuredHeight","_measuredWidth","AxisLabel","AxisRendererCircular","pixelRadiusReal","useChartAngles","setAxis","cos","atan2","sin","PI","mr","innerHeight","innerWidth","innerRadiusModifyer","position2","coordinate","arc","angleToPosition","updateAxisLine","gridInnerRadius","toggleVisibility","tickLength","AxisBullet","positionItem","fitsToBounds","invalidateAxisItems","createGrid","createFill","createLabel","pointToPosition","coordinateToPosition","AxisRenderer","AxisRendererRadial","gridType","axisAngle","gridLocation","cellEndLocation","updateBaseGridElement","updateBreakElement","createBreakSprites","WavedCircle","bigNum","bbx","bby","bbw","bbh","tooltipOrientation","axisFullLength","RadarChartDataItem","RadarChart","radarContainer","Circle","opacity","beforeDraw","rect","innerRect","wr","hr","maxRadius","diameter","_pixelInnerRadius","definedBBox","validatePosition","ClockHand","_axis","pin","startWidth","endWidth","hand","Trapezoid","leftSide","rightSide","x0","x1","_pin","_hand","showValue","easing","_value","newAngle","currentAngle","rotationDirection","updateValue","GaugeChartDataItem","GaugeChart","hands","processHand","PercentSeriesDataItem","uidAttr","slice","toValue","setVisibility","noChangeValues","_legendDataItem","valueLabel","_tick","tick_1","addSprite","ticksContainer","_label","label_1","labelsContainer","_slice","component_1","slice_1","slices","slicesContainer","itemsFocusable","role","focusable","ev","populateString","hiddenInLegend","PercentSeries","_addAllDataItems","ColorSet","calculatePercent","alignLabels","skipFocusThreshold","transitionEasing","createSlice","createTick","Tick","_slices","initSlice","_ticks","initTick","_labels","initLabel","currentStep","feedLegend","arrangeLabels","lh","nextLabel","getNextLabel","arrangeLabels2","previousTop","nextDataItem","isActive","handleSliceScale","handleSliceMove","setAlignLabels","legendSettings","labelText","itemLabelText","valueText","itemValueText","labelState","tickState","PercentChartDataItem","PercentChart","legendData_1","setLegend","valueLabels","itemContainers","percentSeriesDataItem","PieTick","ix","scale","y0","iy","radiusY","y1","r","PieSeriesDataItem","radiusValue","PieSeries","Slice","shiftRadius","togglable","lastHitPointer","touch","activeState","_leftItems","_rightItems","_currentStartAngle","_arcRect","_maxRadiusPercent","radiusValuePercent","percent","aAngle","middleAngle","bAngle","ignoreZeroValues","normalizedMiddleAngle","arcRect","depth","_pixelRadius","_startAngleInternal","_endAngleInternal","PieChartDataItem","PieChart","updateRadius","validateLayout","_chartPixelRadius","updateSeriesAngles","chartCont","chartRadius","chartPixelInnerRadius","seriesRadius","_chartPixelInnerRadius","PieSeries3DDataItem","depthValue","PieSeries3D","Slice3D","depthPercent","PieChart3DDataItem","PieChart3D","invalidateDataUsers","SlicedChartDataItem","SlicedChart","FlowDiagramNode","Legend","draggable","inert","setStateOnChildren","invalidateLinks","handleHit","outgoingDataItems","toNode","link","incomingDataItems","fromNode","colorMode","gradient","stop_1","stops","stop_2","_incomingDataItems","sortBy","_incomingSorted","fromName","_outgoingDataItems","_outgoingSorted","setColorProperty","_background","column","RoundedRectangle","itemContainer","deepInvalidate","FlowDiagramLink","positionBullets","_bulletsContainer","_bulletsMask","bulletsMask","middleLine","rotationField","addColor","setFill","_gradient","measureElement","_bullets","Polyline","getTooltipX","getTooltipY","LinearGradient","FlowDiagramDataItem","toName","_link","link_1","links","Chart","FlowDiagram","nodePadding","minNodeSize","linksContainer","nodesContainer","nodes","sortNodes","strokeModifier","LinearGradientModifier","opacities","fillModifier","strNode","getNodeValue","_sorted","sortedIterator","total","incomingTotal","outgoingTotal","totalIncoming","totalOutgoing","changeSorting","_nodes","createNode","_links","createLink","LabelBullet","truncate","hideOversized","handleMaxSize","SankeyNode","nextInCoord","nextOutCoord","nameLabel","orientation_1","endX","endY","linkWidth","valueHeight","startX","startY","SankeyLink","tension","controlPointDistance","Polyspline","makeBackwards","setState","_d","isTemplate","xt0","yt0","xt1","yt1","xb0","xb1","yb0","yb1","xm0","xm1","ym0","ym1","_bbox","cpd","kxt0","kyt0","kxt1","kyt1","kxm0","kym0","kxm1","kym1","kxb0","kyb0","kxb1","kyb1","SankeyDiagramDataItem","SankeyDiagram","nodeAlign","_valueHeight","_levelCount","level","getNodeLevel","levels","_counter","checkLoop","calculateValueHeight","_levelSum","_levelNodesCount","maxSum","availableHeight","maxSumLevel","realValue","levelNodeCount","_maxSumLevel","maxSumLevelNodeCount","finalHeight","_heightAnimation","animationOptions","Animation","interpolationEasing","container","nextCoordinate","levelCoordinate","nodeCount","showReal","preventShow","container_1","nodeHeight","ChordNode","updateRotation","arc_1","sliceStartAngle_1","childAngle","childRadius","labelAngle","adjustedTotal","nextAngle","nonRibbon","percentWidth","valueAngle","mAngle","trueStartAngle","tx","ty","QuadraticCurve","cpx","cpy","p1","p2","cp","d","point1","point2","ChordLink","fromX","fromY","toX","toY","mAngle1","mAngle2","ChordDiagramDataItem","ChordDiagram","chordContainer","newTotal","Column","disableType","createAssets","handleKidAdded","ColumnSeriesDataItem","_column","setColumn","columns","_rangesColumns","ColumnSeries","_startLocation","_endLocation","clustered","columnsContainer","_columnsContainer","prevAxisIndex_1","baseAxisSeries","clusterCount_1","sortedByAxis_1","index_2","sortedItem","cellStartLocation","sortCategoryAxis","disableUnusedColumns","currentPosition","deltaAnimation","validateDataElementReal","getStartLocation","getEndLocation","l","t","percentHeight","paddingTop","paddingBottom","outOfBounds","diw","dih","offset","fixHorizontalCoordinate","fixVerticalCoordinate","axisLenght","column_1","virtualParent","realX","realY","realWidth","realHeight","setColumnStates","rangeColumn","rangesColumns","itemWidth","itemHeight","_dropFromOpenState","_dropFromPreviousState","_riseFromOpenState","_riseFromPreviousState","open_1","change","droppedFromOpen","droppedFromPrevious","_columns","createColumnTemplate","fromOpenState_1","fromPreviousState_1","TreeMapSeriesDataItem","treeMapDataItem","_dataContext","TreeMapSeries","configField","hideReal","TreeMapDataItem","rows","hasChildren","getDuration","childValue","TreeMap","layoutAlgorithm","squarify","_usesData","maxLevels","currentLevel","hideParentColumns","sorting","strictMinMax","xRenderer","yRenderer","seriesTemplates","zoomToChartDataItem","_homeDataItem","_navigationBar","navigationBar","createTreeSeries","_tempSeries","homeDataItem","_homeText","getMinMax","layoutItems","_updateDataItemIndexes","navigationData","parentDataItem","initSeries","createTreeSeriesReal","currentlyZoomed","cursorOverStyle","Mouse","pointer","zoomToSeriesDataItem","toggleBullets","rangeChangeAnimation","_dataDisposers","once","binaryTree","dice","sliceDice","validateRawData","n","sums","Array","partition","j","valueOffset","valueTarget","k","hi","mid","valueLeft","valueRight","xk","yk","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","ratio","i0","i1","row","handleSeriesAdded2","handleDataItemValueChange","getLegendLevel","handleLegendSeriesAdded","legendParent","getExporting","exporting","info","AxisRendererX3D","dx3D","dy3D","getHeight","handle3DChanged","AxisRendererY3D","getWidth","Column3D","column3D","Rectangle3D","ColumnSeries3DDataItem","ColumnSeries3D","XYChart3DDataItem","XYChart3D","fixLayout","fixColumns","depthIndex","s","inversed_1","maskColumns","Candlestick","lowLine","highLine","CandlestickSeriesDataItem","lowValueX","lowValueY","highValueX","highValueY","CandlestickSeries","positiveColor","negativeColor","dropFromOpenState","riseFromOpenState","validateCandlestick","lowLine_1","highLine_1","close_1","yOpen","yClose","yLow","yLowField","yHigh","yHighField","open_2","close_2","xOpen","xClose","xLow","xLowField","xHigh","xHighField","rangeLowLine","rangehighLine","_xLowField","_yLowField","_xHighField","_yHighField","cw","ch","OHLC","openLine","highLowLine","closeLine","OHLCSeriesDataItem","OHLCSeries","openLine_1","highLowLine_1","closeLine_1","rangeOpenLine","rangeCloseLine","rangeHighLowLine","StepLineSeriesSegment","noRisers","vertical","StepLineSeriesDataItem","StepLineSeries","startLocationX","endLocationX","startLocationY","endLocationY","prevPoint","point0","RadarColumn","radarColumn","RadarColumnSeriesDataItem","RadarColumnSeries","lAngle","rAngle","tRadius","bRadius","cellAngle","temp","FunnelSlice","bottomWidth","topWidth","expandDistance","pt","pb","pr","pl","ed","tw","bw","tl","tr","br","bl","cpr","cpl","qp1","qp2","tickPoint","tt","tb","bt","bb","mlx","mrx","mty","mby","FunnelTick","p0","labelsOpposite","maxRight","maxBottom","FunnelSeriesDataItem","_sliceLink","sliceLink_1","sliceLinks","FunnelSeries","_nextY","bottomRatio","labelTemplate","dItem","_total","_count","getNextValue","nextValue","nextItem","formDataElement","sliceLink","decorateSlice","linkHeight","getLastLabel","lastLabel","lastY","lastX","_sliceLinks","labelAlign","labelValign","PyramidSeriesDataItem","PyramidSeries","pyramidHeight","valueIs","_nextWidth","relValue","_pyramidHeight","_pyramidWidth","absoluteSum","pyramidWidth","sliceTopWidth","c","tan","sliceHeight","sliceBottomWidth","totalSquare","square","sliceWidth","PictorialStackedSeriesDataItem","PictorialStackedSeries","_maskSprite","maskSprite","pictureWidth","pictureHeight","newWidth","newHeight","hs","ConeColumn","coneColumn","Cone","ConeSeriesDataItem","ConeSeries","CurvedColumn","curvedColumn","CurvedColumnSeriesDataItem","CurvedColumnSeries","CircleBullet","circle","ErrorBullet","errorLine","isDynamic","NavigationBarDataItem","DataItem","NavigationBar","textLink","TextLink","_linksIterator","triangle","Triangle","direction","marginLeft","separators","activeLink","fontWeight","getLast","separator","Component","Cursor","_stick","trackable","clickable","interaction","body","handleCursorDown","handleCursorUp","handleCursorMove","_generalBehavior","isLocalElement","svg","_stickPoint","triggerMove","stick","force","triggerMoveReal","invalidatePosition","getPositions","triggerDown","triggerDownReal","setGlobalStyle","grabbing","triggerUp","triggerUpReal","requestFrame","updatePoint","upPoint","_upPointOrig","_downPointOrig","getHitOption","default","updateSelection","cancelable","shouldPreventGestures","preventDefault","lockElement","XYCursor","_lineX","_lineY","_snapToDisposers","lineX","lineY","updateSize","_usesSelection","_positionPrecision","fixPoint","updateLinePositions","allHidden_1","getPanningRanges","selectionX","selectionY","hasMoved","getRanges","currentX","currentY","deltaX","deltaY","handleXTooltipPosition","handleYTooltipPosition","fullWidthLineX","currentItemStartPoint","currentItemEndPoint","fullWidthLineY","_selection","snapTo_1","snapError_1","snap","disposer","xx","yy","animationDuration","animationEasing","RadarCursor","truePixelRadius","updateLineX","updateLineY","fillStartAngle","fillEndAngle","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","upAngle","upRadius"],"mappings":"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","file":"js/chunk-2d216c05.1f2de009.js","sourcesContent":["/**\r\n * DateAxisBreak includes functionality to add breaks on a [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxisBreak } from \"./ValueAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar DateAxisBreak = /** @class */ (function (_super) {\r\n __extends(DateAxisBreak, _super);\r\n /**\r\n * Constructor\r\n */\r\n function DateAxisBreak() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"DateAxisBreak\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(DateAxisBreak.prototype, \"startDate\", {\r\n /**\r\n * @return Start date\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startDate\");\r\n },\r\n /**\r\n * Starting date for the break.\r\n *\r\n * @param value Start date\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startDate\", value)) {\r\n this.startValue = value.getTime();\r\n if (this.axis) {\r\n this.axis.invalidate();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxisBreak.prototype, \"endDate\", {\r\n /**\r\n * @return End date\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endDate\");\r\n },\r\n /**\r\n * Ending date for the break.\r\n *\r\n * @param value End date\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endDate\", value)) {\r\n this.endValue = value.getTime();\r\n if (this.axis) {\r\n this.axis.invalidate();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return DateAxisBreak;\r\n}(ValueAxisBreak));\r\nexport { DateAxisBreak };\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//# sourceMappingURL=DateAxisBreak.js.map","/**\r\n * DateAxis module\r\n */\r\nimport { __assign, __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem } from \"./ValueAxis\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { DateAxisBreak } from \"./DateAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines data item for [[DateAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar DateAxisDataItem = /** @class */ (function (_super) {\r\n __extends(DateAxisDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function DateAxisDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"DateAxisDataItem\";\r\n _this.applyTheme();\r\n _this.values.date = {};\r\n _this.values.endDate = {};\r\n return _this;\r\n }\r\n Object.defineProperty(DateAxisDataItem.prototype, \"date\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.dates[\"date\"];\r\n },\r\n /**\r\n * Date position of the data item.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"date\", date);\r\n this.value = date.getTime();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxisDataItem.prototype, \"endDate\", {\r\n /**\r\n * @return End date\r\n */\r\n get: function () {\r\n return this.dates[\"endDate\"];\r\n },\r\n /**\r\n * End date for data item.\r\n *\r\n * @param date End date\r\n */\r\n set: function (date) {\r\n this.setDate(\"endDate\", date);\r\n this.endValue = date.getTime();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return DateAxisDataItem;\r\n}(ValueAxisDataItem));\r\nexport { DateAxisDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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 * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/date-axis/} got `DateAxis` documention\r\n * @important\r\n */\r\nvar DateAxis = /** @class */ (function (_super) {\r\n __extends(DateAxis, _super);\r\n /**\r\n * Constructor\r\n */\r\n function DateAxis() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this._gapBreaks = false;\r\n /**\r\n * A list of date/time intervals for Date axis.\r\n *\r\n * This define various granularities available for the axis. For example\r\n * if you have an axis spanning an hour, and space for 6 grid lines / labels\r\n * the axis will choose the granularity of 10 minutes, displaying a label\r\n * every 10 minutes.\r\n *\r\n * Default intervals:\r\n *\r\n * ```JSON\r\n * [\r\n * { timeUnit: \"millisecond\", count: 1 },\r\n * { timeUnit: \"millisecond\", count: 5 },\r\n * { timeUnit: \"millisecond\", count: 10 },\r\n * { timeUnit: \"millisecond\", count: 50 },\r\n * { timeUnit: \"millisecond\", count: 100 },\r\n * { timeUnit: \"millisecond\", count: 500 },\r\n * { timeUnit: \"second\", count: 1 },\r\n * { timeUnit: \"second\", count: 5 },\r\n * { timeUnit: \"second\", count: 10 },\r\n * { timeUnit: \"second\", count: 30 },\r\n * { timeUnit: \"minute\", count: 1 },\r\n * { timeUnit: \"minute\", count: 5 },\r\n * { timeUnit: \"minute\", count: 10 },\r\n * { timeUnit: \"minute\", count: 30 },\r\n * { timeUnit: \"hour\", count: 1 },\r\n * { timeUnit: \"hour\", count: 3 },\r\n * { timeUnit: \"hour\", count: 6 },\r\n * { timeUnit: \"hour\", count: 12 },\r\n * { timeUnit: \"day\", count: 1 },\r\n * { timeUnit: \"day\", count: 2 },\r\n * { timeUnit: \"day\", count: 3 },\r\n * { timeUnit: \"day\", count: 4 },\r\n * { timeUnit: \"day\", count: 5 },\r\n * { timeUnit: \"week\", count: 1 },\r\n * { timeUnit: \"month\", count: 1 },\r\n * { timeUnit: \"month\", count: 2 },\r\n * { timeUnit: \"month\", count: 3 },\r\n * { timeUnit: \"month\", count: 6 },\r\n * { timeUnit: \"year\", count: 1 },\r\n * { timeUnit: \"year\", count: 2 },\r\n * { timeUnit: \"year\", count: 5 },\r\n * { timeUnit: \"year\", count: 10 },\r\n * { timeUnit: \"year\", count: 50 },\r\n * { timeUnit: \"year\", count: 100 }\r\n * ]\r\n * ```\r\n */\r\n _this.gridIntervals = new List();\r\n /**\r\n * If data aggregation is enabled by setting Axis' `groupData = true`, the\r\n * chart will try to aggregate data items into grouped data items.\r\n *\r\n * If there are more data items in selected period than `groupCount`, it will\r\n * group data items into bigger period.\r\n *\r\n * For example seconds might be grouped into 10-second aggregate data items.\r\n *\r\n * This setting indicates what group intervals can the chart group to.\r\n *\r\n * Default intervals:\r\n *\r\n * ```JSON\r\n * [\r\n * { timeUnit: \"millisecond\", count: 1},\r\n * { timeUnit: \"millisecond\", count: 10 },\r\n * { timeUnit: \"millisecond\", count: 100 },\r\n * { timeUnit: \"second\", count: 1 },\r\n * { timeUnit: \"second\", count: 10 },\r\n * { timeUnit: \"minute\", count: 1 },\r\n * { timeUnit: \"minute\", count: 10 },\r\n * { timeUnit: \"hour\", count: 1 },\r\n * { timeUnit: \"day\", count: 1 },\r\n * { timeUnit: \"week\", count: 1 },\r\n * { timeUnit: \"month\", count: 1 },\r\n * { timeUnit: \"year\", count: 1 }\r\n * ]\r\n * ```\r\n * `groupData = true` does not work in combination with `skipEmptyPeriods = true`.\r\n *\r\n * @since 4.7.0\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/date-axis/#Dynamic_data_item_grouping} for more information about dynamic data item grouping.\r\n */\r\n _this.groupIntervals = new List();\r\n /**\r\n * A collection of date formats to use when formatting different time units\r\n * on Date/time axis.\r\n *\r\n * Actual defaults will depend on the language locale set for the chart.\r\n *\r\n * To override format for a specific time unit, say days, you need to set\r\n * the appropriate key to a format string. E.g.:\r\n *\r\n * ```TypeScript\r\n * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n * ```\r\n * ```JavaScript\r\n * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"dateFormats\": {\r\n * \"day\": \"MMMM d, yyyy\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link DateFormatter}\r\n */\r\n _this.dateFormats = new Dictionary();\r\n /**\r\n * These formats are applied to labels that are first in a larger unit.\r\n *\r\n * For example, if we have a DateAxis with days on it, the first day of month\r\n * indicates a break in month - a start of the bigger period.\r\n *\r\n * For those labels, `periodChangeDateFormats` are applied instead of\r\n * `dateFormats`.\r\n *\r\n * This allows us implement convenient structures, like instead of:\r\n *\r\n * `Jan 1 - Jan 2 - Jan 3 - ...`\r\n *\r\n * We can have:\r\n *\r\n * `Jan - 1 - 2 - 3 - ...`\r\n *\r\n * This can be disabled by setting `markUnitChange = false`.\r\n */\r\n _this.periodChangeDateFormats = new Dictionary();\r\n /**\r\n * Actual interval (granularity) derived from the actual data.\r\n */\r\n _this._baseIntervalReal = { timeUnit: \"day\", count: 1 };\r\n /**\r\n */\r\n _this._prevSeriesTime = {};\r\n /**\r\n * [_minDifference description]\r\n *\r\n * @todo Description\r\n */\r\n _this._minDifference = {};\r\n /**\r\n * @ignore\r\n */\r\n _this._firstWeekDay = 1;\r\n /**\r\n * A collection of start timestamps to use as axis' min timestamp for\r\n * particular data item item periods.\r\n *\r\n * @since 4.7.0\r\n * @readonly\r\n */\r\n _this.groupMin = {};\r\n /**\r\n * A collection of start timestamps to use as axis' max timestamp for\r\n * particular data item item periods.\r\n *\r\n * @since 4.7.0\r\n * @readonly\r\n */\r\n _this.groupMax = {};\r\n _this.className = \"DateAxis\";\r\n _this.setPropertyValue(\"markUnitChange\", true);\r\n _this.snapTooltip = true;\r\n _this.tooltipPosition = \"pointer\";\r\n _this.setPropertyValue(\"groupData\", false);\r\n _this.groupCount = 200;\r\n _this.events.on(\"parentset\", _this.getDFFormatter, _this, false);\r\n // Translatable defaults are applied in `applyInternalDefaults()`\r\n // ...\r\n // Define default intervals\r\n _this.gridIntervals.pushAll([\r\n { timeUnit: \"millisecond\", count: 1 },\r\n { timeUnit: \"millisecond\", count: 5 },\r\n { timeUnit: \"millisecond\", count: 10 },\r\n { timeUnit: \"millisecond\", count: 50 },\r\n { timeUnit: \"millisecond\", count: 100 },\r\n { timeUnit: \"millisecond\", count: 500 },\r\n { timeUnit: \"second\", count: 1 },\r\n { timeUnit: \"second\", count: 5 },\r\n { timeUnit: \"second\", count: 10 },\r\n { timeUnit: \"second\", count: 30 },\r\n { timeUnit: \"minute\", count: 1 },\r\n { timeUnit: \"minute\", count: 5 },\r\n { timeUnit: \"minute\", count: 10 },\r\n { timeUnit: \"minute\", count: 15 },\r\n { timeUnit: \"minute\", count: 30 },\r\n { timeUnit: \"hour\", count: 1 },\r\n { timeUnit: \"hour\", count: 3 },\r\n { timeUnit: \"hour\", count: 6 },\r\n { timeUnit: \"hour\", count: 12 },\r\n { timeUnit: \"day\", count: 1 },\r\n { timeUnit: \"day\", count: 2 },\r\n { timeUnit: \"day\", count: 3 },\r\n { timeUnit: \"day\", count: 4 },\r\n { timeUnit: \"day\", count: 5 },\r\n { timeUnit: \"week\", count: 1 },\r\n { timeUnit: \"month\", count: 1 },\r\n { timeUnit: \"month\", count: 2 },\r\n { timeUnit: \"month\", count: 3 },\r\n { timeUnit: \"month\", count: 6 },\r\n { timeUnit: \"year\", count: 1 },\r\n { timeUnit: \"year\", count: 2 },\r\n { timeUnit: \"year\", count: 5 },\r\n { timeUnit: \"year\", count: 10 },\r\n { timeUnit: \"year\", count: 50 },\r\n { timeUnit: \"year\", count: 100 },\r\n { timeUnit: \"year\", count: 200 },\r\n { timeUnit: \"year\", count: 500 },\r\n { timeUnit: \"year\", count: 1000 },\r\n { timeUnit: \"year\", count: 2000 },\r\n { timeUnit: \"year\", count: 5000 },\r\n { timeUnit: \"year\", count: 10000 },\r\n { timeUnit: \"year\", count: 100000 }\r\n ]);\r\n _this.groupIntervals.pushAll([\r\n { timeUnit: \"millisecond\", count: 1 },\r\n { timeUnit: \"millisecond\", count: 10 },\r\n { timeUnit: \"millisecond\", count: 100 },\r\n { timeUnit: \"second\", count: 1 },\r\n { timeUnit: \"second\", count: 10 },\r\n { timeUnit: \"minute\", count: 1 },\r\n { timeUnit: \"minute\", count: 10 },\r\n { timeUnit: \"hour\", count: 1 },\r\n { timeUnit: \"day\", count: 1 },\r\n { timeUnit: \"week\", count: 1 },\r\n { timeUnit: \"month\", count: 1 },\r\n { timeUnit: \"year\", count: 1 }\r\n ]);\r\n // Set field name\r\n _this.axisFieldName = \"date\";\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * A function which applies fills to axis cells.\r\n *\r\n * Default function fills every second fill. You can set this to a function\r\n * that follows some other logic.\r\n *\r\n * Function should accept a [[DateAxisDataItem]] and modify its `axisFill`\r\n * property accordingly.\r\n */\r\n DateAxis.prototype.fillRule = function (dataItem) {\r\n var value = dataItem.value;\r\n var axis = dataItem.component;\r\n var gridInterval = axis._gridInterval;\r\n var gridDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n if (Math.round((value - axis.min) / gridDuration) / 2 == Math.round(Math.round((value - axis.min) / gridDuration) / 2)) {\r\n dataItem.axisFill.__disabled = true;\r\n }\r\n else {\r\n dataItem.axisFill.__disabled = false;\r\n }\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n DateAxis.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Set default date formats\r\n if (!this.dateFormats.hasKey(\"millisecond\")) {\r\n this.dateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n }\r\n if (!this.dateFormats.hasKey(\"second\")) {\r\n this.dateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n }\r\n if (!this.dateFormats.hasKey(\"minute\")) {\r\n this.dateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n }\r\n if (!this.dateFormats.hasKey(\"hour\")) {\r\n this.dateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n }\r\n if (!this.dateFormats.hasKey(\"day\")) {\r\n this.dateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n }\r\n if (!this.dateFormats.hasKey(\"week\")) {\r\n this.dateFormats.setKey(\"week\", this.language.translate(\"_date_day\")); // not a mistake\r\n }\r\n if (!this.dateFormats.hasKey(\"month\")) {\r\n this.dateFormats.setKey(\"month\", this.language.translate(\"_date_month\"));\r\n }\r\n if (!this.dateFormats.hasKey(\"year\")) {\r\n this.dateFormats.setKey(\"year\", this.language.translate(\"_date_year\"));\r\n }\r\n if (!this.periodChangeDateFormats.hasKey(\"millisecond\")) {\r\n this.periodChangeDateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n }\r\n if (!this.periodChangeDateFormats.hasKey(\"second\")) {\r\n this.periodChangeDateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n }\r\n if (!this.periodChangeDateFormats.hasKey(\"minute\")) {\r\n this.periodChangeDateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n }\r\n if (!this.periodChangeDateFormats.hasKey(\"hour\")) {\r\n this.periodChangeDateFormats.setKey(\"hour\", this.language.translate(\"_date_day\"));\r\n }\r\n if (!this.periodChangeDateFormats.hasKey(\"day\")) {\r\n this.periodChangeDateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n }\r\n if (!this.periodChangeDateFormats.hasKey(\"week\")) {\r\n this.periodChangeDateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\r\n }\r\n if (!this.periodChangeDateFormats.hasKey(\"month\")) {\r\n this.periodChangeDateFormats.setKey(\"month\", this.language.translate(\"_date_month\") + \" \" + this.language.translate(\"_date_year\"));\r\n }\r\n };\r\n /**\r\n * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n DateAxis.prototype.createDataItem = function () {\r\n return new DateAxisDataItem();\r\n };\r\n /**\r\n * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n *\r\n * @return Axis break\r\n */\r\n DateAxis.prototype.createAxisBreak = function () {\r\n return new DateAxisBreak();\r\n };\r\n /**\r\n * Validates Axis' data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n DateAxis.prototype.validateDataItems = function () {\r\n // allows to keep selection of the same size\r\n var start = this.start;\r\n var end = this.end;\r\n var baseDuration = this.baseDuration;\r\n var periodCount = (this.max - this.min) / baseDuration;\r\n this._firstWeekDay = this.getFirstWeekDay();\r\n this.getDFFormatter();\r\n _super.prototype.validateDataItems.call(this);\r\n var mainBaseDuration = $time.getDuration(this.mainBaseInterval.timeUnit, this.mainBaseInterval.count);\r\n this.maxZoomFactor = Math.max(1, (this.max - this.min) / mainBaseDuration);\r\n this._deltaMinMax = this.baseDuration / 2;\r\n // allows to keep selection of the same size\r\n var newPeriodCount = (this.max - this.min) / baseDuration;\r\n start = start + (end - start) * (1 - periodCount / newPeriodCount);\r\n this.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 };\r\n /**\r\n * Handles process after zoom.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Does nothing?\r\n */\r\n DateAxis.prototype.handleSelectionExtremesChange = function () {\r\n };\r\n /**\r\n * Calculates all positions, related to axis as per current zoom.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n DateAxis.prototype.calculateZoom = function () {\r\n var _this = this;\r\n _super.prototype.calculateZoom.call(this);\r\n var difference = this.adjustDifference(this._minZoomed, this._maxZoomed);\r\n var dataSetChanged = false;\r\n // if data has to be grouped, choose interval and set dataset\r\n if (this.groupData && $type.hasValue(difference)) {\r\n var mainBaseInterval = this.mainBaseInterval;\r\n var modifiedDifference = difference + (this.startLocation + (1 - this.endLocation)) * this.baseDuration;\r\n var groupInterval = void 0;\r\n if (this.groupInterval) {\r\n groupInterval = __assign({}, this.groupInterval);\r\n }\r\n else {\r\n groupInterval = this.chooseInterval(0, modifiedDifference, this.groupCount, this.groupIntervals);\r\n if ($time.getDuration(groupInterval.timeUnit, groupInterval.count) < $time.getDuration(mainBaseInterval.timeUnit, mainBaseInterval.count)) {\r\n groupInterval = __assign({}, mainBaseInterval);\r\n }\r\n }\r\n this._groupInterval = groupInterval;\r\n var newId = groupInterval.timeUnit + groupInterval.count;\r\n if (this._currentDataSetId != newId) {\r\n this._currentDataSetId = newId;\r\n this.dispatch(\"groupperiodchanged\");\r\n }\r\n this.series.each(function (series) {\r\n if (series.baseAxis == _this) {\r\n if (series.setDataSet(_this._currentDataSetId)) {\r\n dataSetChanged = true;\r\n }\r\n }\r\n });\r\n }\r\n var gridInterval = this.chooseInterval(0, difference, this._gridCount);\r\n if ($time.getDuration(gridInterval.timeUnit, gridInterval.count) < this.baseDuration) {\r\n gridInterval = __assign({}, this.baseInterval);\r\n }\r\n this._gridInterval = gridInterval;\r\n this._nextGridUnit = $time.getNextUnit(gridInterval.timeUnit);\r\n // the following is needed to avoid grid flickering while scrolling\r\n this._intervalDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n this._gridDate = $time.round(new Date(this.minZoomed - $time.getDuration(gridInterval.timeUnit, gridInterval.count)), gridInterval.timeUnit, gridInterval.count, this._firstWeekDay, this._df.utc, new Date(this.min), this._df.timezoneMinutes, this._df.timezone);\r\n // tell series start/end\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (series.baseAxis == _this) {\r\n var field_1 = series.getAxisField(_this);\r\n var minZoomed = $time.round(new Date(_this._minZoomed + _this.baseDuration * 0.05), _this.baseInterval.timeUnit, _this.baseInterval.count, _this._firstWeekDay, _this._df.utc, undefined, _this._df.timezoneMinutes, _this._df.timezone).getTime();\r\n var minZoomedStr = minZoomed.toString();\r\n var startDataItem = series.dataItemsByAxis.getKey(_this.uid).getKey(minZoomedStr + series.currentDataSetId);\r\n var startIndex = 0;\r\n if (_this.start != 0) {\r\n if (startDataItem) {\r\n startDataItem = _this.findFirst(startDataItem, minZoomed, field_1);\r\n startIndex = startDataItem.index;\r\n }\r\n else {\r\n startIndex = series.dataItems.findClosestIndex(_this._minZoomed, function (x) { return x[field_1]; }, \"left\");\r\n }\r\n }\r\n // 1 millisecond is removed so that if only first item is selected, it would not count in the second.\r\n var baseInterval = _this.baseInterval;\r\n var maxZoomed = $time.add($time.round(new Date(_this._maxZoomed), baseInterval.timeUnit, baseInterval.count, _this._firstWeekDay, _this._df.utc, undefined, _this._df.timezoneMinutes, _this._df.timezone), baseInterval.timeUnit, baseInterval.count, _this._df.utc).getTime();\r\n var maxZoomedStr = maxZoomed.toString();\r\n var endDataItem = series.dataItemsByAxis.getKey(_this.uid).getKey(maxZoomedStr + series.currentDataSetId);\r\n var endIndex = series.dataItems.length;\r\n if (_this.end != 1) {\r\n if (endDataItem) {\r\n endIndex = endDataItem.index;\r\n }\r\n else {\r\n maxZoomed -= 1;\r\n endIndex = series.dataItems.findClosestIndex(maxZoomed, function (x) { return x[field_1]; }, \"right\");\r\n // not good - if end is in the gap, indexes go like 5,4,3,4,2,1\r\n //if (endIndex < series.dataItems.length) {\r\n endIndex++;\r\n //}\r\n }\r\n }\r\n if (series.max(_this) < minZoomed) {\r\n series.startIndex = series.dataItems.length;\r\n series.endIndex = series.dataItems.length;\r\n series.outOfRange = true;\r\n }\r\n else if (series.min(_this) > maxZoomed) {\r\n series.startIndex = 0;\r\n series.endIndex = 0;\r\n series.outOfRange = true;\r\n }\r\n else {\r\n series.outOfRange = false;\r\n series.startIndex = startIndex;\r\n series.endIndex = endIndex;\r\n }\r\n //\tconsole.log(series.name, startIndex, endIndex);\r\n if (!dataSetChanged && series.dataRangeInvalid) {\r\n series.validateDataRange();\r\n }\r\n }\r\n });\r\n };\r\n DateAxis.prototype.findFirst = function (dataItem, time, key) {\r\n var index = dataItem.index;\r\n if (index > 0) {\r\n var series = dataItem.component;\r\n var previousDataItem = series.dataItems.getIndex(index - 1);\r\n var previousDate = previousDataItem[key];\r\n if (!previousDate || previousDate.getTime() < time) {\r\n return dataItem;\r\n }\r\n else {\r\n return this.findFirst(previousDataItem, time, key);\r\n }\r\n }\r\n else {\r\n return dataItem;\r\n }\r\n };\r\n /**\r\n * (Re)validates data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n DateAxis.prototype.validateData = function () {\r\n _super.prototype.validateData.call(this);\r\n if (!$type.isNumber(this.baseInterval.count)) {\r\n this.baseInterval.count = 1;\r\n }\r\n };\r\n Object.defineProperty(DateAxis.prototype, \"minDifference\", {\r\n /**\r\n * @ignore\r\n */\r\n get: function () {\r\n var _this = this;\r\n var minDifference = Number.MAX_VALUE;\r\n this.series.each(function (series) {\r\n if (minDifference > _this._minDifference[series.uid]) {\r\n minDifference = _this._minDifference[series.uid];\r\n }\r\n });\r\n if (minDifference == Number.MAX_VALUE || minDifference == 0) {\r\n minDifference = $time.getDuration(\"day\");\r\n }\r\n return minDifference;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * [dataChangeUpdate description]\r\n *\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n DateAxis.prototype.seriesDataChangeUpdate = function (series) {\r\n this._minDifference[series.uid] = Number.MAX_VALUE;\r\n };\r\n /**\r\n * [postProcessSeriesDataItems description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n DateAxis.prototype.postProcessSeriesDataItems = function (series) {\r\n var _this = this;\r\n this._firstWeekDay = this.getFirstWeekDay();\r\n if (series) {\r\n this.seriesGroupUpdate(series);\r\n }\r\n else {\r\n this.series.each(function (series) {\r\n _this.seriesGroupUpdate(series);\r\n });\r\n }\r\n this.addEmptyUnitsBreaks();\r\n };\r\n DateAxis.prototype.seriesGroupUpdate = function (series) {\r\n var _this = this;\r\n if (JSON.stringify(series._baseInterval[this.uid]) != JSON.stringify(this.mainBaseInterval)) {\r\n series._baseInterval[this.uid] = this.mainBaseInterval;\r\n series.mainDataSet.each(function (dataItem) {\r\n _this.postProcessSeriesDataItem(dataItem);\r\n });\r\n if (this.groupData) {\r\n this.groupSeriesData(series);\r\n }\r\n }\r\n };\r\n /**\r\n * Calculates series group data.\r\n *\r\n * @param series Series\r\n * @ignore\r\n */\r\n DateAxis.prototype.groupSeriesData = function (series) {\r\n var _this = this;\r\n if (series.baseAxis == this && series.dataItems.length > 0 && !series.dataGrouped) {\r\n series.bulletsContainer.removeChildren();\r\n // make array of intervals which will be used;\r\n var intervals_1 = [];\r\n var mainBaseInterval = this.mainBaseInterval;\r\n var mainIntervalDuration_1 = $time.getDuration(mainBaseInterval.timeUnit, mainBaseInterval.count);\r\n this.groupIntervals.each(function (interval) {\r\n var intervalDuration = $time.getDuration(interval.timeUnit, interval.count);\r\n if ((intervalDuration > mainIntervalDuration_1 && intervalDuration < (_this.max - _this.min)) || _this.groupInterval) {\r\n intervals_1.push(interval);\r\n }\r\n });\r\n if (series._dataSets) {\r\n series._dataSets.each(function (key, dataItems) {\r\n dataItems.each(function (dataItem) {\r\n dataItem.dispose();\r\n });\r\n dataItems.clear();\r\n });\r\n series._dataSets.clear();\r\n }\r\n series.dataGrouped = true;\r\n $array.each(intervals_1, function (interval) {\r\n //let mainBaseInterval = this._mainBaseInterval;\r\n var key = \"date\" + _this.axisLetter;\r\n // create data set\r\n var dataSetId = interval.timeUnit + interval.count;\r\n // todo: check where this clone goes\r\n var dataSet = new OrderedListTemplate(series.mainDataSet.template.clone());\r\n series.dataSets.setKey(dataSetId, dataSet);\r\n var dataItems = series.mainDataSet;\r\n var previousTime = Number.NEGATIVE_INFINITY;\r\n var i = 0;\r\n var newDataItem;\r\n var dataFields = [];\r\n $object.each(series.dataFields, function (dfkey, df) {\r\n var dfk = dfkey;\r\n if (dfk != key && dfk.indexOf(\"Show\") == -1) {\r\n dataFields.push(dfk);\r\n }\r\n });\r\n var roundedDate;\r\n dataItems.each(function (dataItem) {\r\n var date = dataItem.getDate(key);\r\n if (date) {\r\n var time = date.getTime();\r\n roundedDate = $time.round(new Date(time), interval.timeUnit, interval.count, _this._df.firstDayOfWeek, _this._df.utc, undefined, _this._df.timezoneMinutes, _this._df.timezone);\r\n var currentTime = roundedDate.getTime();\r\n // changed period\t\t\t\t\t\t\t\t\r\n if (previousTime < currentTime) {\r\n if (newDataItem && series._adapterO) {\r\n $array.each(dataFields, function (vkey) {\r\n newDataItem.values[vkey].value = series._adapterO.apply(\"groupDataItem\", {\r\n dataItem: newDataItem,\r\n interval: interval,\r\n dataField: vkey,\r\n date: roundedDate,\r\n value: newDataItem.values[vkey].value\r\n }).value;\r\n newDataItem.values[vkey].workingValue = newDataItem.values[vkey].value;\r\n });\r\n }\r\n newDataItem = dataSet.create();\r\n newDataItem.dataContext = {};\r\n newDataItem.setWorkingLocation(\"dateX\", series.dataItems.template.locations.dateX, 0);\r\n newDataItem.setWorkingLocation(\"openDateX\", series.dataItems.template.locations.openDateX, 0);\r\n newDataItem.setWorkingLocation(\"dateY\", series.dataItems.template.locations.dateY, 0);\r\n newDataItem.setWorkingLocation(\"openDateY\", series.dataItems.template.locations.openDateY, 0);\r\n newDataItem.component = series;\r\n // other Dates?\r\n newDataItem.setDate(key, roundedDate);\r\n newDataItem._index = i;\r\n i++;\r\n $array.each(dataFields, function (vkey) {\r\n //let groupFieldName = vkey + \"Group\";\r\n var dvalues = dataItem.values[vkey];\r\n if (dvalues) {\r\n var value = dvalues.value;\r\n if (series._adapterO) {\r\n value = series._adapterO.apply(\"groupValue\", {\r\n dataItem: dataItem,\r\n interval: interval,\r\n dataField: vkey,\r\n date: roundedDate,\r\n value: value\r\n }).value;\r\n }\r\n var values = newDataItem.values[vkey];\r\n if ($type.isNumber(value)) {\r\n values.value = value;\r\n values.workingValue = value;\r\n values.open = value;\r\n values.close = value;\r\n values.low = value;\r\n values.high = value;\r\n values.sum = value;\r\n values.average = value;\r\n values.count = 1;\r\n }\r\n else {\r\n values.count = 0;\r\n }\r\n }\r\n });\r\n _this.postProcessSeriesDataItem(newDataItem, interval);\r\n $object.each(series.propertyFields, function (key, fieldValue) {\r\n var f = key;\r\n var value = dataItem.properties[key];\r\n if ($type.hasValue(value)) {\r\n newDataItem.hasProperties = true;\r\n newDataItem.setProperty(f, value);\r\n }\r\n });\r\n newDataItem.groupDataItems = [dataItem];\r\n previousTime = currentTime;\r\n }\r\n else {\r\n if (newDataItem) {\r\n $array.each(dataFields, function (vkey) {\r\n var groupFieldName = series.groupFields[vkey];\r\n var dvalues = dataItem.values[vkey];\r\n if (dvalues) {\r\n var value = dvalues.value;\r\n if (series._adapterO) {\r\n value = series._adapterO.apply(\"groupValue\", {\r\n dataItem: dataItem,\r\n interval: interval,\r\n dataField: vkey,\r\n date: roundedDate,\r\n value: value\r\n }).value;\r\n }\r\n if ($type.isNumber(value)) {\r\n var values = newDataItem.values[vkey];\r\n if (!$type.isNumber(values.open)) {\r\n values.open = value;\r\n }\r\n values.close = value;\r\n if (values.low > value || !$type.isNumber(values.low)) {\r\n values.low = value;\r\n }\r\n if (values.high < value || !$type.isNumber(values.high)) {\r\n values.high = value;\r\n }\r\n if ($type.isNumber(values.sum)) {\r\n values.sum += value;\r\n }\r\n else {\r\n values.sum = value;\r\n }\r\n values.count++;\r\n values.average = values.sum / values.count;\r\n if ($type.isNumber(values[groupFieldName])) {\r\n values.value = values[groupFieldName];\r\n values.workingValue = values.value;\r\n }\r\n }\r\n }\r\n });\r\n $utils.copyProperties(dataItem.properties, newDataItem.properties);\r\n $object.each(series.propertyFields, function (key, fieldValue) {\r\n var f = key;\r\n var value = dataItem.properties[key];\r\n if ($type.hasValue(value)) {\r\n newDataItem.hasProperties = true;\r\n newDataItem.setProperty(f, value);\r\n }\r\n });\r\n newDataItem.groupDataItems.push(dataItem);\r\n }\r\n }\r\n }\r\n if (newDataItem) {\r\n $utils.copyProperties(dataItem.dataContext, newDataItem.dataContext);\r\n }\r\n });\r\n if (newDataItem && series._adapterO) {\r\n $array.each(dataFields, function (vkey) {\r\n newDataItem.values[vkey].value = series._adapterO.apply(\"groupDataItem\", {\r\n dataItem: newDataItem,\r\n interval: interval,\r\n dataField: vkey,\r\n date: roundedDate,\r\n value: newDataItem.values[vkey].value\r\n }).value;\r\n newDataItem.values[vkey].workingValue = newDataItem.values[vkey].value;\r\n });\r\n }\r\n });\r\n this.calculateZoom();\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n DateAxis.prototype.getDFFormatter = function () {\r\n this._df = this.dateFormatter;\r\n };\r\n /**\r\n * [postProcessSeriesDataItem description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem Data item\r\n */\r\n DateAxis.prototype.postProcessSeriesDataItem = function (dataItem, interval) {\r\n var _this = this;\r\n // we need to do this for all series data items not only added recently, as baseInterval might change\r\n var intervalID = \"\";\r\n if (interval) {\r\n intervalID = interval.timeUnit + interval.count;\r\n }\r\n else {\r\n interval = this.mainBaseInterval;\r\n }\r\n var series = dataItem.component;\r\n var dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n $object.each(dataItem.dates, function (key) {\r\n var date = dataItem.getDate(key);\r\n var time = date.getTime();\r\n var startDate = $time.round(new Date(time), interval.timeUnit, interval.count, _this._firstWeekDay, _this._df.utc, undefined, _this._df.timezoneMinutes, _this._df.timezone);\r\n var startTime = startDate.getTime();\r\n var endDate = $time.add(new Date(startTime), interval.timeUnit, interval.count, _this._df.utc);\r\n dataItem.setCalculatedValue(key, startTime, \"open\");\r\n dataItem.setCalculatedValue(key, endDate.getTime(), \"close\");\r\n dataItemsByAxis.setKey(startTime + intervalID, dataItem);\r\n });\r\n };\r\n /**\r\n * Collapses empty stretches of date/time scale by creating [[AxisBreak]]\r\n * elements for them.\r\n *\r\n * Can be used to automatically remove strethes without data, like weekends.\r\n *\r\n * No, need to call this manually. It will automatically be done if\r\n * `skipEmptyPeriods = true`.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n DateAxis.prototype.addEmptyUnitsBreaks = function () {\r\n var _this = this;\r\n if (this.skipEmptyPeriods && $type.isNumber(this.min) && $type.isNumber(this.max)) {\r\n var timeUnit = this.baseInterval.timeUnit;\r\n var count = this.baseInterval.count;\r\n if (this._axisBreaks) {\r\n this._axisBreaks.clear(); // TODO: what about breaks added by user?\r\n }\r\n var date = $time.round(new Date(this.min), timeUnit, count, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n var axisBreak = void 0;\r\n var _loop_1 = function () {\r\n $time.add(date, timeUnit, count, this_1._df.utc);\r\n var startTime = date.getTime();\r\n var startTimeStr = startTime.toString();\r\n var hasData = $iter.contains(this_1.series.iterator(), function (series) {\r\n return !!series.dataItemsByAxis.getKey(_this.uid).getKey(startTimeStr + series.currentDataSetId);\r\n });\r\n // open break if not yet opened\r\n if (!hasData) {\r\n if (!axisBreak) {\r\n axisBreak = this_1.axisBreaks.create();\r\n axisBreak.startDate = new Date(startTime);\r\n this_1._gapBreaks = true;\r\n }\r\n }\r\n else {\r\n // close if already opened\r\n if (axisBreak) {\r\n // close at end time minus one millisecond\r\n axisBreak.endDate = new Date(startTime - 1);\r\n axisBreak = undefined;\r\n }\r\n }\r\n };\r\n var this_1 = this;\r\n while (date.getTime() < this.max - this.baseDuration) {\r\n _loop_1();\r\n }\r\n }\r\n };\r\n /**\r\n * Updates positioning of Axis breaks after something changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n DateAxis.prototype.fixAxisBreaks = function () {\r\n var _this = this;\r\n _super.prototype.fixAxisBreaks.call(this);\r\n var axisBreaks = this._axisBreaks;\r\n if (axisBreaks) {\r\n if (axisBreaks.length > 0) {\r\n // process breaks\r\n axisBreaks.each(function (axisBreak) {\r\n var breakGridCount = Math.ceil(_this._gridCount * (Math.min(_this.end, axisBreak.endPosition) - Math.max(_this.start, axisBreak.startPosition)) / (_this.end - _this.start));\r\n axisBreak.gridInterval = _this.chooseInterval(0, axisBreak.adjustedEndValue - axisBreak.adjustedStartValue, breakGridCount);\r\n var gridDate = $time.round(new Date(axisBreak.adjustedStartValue), axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count, _this._firstWeekDay, _this._df.utc, undefined, _this._df.timezoneMinutes, _this._df.timezone);\r\n if (gridDate.getTime() > axisBreak.startDate.getTime()) {\r\n $time.add(gridDate, axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count, _this._df.utc);\r\n }\r\n axisBreak.gridDate = gridDate;\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n DateAxis.prototype.getFirstWeekDay = function () {\r\n if (this._df) {\r\n return this._df.firstDayOfWeek;\r\n }\r\n return 1;\r\n };\r\n /**\r\n * [getGridDate description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param date [description]\r\n * @param intervalCount [description]\r\n * @return [description]\r\n */\r\n DateAxis.prototype.getGridDate = function (date, intervalCount) {\r\n var timeUnit = this._gridInterval.timeUnit;\r\n var realIntervalCount = this._gridInterval.count;\r\n // round date\r\n $time.round(date, timeUnit, 1, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n var prevTimestamp = date.getTime();\r\n var newDate = $time.copy(date);\r\n // modify date by adding intervalcount\r\n var timestamp = $time.add(newDate, timeUnit, intervalCount, this._df.utc).getTime();\r\n // if it's axis break, get first rounded date which is not in a break\r\n var axisBreak = this.isInBreak(timestamp);\r\n if (axisBreak && axisBreak.endDate) {\r\n newDate = new Date(axisBreak.endDate.getTime());\r\n $time.round(newDate, timeUnit, realIntervalCount, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n if (newDate.getTime() < axisBreak.endDate.getTime()) {\r\n $time.add(newDate, timeUnit, realIntervalCount, this._df.utc);\r\n }\r\n timestamp = newDate.getTime();\r\n }\r\n // get duration between grid lines with break duration removed\r\n var durationBreaksRemoved = this.adjustDifference(prevTimestamp, timestamp);\r\n // calculate how many time units fit to this duration\r\n var countBreaksRemoved = Math.round(durationBreaksRemoved / $time.getDuration(timeUnit));\r\n // if less units fit, add one and repeat\r\n if (countBreaksRemoved < realIntervalCount) {\r\n return this.getGridDate(date, intervalCount + realIntervalCount);\r\n }\r\n return newDate;\r\n };\r\n /**\r\n * [getBreaklessDate description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param axisBreak [description]\r\n * @param timeUnit [description]\r\n * @param count [description]\r\n * @return [description]\r\n */\r\n DateAxis.prototype.getBreaklessDate = function (axisBreak, timeUnit, count) {\r\n var date = new Date(axisBreak.endValue);\r\n $time.round(date, timeUnit, count, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n $time.add(date, timeUnit, count, this._df.utc);\r\n var timestamp = date.getTime();\r\n axisBreak = this.isInBreak(timestamp);\r\n if (axisBreak) {\r\n return this.getBreaklessDate(axisBreak, timeUnit, count);\r\n }\r\n return date;\r\n };\r\n /**\r\n * (Re)validates all Axis elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n */\r\n DateAxis.prototype.validateAxisElements = function () {\r\n var _this = this;\r\n if ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n this.calculateZoom();\r\n // first regular items\r\n var timestamp = this._gridDate.getTime();\r\n var timeUnit = this._gridInterval.timeUnit;\r\n var intervalCount = this._gridInterval.count;\r\n var prevGridDate = $time.copy(this._gridDate);\r\n var dataItemsIterator_1 = this._dataItemsIterator;\r\n this.resetIterators();\r\n var _loop_2 = function () {\r\n var date = this_2.getGridDate($time.copy(prevGridDate), intervalCount);\r\n timestamp = date.getTime();\r\n var 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 endDate = $time.add(endDate, timeUnit, intervalCount, this_2._df.utc);\r\n var format = this_2.dateFormats.getKey(timeUnit);\r\n if (this_2.markUnitChange && prevGridDate) {\r\n if ($time.checkChange(date, prevGridDate, this_2._nextGridUnit, this_2._df.utc)) {\r\n if (timeUnit !== \"year\") {\r\n format = this_2.periodChangeDateFormats.getKey(timeUnit);\r\n }\r\n }\r\n }\r\n var text = this_2._df.format(date, format);\r\n var dataItem = dataItemsIterator_1.find(function (x) { return x.text === text; });\r\n if (dataItem.__disabled) {\r\n dataItem.__disabled = false;\r\n }\r\n this_2.appendDataItem(dataItem);\r\n dataItem.axisBreak = undefined;\r\n dataItem.date = date;\r\n dataItem.endDate = endDate;\r\n dataItem.text = text;\r\n this_2.validateDataElement(dataItem);\r\n prevGridDate = date;\r\n };\r\n var this_2 = this;\r\n while (timestamp <= this._maxZoomed) {\r\n _loop_2();\r\n }\r\n // breaks later\r\n var renderer_1 = this.renderer;\r\n if (this._axisBreaks) {\r\n $iter.each(this._axisBreaks.iterator(), function (axisBreak) {\r\n if (axisBreak.breakSize > 0) {\r\n var timeUnit_1 = axisBreak.gridInterval.timeUnit;\r\n var intervalCount_1 = axisBreak.gridInterval.count;\r\n // only add grid if gap is bigger then minGridDistance\r\n if ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer_1.minGridDistance * 4) {\r\n var timestamp_1 = axisBreak.gridDate.getTime();\r\n var prevGridDate_1;\r\n var count = 0;\r\n var _loop_3 = function () {\r\n var date = $time.copy(axisBreak.gridDate);\r\n timestamp_1 = $time.add(date, timeUnit_1, intervalCount_1 * count, _this._df.utc).getTime();\r\n count++;\r\n if (timestamp_1 > axisBreak.adjustedStartValue && timestamp_1 < axisBreak.adjustedEndValue) {\r\n var 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 endDate = $time.add(endDate, timeUnit_1, intervalCount_1, _this._df.utc);\r\n var format = _this.dateFormats.getKey(timeUnit_1);\r\n if (_this.markUnitChange && prevGridDate_1) {\r\n if ($time.checkChange(date, prevGridDate_1, _this._nextGridUnit, _this._df.utc)) {\r\n if (timeUnit_1 !== \"year\") {\r\n format = _this.periodChangeDateFormats.getKey(timeUnit_1);\r\n }\r\n }\r\n }\r\n var text_1 = _this._df.format(date, format);\r\n var dataItem = dataItemsIterator_1.find(function (x) { return x.text === text_1; });\r\n if (dataItem.__disabled) {\r\n dataItem.__disabled = false;\r\n }\r\n //this.processDataItem(dataItem);\r\n _this.appendDataItem(dataItem);\r\n dataItem.axisBreak = axisBreak;\r\n axisBreak.dataItems.moveValue(dataItem);\r\n dataItem.date = date;\r\n dataItem.endDate = endDate;\r\n dataItem.text = text_1;\r\n prevGridDate_1 = date;\r\n _this.validateDataElement(dataItem);\r\n }\r\n };\r\n while (timestamp_1 <= axisBreak.adjustedMax) {\r\n _loop_3();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * Validates Axis data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n DateAxis.prototype.validateDataElement = function (dataItem) {\r\n dataItem.itemIndex = this._axisItemCount;\r\n this._axisItemCount++;\r\n if ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n var renderer = this.renderer;\r\n var timestamp = dataItem.value;\r\n var endTimestamp = dataItem.endValue;\r\n if (!$type.isNumber(endTimestamp)) {\r\n endTimestamp = timestamp;\r\n }\r\n var position = this.valueToPosition(timestamp);\r\n var endPosition = this.valueToPosition(endTimestamp);\r\n var fillEndPosition = endPosition;\r\n if (!dataItem.isRange && this._gridInterval.count > this.baseInterval.count) {\r\n endPosition = position + (endPosition - position) / (this._gridInterval.count / this.baseInterval.count);\r\n }\r\n dataItem.position = position;\r\n var tick = dataItem.tick;\r\n if (tick && !tick.disabled) {\r\n renderer.updateTickElement(tick, position, endPosition);\r\n }\r\n var grid = dataItem.grid;\r\n if (grid && !grid.disabled) {\r\n renderer.updateGridElement(grid, position, endPosition);\r\n }\r\n var fill = dataItem.axisFill;\r\n if (fill && !fill.disabled) {\r\n renderer.updateFillElement(fill, position, fillEndPosition);\r\n if (!dataItem.isRange) {\r\n this.fillRule(dataItem);\r\n }\r\n }\r\n var mask = dataItem.mask;\r\n if (mask) {\r\n renderer.updateFillElement(mask, position, endPosition);\r\n }\r\n if (dataItem.bullet) {\r\n renderer.updateBullet(dataItem.bullet, position, endPosition);\r\n }\r\n var label = dataItem.label;\r\n if (label && !label.disabled) {\r\n var location_1 = label.location;\r\n if (location_1 == 0) {\r\n if (this._gridInterval.count == 1 && this._gridInterval.timeUnit != \"week\" && !dataItem.isRange) {\r\n location_1 = 0.5;\r\n }\r\n else {\r\n location_1 = 0;\r\n }\r\n }\r\n renderer.updateLabelElement(label, position, endPosition, location_1);\r\n }\r\n }\r\n };\r\n Object.defineProperty(DateAxis.prototype, \"baseDuration\", {\r\n /**\r\n * A duration in milliseconds of the `baseInterval`.\r\n *\r\n * @return Duration (ms)\r\n */\r\n get: function () {\r\n return $time.getDuration(this.baseInterval.timeUnit, this.baseInterval.count);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Adjusts min/max values.\r\n *\r\n * @ignore Exclude from docs.\r\n * @todo Description (review)\r\n * @param min Min timestamp\r\n * @param max Max timestamp\r\n * @return Adjusted min/max step\r\n */\r\n DateAxis.prototype.adjustMinMax = function (min, max) {\r\n return { min: min, max: max, step: this.baseDuration };\r\n };\r\n /**\r\n * Adjusts the minimum timestamp as per cell start location.\r\n *\r\n * @param value Value\r\n * @return Adjusted value\r\n */\r\n DateAxis.prototype.fixMin = function (value) {\r\n // like this because months are not equal\r\n var interval = this.baseInterval;\r\n var startTime = $time.round(new Date(value), interval.timeUnit, interval.count, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone).getTime();\r\n var endTime = $time.add(new Date(startTime), interval.timeUnit, interval.count, this._df.utc).getTime();\r\n return startTime + (endTime - startTime) * this.startLocation;\r\n };\r\n /**\r\n * Adjusts the maximum timestamp as per cell start location.\r\n *\r\n * @param value Value\r\n * @return Adjusted value\r\n */\r\n DateAxis.prototype.fixMax = function (value) {\r\n // like this because months are not equal\r\n var interval = this.baseInterval;\r\n var startTime = $time.round(new Date(value), interval.timeUnit, interval.count, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone).getTime();\r\n var endTime = $time.add(new Date(startTime), interval.timeUnit, interval.count, this._df.utc).getTime();\r\n return startTime + (endTime - startTime) * this.endLocation;\r\n };\r\n /**\r\n * [chooseInterval description]\r\n *\r\n * @ignore Exclude from docs.\r\n * @todo Description\r\n * @param index [description]\r\n * @param duration [description]\r\n * @param gridCount [description]\r\n * @return [description]\r\n */\r\n DateAxis.prototype.chooseInterval = function (index, duration, gridCount, intervals) {\r\n if (!intervals) {\r\n intervals = this.gridIntervals;\r\n }\r\n var gridInterval = intervals.getIndex(index);\r\n var intervalDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n var lastIndex = intervals.length - 1;\r\n if (index >= lastIndex) {\r\n return __assign({}, intervals.getIndex(lastIndex));\r\n }\r\n var count = Math.ceil(duration / intervalDuration);\r\n if (duration < intervalDuration && index > 0) {\r\n return __assign({}, intervals.getIndex(index - 1));\r\n }\r\n if (count <= gridCount) {\r\n return __assign({}, intervals.getIndex(index));\r\n }\r\n else {\r\n if (index + 1 < intervals.length) {\r\n return this.chooseInterval(index + 1, duration, gridCount, intervals);\r\n }\r\n else {\r\n return __assign({}, intervals.getIndex(index));\r\n }\r\n }\r\n };\r\n /**\r\n * Formats the value according to axis' own [[DateFormatter]].\r\n *\r\n * @param value Source value\r\n * @return Formatted value\r\n */\r\n DateAxis.prototype.formatLabel = function (value) {\r\n return this._df.format(value);\r\n };\r\n /**\r\n * Converts a Date to an asbolute pixel position within Axis.\r\n *\r\n * @param date Date\r\n * @return Position (px)\r\n */\r\n DateAxis.prototype.dateToPosition = function (date) {\r\n return this.valueToPosition(date.getTime());\r\n };\r\n /**\r\n * Converts a numeric timestamp or a `Date` to a relative position on axis.\r\n *\r\n * @param date Date or a timestamp\r\n * @return Relative position\r\n */\r\n DateAxis.prototype.anyToPosition = function (date) {\r\n if (date instanceof Date) {\r\n return this.dateToPosition(date);\r\n }\r\n else {\r\n return this.valueToPosition(date);\r\n }\r\n };\r\n /**\r\n * Converts date to orientation point (x, y, angle) on axis\r\n *\r\n * @param date Date\r\n * @return IOrientationPoint\r\n */\r\n DateAxis.prototype.dateToPoint = function (date) {\r\n var position = this.dateToPosition(date);\r\n var point = this.renderer.positionToPoint(position);\r\n var angle = this.renderer.positionToAngle(position);\r\n return { x: point.x, y: point.y, angle: angle };\r\n };\r\n /**\r\n * Converts a numeric value to orientation (x, y, angle) point on axis\r\n *\r\n * @param value Value\r\n * @return Orientation point\r\n */\r\n DateAxis.prototype.anyToPoint = function (date) {\r\n if (date instanceof Date) {\r\n return this.dateToPoint(date);\r\n }\r\n else {\r\n return this.valueToPoint(date);\r\n }\r\n };\r\n /**\r\n * Converts pixel position within Axis to a corresponding Date.\r\n *\r\n * @param position Position (px)\r\n * @return Date\r\n */\r\n DateAxis.prototype.positionToDate = function (position) {\r\n return new Date(this.positionToValue(position));\r\n };\r\n /**\r\n * Returns the relative position on axis for series' data item's value.\r\n *\r\n * @since 4.5.14\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @return Relative position\r\n */\r\n DateAxis.prototype.getPositionX = function (dataItem, key, location, stackKey, range) {\r\n var value = this.getTimeByLocation(dataItem, key, location);\r\n //let stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n if (!$type.isNumber(value)) {\r\n value = this.baseValue;\r\n }\r\n var position = this.valueToPosition(value);\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return position;\r\n };\r\n /**\r\n * Returns relative position on axis for series' data item's value.\r\n *\r\n * @since 4.5.14\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @return Relative position\r\n */\r\n DateAxis.prototype.getPositionY = function (dataItem, key, location, stackKey, range) {\r\n var value = this.getTimeByLocation(dataItem, key, location);\r\n var stack = dataItem.getValue(\"valueX\", \"stack\");\r\n if (!$type.isNumber(value)) {\r\n value = this.baseValue;\r\n }\r\n var position = this.valueToPosition(value + stack);\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return position;\r\n };\r\n /**\r\n * Returns an angle for series data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Data field to get value from\r\n * @param location Location (0-1)\r\n * @param stackKey Stack ID\r\n * @param range Range to fit in\r\n * @return Angle\r\n */\r\n DateAxis.prototype.getAngle = function (dataItem, key, location, stackKey, range) {\r\n var value = this.getTimeByLocation(dataItem, key, location);\r\n var stack = dataItem.getValue(stackKey, \"stack\");\r\n if (!$type.isNumber(value)) {\r\n value = this.baseValue;\r\n }\r\n var position = this.valueToPosition(value + stack);\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return this.positionToAngle(position);\r\n };\r\n /**\r\n * [getTimeByLocation description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem [description]\r\n * @param key [description]\r\n * @param location [description]\r\n * @return [description]\r\n */\r\n DateAxis.prototype.getTimeByLocation = function (dataItem, key, location) {\r\n if (!$type.hasValue(key)) {\r\n return;\r\n }\r\n if (!$type.isNumber(location)) {\r\n location = dataItem.workingLocations[key];\r\n if (!$type.isNumber(location)) {\r\n location = 0;\r\n }\r\n }\r\n var startTime = dataItem.values[key][\"open\"];\r\n var endTime = dataItem.values[key][\"close\"];\r\n var workingValue = dataItem.values[key].workingValue;\r\n var value = dataItem.values[key].value;\r\n var difference = value - workingValue;\r\n startTime -= difference;\r\n endTime -= difference;\r\n if ($type.isNumber(startTime) && $type.isNumber(endTime)) {\r\n return startTime + (endTime - startTime) * location;\r\n }\r\n };\r\n /**\r\n * Processes a related series' data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem Data item\r\n */\r\n DateAxis.prototype.processSeriesDataItem = function (dataItem, axisLetter) {\r\n var series = dataItem.component;\r\n var time;\r\n var date = dataItem[\"date\" + axisLetter];\r\n if ($type.isNumber(this.timezoneOffset)) {\r\n date.setTime(date.getTime() + (date.getTimezoneOffset() - this.timezoneOffset) * 60000);\r\n dataItem.setValue(\"date\" + axisLetter, date.getTime(), 0);\r\n }\r\n else if ($type.hasValue(this.timezone)) {\r\n date = $time.setTimezone(date, this.timezone);\r\n dataItem.setValue(\"date\" + axisLetter, date.getTime(), 0);\r\n dataItem[\"date\" + axisLetter] = date;\r\n }\r\n if (date) {\r\n time = date.getTime();\r\n }\r\n else {\r\n return;\r\n }\r\n var openDate = dataItem[\"openDate\" + axisLetter];\r\n var prevSeriesTime = this._prevSeriesTime[series.uid];\r\n var openTime;\r\n if (openDate) {\r\n openTime = openDate.getTime();\r\n }\r\n if ($type.isNumber(openTime)) {\r\n var difference = Math.abs(time - openTime);\r\n if (this._minDifference[series.uid] > difference) {\r\n this._minDifference[series.uid] = difference;\r\n }\r\n }\r\n var differece = time - prevSeriesTime;\r\n if (differece > 0) {\r\n if (this._minDifference[series.uid] > differece) {\r\n this._minDifference[series.uid] = differece;\r\n }\r\n }\r\n this._prevSeriesTime[series.uid] = time;\r\n if (series._baseInterval[this.uid]) {\r\n this.postProcessSeriesDataItem(dataItem);\r\n }\r\n };\r\n /**\r\n * [updateAxisBySeries description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n DateAxis.prototype.updateAxisBySeries = function () {\r\n _super.prototype.updateAxisBySeries.call(this);\r\n var baseInterval = this.chooseInterval(0, this.minDifference, 1);\r\n // handle short months\r\n if (this.minDifference >= $time.getDuration(\"day\", 27) && baseInterval.timeUnit == \"week\") {\r\n baseInterval.timeUnit = \"month\";\r\n baseInterval.count = 1;\r\n }\r\n if (baseInterval.timeUnit == \"month\") {\r\n if (this.minDifference >= $time.getDuration(\"day\", 29 * 2) && baseInterval.count == 1) {\r\n baseInterval.count = 2;\r\n }\r\n if (this.minDifference >= $time.getDuration(\"day\", 29 * 3) && baseInterval.count == 2) {\r\n baseInterval.count = 3;\r\n }\r\n if (this.minDifference >= $time.getDuration(\"day\", 29 * 6) && baseInterval.count == 5) {\r\n baseInterval.count = 6;\r\n }\r\n }\r\n // handle daylight saving\r\n if (this.minDifference >= $time.getDuration(\"hour\", 23) && baseInterval.timeUnit == \"hour\") {\r\n baseInterval.timeUnit = \"day\";\r\n baseInterval.count = 1;\r\n }\r\n if (this.minDifference >= $time.getDuration(\"week\", 1) - $time.getDuration(\"hour\", 1) && baseInterval.timeUnit == \"day\") {\r\n baseInterval.timeUnit = \"week\";\r\n baseInterval.count = 1;\r\n }\r\n if (this.minDifference >= $time.getDuration(\"year\", 1) - $time.getDuration(\"day\", 1.01) && baseInterval.timeUnit == \"month\") {\r\n baseInterval.timeUnit = \"year\";\r\n baseInterval.count = 1;\r\n }\r\n this._baseIntervalReal = baseInterval;\r\n this._mainBaseInterval = baseInterval;\r\n // no need to invalidate\r\n };\r\n Object.defineProperty(DateAxis.prototype, \"baseInterval\", {\r\n /**\r\n * @return Base interval\r\n */\r\n get: function () {\r\n if (this._groupInterval) {\r\n return this._groupInterval;\r\n }\r\n else if (this._baseInterval) {\r\n return this._baseInterval;\r\n }\r\n else {\r\n return this._baseIntervalReal;\r\n }\r\n },\r\n /**\r\n * A base interval (granularity) of data.\r\n *\r\n * Used to indicate what are the base units of your data.\r\n *\r\n * For example, if you have a data set that has a data point every 5 minutes,\r\n * you may want to set this to `{ timeUnit: \"minute\", count: 5 }`.\r\n *\r\n * If not set, the Axis will try to determine the setting by its own, looking\r\n * at actual data.\r\n *\r\n * For best results, try to follow these values for `count`:\r\n *\r\n * When unit is \"month\", use 12 / count = round number\r\n * When unit is \"hour\", use 24 / count = round number\r\n * When unit is \"second\" and \"minute\", use 60 / count = round number\r\n *\r\n * @param timeInterval base interval\r\n */\r\n set: function (timeInterval) {\r\n if (JSON.stringify(this._baseInterval) != JSON.stringify(timeInterval)) {\r\n this._baseInterval = timeInterval;\r\n this._mainBaseInterval = timeInterval;\r\n if (!$type.isNumber(timeInterval.count)) {\r\n timeInterval.count = 1;\r\n }\r\n this.invalidate();\r\n this.postProcessSeriesDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"mainBaseInterval\", {\r\n /**\r\n * Indicates granularity of the data of source (unaggregated) data.\r\n *\r\n * @since 4.7.0\r\n * @return Granularity of the main data set\r\n */\r\n get: function () {\r\n if (this._baseInterval) {\r\n return this._baseInterval;\r\n }\r\n else if (this._mainBaseInterval) {\r\n return this._mainBaseInterval;\r\n }\r\n else {\r\n return this._baseIntervalReal;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"skipEmptyPeriods\", {\r\n /**\r\n * @return Remove empty stretches of time?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"skipEmptyPeriods\");\r\n },\r\n /**\r\n * If enabled, axis will automatically collapse empty (without data points)\r\n * periods of time, i.e. weekends.\r\n *\r\n * An \"empty\" period is considered a stretch of time in the length of current\r\n * `baseInterval` without a single data point in it.\r\n *\r\n * For each such empty period, axis will automatically create an\r\n * [[AxisBreak]]. By default they will be invisible. You can still configure\r\n * them by accessing `axis.breaks.template`.\r\n *\r\n * [More info about breaks](https://www.amcharts.com/docs/v4/concepts/axes/#Breaks).\r\n *\r\n * Important notes:\r\n * * If you set this property to `true`, you can not add your custom axis breaks to this axis anymore.\r\n * * Using this feature affects performance. Use only if you need it.\r\n * * Setting this to `true` will reset appearance of breaks. If you want to modify appearance, do it *after* you set `skipEmptyPeriods`.\r\n * * Some axis label overlapping might happen.\r\n * * This setting is not compatible with `groupData = true`.\r\n *\r\n * @default false\r\n * @param value Remove empty stretches of time?\r\n */\r\n set: function (value) {\r\n if (value) {\r\n var breakTemplate = this.axisBreaks.template;\r\n breakTemplate.startLine.disabled = true;\r\n breakTemplate.endLine.disabled = true;\r\n breakTemplate.fillShape.disabled = true;\r\n breakTemplate.breakSize = 0;\r\n }\r\n else {\r\n if (this._gapBreaks) {\r\n this.axisBreaks.clear();\r\n this._gapBreaks = false;\r\n }\r\n }\r\n if (this.setPropertyValue(\"skipEmptyPeriods\", value)) {\r\n this.invalidate();\r\n this.postProcessSeriesDataItems();\r\n this.invalidateSeries();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"tooltipDateFormat\", {\r\n /**\r\n * @return Date format\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tooltipDateFormat\");\r\n },\r\n /**\r\n * A special date format to apply axis tooltips.\r\n *\r\n * Will use same format as for labels, if not set.\r\n *\r\n * @param value Date format\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tooltipDateFormat\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"markUnitChange\", {\r\n /**\r\n * @return Use different format for period beginning?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"markUnitChange\");\r\n },\r\n /**\r\n * Use `periodChangeDateFormats` to apply different formats to the first\r\n * label in bigger time unit.\r\n *\r\n * @default true\r\n * @param value Use different format for period beginning?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"markUnitChange\", value)) {\r\n this.invalidateData();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns text to show in a tooltip, based on specific relative position\r\n * within axis.\r\n *\r\n * The label will be formatted as per [[DateFormatter]] set for the whole\r\n * chart, or explicitly for this Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position\r\n * @return Label (formatted date)\r\n */\r\n DateAxis.prototype.getTooltipText = function (position) {\r\n var text;\r\n var date = this.positionToDate(position);\r\n date = $time.round(date, this.baseInterval.timeUnit, this.baseInterval.count, this._firstWeekDay, this._df.utc, new Date(this.min), this._df.timezoneMinutes, this._df.timezone);\r\n this.tooltipDate = date;\r\n if ($type.hasValue(this.tooltipDateFormat)) {\r\n text = this._df.format(date, this.tooltipDateFormat, [\"day\", \"month\", \"week\", \"year\"].indexOf(this.baseInterval.timeUnit) == -1);\r\n }\r\n else {\r\n var dateFormat = this.dateFormats.getKey(this.baseInterval.timeUnit);\r\n if (dateFormat) {\r\n text = this._df.format(date, dateFormat);\r\n }\r\n else {\r\n text = this.getPositionLabel(position);\r\n }\r\n }\r\n if (!this._adapterO) {\r\n return text;\r\n }\r\n else {\r\n return this._adapterO.apply(\"getTooltipText\", text);\r\n }\r\n };\r\n /**\r\n * Takes an absolute position within axis and adjust it to a specific position within base interval. (cell)\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Source position\r\n * @param location Location in the cell\r\n * @return Adjusted position\r\n */\r\n DateAxis.prototype.roundPosition = function (position, location, axisLocation) {\r\n var baseInterval = this.baseInterval;\r\n var timeUnit = baseInterval.timeUnit;\r\n var count = baseInterval.count;\r\n var date = this.positionToDate(position);\r\n $time.round(date, timeUnit, count, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n if (location > 0) {\r\n $time.add(date, timeUnit, location * count, this._df.utc);\r\n }\r\n if (axisLocation > 0 && axisLocation < 1) {\r\n date.setTime(date.getTime() + this.baseDuration * axisLocation);\r\n }\r\n if (this.isInBreak(date.getTime())) {\r\n while (date.getTime() < this.max) {\r\n $time.add(date, timeUnit, count, this._df.utc);\r\n if (!this.isInBreak(date.getTime())) {\r\n break;\r\n }\r\n }\r\n }\r\n return this.dateToPosition(date);\r\n };\r\n /**\r\n * Returns an relative position of the start of the cell (period), that specific position value falls into.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param position Relative position\r\n * @return Cell start relative position\r\n */\r\n DateAxis.prototype.getCellStartPosition = function (position) {\r\n return this.roundPosition(position, 0);\r\n };\r\n /**\r\n * Returns an relative position of the end of the cell (period), that specific position value falls into.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param position Relative position\r\n * @return Cell end relative position\r\n */\r\n DateAxis.prototype.getCellEndPosition = function (position) {\r\n return this.roundPosition(position, 1);\r\n //return this.dateToPosition($time.add(this.positionToDate(this.roundPosition(position, 1)), this.baseInterval.timeUnit, this.baseInterval.count));\r\n };\r\n /**\r\n * Returns a Series data item that corresponds to the specific pixel position\r\n * of the Axis.\r\n *\r\n * If `findNearest` (third parameter) is set to `true`, the method will try\r\n * to locate nearest available data item if none is found directly under\r\n * `position`.\r\n *\r\n * @param series Series\r\n * @param position Position (px)\r\n * @param findNearest Should axis try to find nearest tooltip if there is no data item at exact position\r\n * @return Data item\r\n */\r\n DateAxis.prototype.getSeriesDataItem = function (series, position, findNearest) {\r\n var value = this.positionToValue(position);\r\n var location = 0.5;\r\n if (this.axisLetter == \"Y\") {\r\n location = series.dataItems.template.locations.dateY;\r\n }\r\n else {\r\n location = series.dataItems.template.locations.dateX;\r\n }\r\n var deltaValue = value - location * this.baseDuration;\r\n var date = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n var nextDate = $time.round(new Date(value + this.baseDuration), this.baseInterval.timeUnit, this.baseInterval.count, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n if (nextDate.getTime() > date.getTime()) {\r\n if (Math.abs(nextDate.getTime() - deltaValue) < Math.abs(deltaValue - date.getTime())) {\r\n date = nextDate;\r\n }\r\n }\r\n var dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n var dataItem = dataItemsByAxis.getKey(date.getTime() + series.currentDataSetId);\r\n // todo: alternatively we can find closiest here\r\n if (!dataItem && findNearest) {\r\n var key_1;\r\n if (this.axisLetter == \"Y\") {\r\n key_1 = \"dateY\";\r\n }\r\n else {\r\n key_1 = \"dateX\";\r\n }\r\n dataItem = series.dataItems.getIndex(series.dataItems.findClosestIndex(date.getTime(), function (x) {\r\n if (x[key_1]) {\r\n return x[key_1].getTime();\r\n }\r\n else {\r\n return -Infinity;\r\n }\r\n }, \"any\"));\r\n }\r\n return dataItem;\r\n };\r\n /**\r\n * Returns a formatted date based on position in axis scale.\r\n *\r\n * Please note that `position` represents position within axis which may be\r\n * zoomed and not correspond to Cursor's `position`.\r\n *\r\n * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n * @param position Relative position on axis (0-1)\r\n * @return Position label\r\n */\r\n DateAxis.prototype.getPositionLabel = function (position) {\r\n // @todo Better format recognition\r\n var date = this.positionToDate(position);\r\n return this._df.format(date, this.getCurrentLabelFormat());\r\n };\r\n /**\r\n * Returns label date format based on currently used time units\r\n *\r\n * @return Format\r\n */\r\n DateAxis.prototype.getCurrentLabelFormat = function () {\r\n return this.dateFormats.getKey(this._gridInterval ? this._gridInterval.timeUnit : \"day\");\r\n };\r\n /**\r\n * Initializes an Axis renderer.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n DateAxis.prototype.initRenderer = function () {\r\n _super.prototype.initRenderer.call(this);\r\n var renderer = this.renderer;\r\n if (renderer) {\r\n // Set defaults\r\n renderer.ticks.template.location = 0;\r\n renderer.grid.template.location = 0;\r\n renderer.labels.template.location = 0;\r\n renderer.baseGrid.disabled = true;\r\n }\r\n };\r\n Object.defineProperty(DateAxis.prototype, \"basePoint\", {\r\n /**\r\n * Coordinates of the actual axis start.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Base point\r\n */\r\n get: function () {\r\n return { x: 0, y: 0 };\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n DateAxis.prototype.animateMinMax = function (min, max) {\r\n var _this = this;\r\n var animation = this.animate([{ property: \"_minAdjusted\", from: this._minAdjusted, to: min }, { property: \"_maxAdjusted\", from: this._maxAdjusted, to: max }], this.rangeChangeDuration, this.rangeChangeEasing);\r\n animation.events.on(\"animationprogress\", function () {\r\n _this.dispatch(\"extremeschanged\");\r\n });\r\n return animation;\r\n };\r\n /**\r\n * Invalidates axis data items when series extremes change\r\n */\r\n DateAxis.prototype.handleExtremesChange = function () {\r\n _super.prototype.handleExtremesChange.call(this);\r\n if (this.groupData) {\r\n var id = this.baseInterval.timeUnit + this.baseInterval.count;\r\n this.groupMin[id] = this._finalMin;\r\n this.groupMax[id] = this._finalMax;\r\n }\r\n };\r\n /**\r\n * Zooms axis to specific Dates.\r\n *\r\n * @param startDate Start date\r\n * @param endValue End date\r\n * @param skipRangeEvent Do not invoke events\r\n * @param instantly Do not play zoom animations\r\n */\r\n DateAxis.prototype.zoomToDates = function (startDate, endDate, skipRangeEvent, instantly, adjust) {\r\n startDate = this._df.parse(startDate);\r\n endDate = this._df.parse(endDate);\r\n this.zoomToValues(startDate.getTime(), endDate.getTime(), skipRangeEvent, instantly, adjust);\r\n };\r\n /**\r\n * Zooms axis to specific values.\r\n *\r\n * @param startValue Start value\r\n * @param endValue End value\r\n * @param skipRangeEvent Do not invoke events\r\n * @param instantly Do not play zoom animations\r\n */\r\n DateAxis.prototype.zoomToValues = function (startValue, endValue, skipRangeEvent, instantly, adjust) {\r\n var _this = this;\r\n if (!this.groupData) {\r\n //let start: number = (startValue - this.min) / (this.max - this.min);\r\n //let end: number = (endValue - this.min) / (this.max - this.min);\r\n var start = this.valueToPosition(startValue);\r\n var end = this.valueToPosition(endValue);\r\n this.zoom({ start: start, end: end }, skipRangeEvent, instantly);\r\n }\r\n else {\r\n var difference = this.adjustDifference(startValue, endValue);\r\n var isEnd = false;\r\n if (endValue == this.max) {\r\n isEnd = true;\r\n }\r\n var isStart = false;\r\n if (startValue == this.min) {\r\n isStart = true;\r\n }\r\n if ($type.hasValue(difference)) {\r\n var mainBaseInterval = this.mainBaseInterval;\r\n var groupInterval_1 = this.chooseInterval(0, difference, this.groupCount, this.groupIntervals);\r\n if ((groupInterval_1.timeUnit == mainBaseInterval.timeUnit && groupInterval_1.count < mainBaseInterval.count) || $time.getDuration(groupInterval_1.timeUnit, 1) < $time.getDuration(mainBaseInterval.timeUnit, 1)) {\r\n groupInterval_1 = __assign({}, mainBaseInterval);\r\n }\r\n var id = groupInterval_1.timeUnit + groupInterval_1.count;\r\n var min_1 = this.groupMin[id];\r\n var max_1 = this.groupMax[id];\r\n if (!$type.isNumber(min_1) || !$type.isNumber(max_1)) {\r\n min_1 = Number.POSITIVE_INFINITY;\r\n max_1 = Number.NEGATIVE_INFINITY;\r\n this.series.each(function (series) {\r\n var seriesMin = series.min(_this);\r\n var seriesMax = series.max(_this);\r\n if (series._dataSets) {\r\n var ds = series._dataSets.getKey(groupInterval_1.timeUnit + groupInterval_1.count);\r\n if (ds) {\r\n var mindi = ds.getIndex(0);\r\n var maxdi = ds.getIndex(ds.length - 1);\r\n if (mindi) {\r\n if (series.xAxis == _this) {\r\n seriesMin = mindi.dateX.getTime();\r\n }\r\n else if (series.yAxis == _this) {\r\n seriesMin = mindi.dateY.getTime();\r\n }\r\n }\r\n if (maxdi) {\r\n if (series.xAxis == _this) {\r\n seriesMax = maxdi.dateX.getTime();\r\n }\r\n else if (series.yAxis == _this) {\r\n seriesMax = maxdi.dateY.getTime();\r\n }\r\n }\r\n }\r\n }\r\n seriesMax = $time.round($time.add(new Date(seriesMax), groupInterval_1.timeUnit, 1, _this._df.utc), groupInterval_1.timeUnit, 1, _this._df.firstDayOfWeek, _this._df.utc, undefined, _this._df.timezoneMinutes, _this._df.timezone).getTime();\r\n if (seriesMin < min_1) {\r\n min_1 = seriesMin;\r\n }\r\n if (seriesMax > max_1) {\r\n max_1 = seriesMax;\r\n }\r\n });\r\n this.groupMin[id] = min_1;\r\n this.groupMax[id] = max_1;\r\n }\r\n startValue = $math.fitToRange(startValue, min_1, max_1);\r\n endValue = $math.fitToRange(endValue, min_1, max_1);\r\n if (adjust) {\r\n if (isEnd) {\r\n startValue = endValue - difference;\r\n startValue = $math.fitToRange(startValue, min_1, max_1);\r\n }\r\n if (isStart) {\r\n endValue = startValue + difference;\r\n endValue = $math.fitToRange(endValue, min_1, max_1);\r\n }\r\n }\r\n var start = (startValue - min_1) / (max_1 - min_1);\r\n var end = (endValue - min_1) / (max_1 - min_1);\r\n this.zoom({ start: start, end: end }, skipRangeEvent, instantly);\r\n }\r\n }\r\n };\r\n /**\r\n * Adds `baseInterval` to \"as is\" fields.\r\n *\r\n * @param field Field name\r\n * @return Assign as is?\r\n */\r\n DateAxis.prototype.asIs = function (field) {\r\n return field == \"baseInterval\" || _super.prototype.asIs.call(this, field);\r\n };\r\n /**\r\n * Copies all properties and related data from a different instance of Axis.\r\n *\r\n * @param source Source Axis\r\n */\r\n DateAxis.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n _super.prototype.copyFrom.call(this, source);\r\n this.dateFormats = source.dateFormats;\r\n this.periodChangeDateFormats = source.periodChangeDateFormats;\r\n this.groupIntervals.clear();\r\n source.groupIntervals.each(function (interval) {\r\n _this.groupIntervals.push(__assign({}, interval));\r\n });\r\n this.gridIntervals.clear();\r\n source.gridIntervals.each(function (interval) {\r\n _this.gridIntervals.push(__assign({}, interval));\r\n });\r\n if (source._baseInterval) {\r\n this.baseInterval = source._baseInterval;\r\n }\r\n };\r\n /**\r\n * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n *\r\n * @param position Position (0-1)\r\n * @param local or global position\r\n */\r\n DateAxis.prototype.showTooltipAtPosition = function (position, local) {\r\n var _this = this;\r\n if (!local) {\r\n position = this.toAxisPosition(position);\r\n }\r\n if (this.snapTooltip) {\r\n // rounding is not good, pen/aac4e7f66f019d36b2447f050c600c13 (no last tootltip shown)\r\n var actualDate = this.positionToDate(position); //$time.round(this.positionToDate(position), this.baseInterval.timeUnit, 1, this.getFirstWeekDay(), this.dateFormatter.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n var actualTime_1 = actualDate.getTime();\r\n var closestDate_1;\r\n this.series.each(function (series) {\r\n if (series.baseAxis == _this) {\r\n var dataItem = _this.getSeriesDataItem(series, position, true);\r\n if (dataItem) {\r\n var date = void 0;\r\n if (series.xAxis == _this) {\r\n date = dataItem.dateX;\r\n }\r\n if (series.yAxis == _this) {\r\n date = dataItem.dateY;\r\n }\r\n if (!closestDate_1) {\r\n closestDate_1 = date;\r\n }\r\n else {\r\n if (Math.abs(closestDate_1.getTime() - actualTime_1) > Math.abs(date.getTime() - actualTime_1)) {\r\n closestDate_1 = date;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n if (closestDate_1) {\r\n var closestTime_1 = closestDate_1.getTime();\r\n closestDate_1 = $time.round(new Date(closestTime_1), this.baseInterval.timeUnit, this.baseInterval.count, this._firstWeekDay, this._df.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n closestTime_1 = closestDate_1.getTime();\r\n var tooltipLocation = this.renderer.tooltipLocation;\r\n if (tooltipLocation == 0) {\r\n tooltipLocation = 0.0001;\r\n }\r\n closestDate_1 = new Date(closestDate_1.getTime() + this.baseDuration * tooltipLocation);\r\n position = this.dateToPosition(closestDate_1);\r\n if (this.chart.cursor && this.chart.cursor.snapToSeries) {\r\n //void\r\n }\r\n else {\r\n this.series.each(function (series) {\r\n var dataItem = series.dataItemsByAxis.getKey(_this.uid).getKey(closestTime_1 + series.currentDataSetId);\r\n var point = series.showTooltipAtDataItem(dataItem);\r\n if (point) {\r\n _this.chart._seriesPoints.push({ series: series, point: point });\r\n }\r\n else {\r\n // check, otherwise column tooltip will be hidden\r\n if (series.tooltipText || series.tooltipHTML) {\r\n series.hideTooltip();\r\n }\r\n }\r\n });\r\n }\r\n //this.chart.sortSeriesTooltips(seriesPoints);\r\n }\r\n }\r\n _super.prototype.showTooltipAtPosition.call(this, position, true);\r\n };\r\n Object.defineProperty(DateAxis.prototype, \"snapTooltip\", {\r\n /**\r\n * @return Should snap?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"snapTooltip\");\r\n },\r\n /**\r\n * Should the nearest tooltip be shown if no data item is found on the\r\n * current cursor position.\r\n *\r\n * @default true\r\n * @param value Should snap?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"snapTooltip\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"groupData\", {\r\n /**\r\n * @return Group data points?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"groupData\");\r\n },\r\n /**\r\n * Indicates if data should be aggregated to composide data items if there\r\n * are more data items in selected range than `groupCount`.\r\n *\r\n * Grouping will occur automatically, based on current selection range, and\r\n * will change dynamically when user zooms in/out the chart.\r\n *\r\n * NOTE: This works only if [[DateAxis]] is base axis of an [[XYSeries]].\r\n *\r\n * The related [[XYSeries]] also needs to be set up to take advantage of, by\r\n * setting its [`groupFields`](https://www.amcharts.com/docs/v4/reference/xyseries/#groupFields_property).\r\n *\r\n * The group intervals to aggregate data to is defined by `groupIntervals`\r\n * property.\r\n *\r\n * ```TypeScript\r\n * let dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n * dateAxis.groupData = true;\r\n *\r\n * let valueAxis = chart.xAxes.push(new am4charts.valueAxis());\r\n *\r\n * let series = chart.series.push(new am4charts.LineSeries());\r\n * series.dataFields.dateX = \"date\";\r\n * series.dataFields.valueY = \"value\";\r\n * series.groupFields.valueY = \"average\";\r\n * ```\r\n * ```JavaScript\r\n * var dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n * dateAxis.groupData = true;\r\n *\r\n * var valueAxis = chart.xAxes.push(new am4charts.valueAxis());\r\n *\r\n * var series = chart.series.push(new am4charts.LineSeries());\r\n * series.dataFields.dateX = \"date\";\r\n * series.dataFields.valueY = \"value\";\r\n * series.groupFields.valueY = \"average\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"groupData\": true\r\n * }],\r\n * \"yAxes\": [{\r\n * \"type\": \"ValueAxis\"\r\n * }],\r\n * \"series\": [{\r\n * \"type\": \"LineSeries\",\r\n * \"dataFields\": {\r\n * \"dateX\": \"date\",\r\n * \"valueY\": \"value\"\r\n * },\r\n * \"groupFields\": {\r\n * \"valueY\": \"average\"\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @default false\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/date-axis/#Dynamic_data_item_grouping} for more information about dynamic data item grouping.\r\n * @since 4.7.0\r\n * @param value Group data points?\r\n */\r\n set: function (value) {\r\n var _this = this;\r\n if (this.setPropertyValue(\"groupData\", value)) {\r\n this.series.each(function (series) {\r\n series.setDataSet(\"\");\r\n if (value && !series.dataGrouped && series.inited) {\r\n series._baseInterval[_this.uid] = _this.mainBaseInterval;\r\n _this.groupSeriesData(series);\r\n }\r\n });\r\n this._currentDataSetId = \"\";\r\n this._groupInterval = undefined;\r\n this.invalidate();\r\n this.invalidateSeries();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"groupInterval\", {\r\n /**\r\n * @return Interval\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"groupInterval\");\r\n },\r\n /**\r\n * Disables automatic selection of data grouping intervals and always uses\r\n * `groupInterval` if set. Works only if `groupData = true`.\r\n *\r\n * @since 4.9.24\r\n * @param value Interval\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"groupInterval\", value)) {\r\n this.invalidate();\r\n this.invalidateSeries();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"groupCount\", {\r\n /**\r\n * @return Number of data items\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"groupCount\");\r\n },\r\n /**\r\n * Indicates threshold of data items in selected range at which to start\r\n * aggregating data items if `groupData = true`.\r\n *\r\n * @default 200\r\n * @since 4.7.0\r\n * @param value Number of data items\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"groupCount\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"timezoneOffset\", {\r\n /**\r\n * @todo Timezone offset in minutes\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"timezoneOffset\");\r\n },\r\n /**\r\n * If set will recalculate all timestamps in data by applying specific offset\r\n * in minutes.\r\n *\r\n * IMPORTANT: do not set `timezoneOffset` on both `DateAxis` and `dateFormatter`. It\r\n * will skew your results by applying offset twice.\r\n *\r\n * @since 4.8.5\r\n * @param value Time zone offset in minutes\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"timezoneOffset\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"timezone\", {\r\n /**\r\n * @return Timezone\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"timezone\");\r\n },\r\n /**\r\n * If set will recalculate all timestamps in data to specific named timezone,\r\n * e.g. `\"America/Vancouver\"`, `\"Australia/Sydney\"`, `\"UTC\"`, etc.\r\n *\r\n * IMPORTANT: it is no longer recommended to use this setting. Please\r\n * set`timezone` on `dateFormatter`.\r\n *\r\n * @deprecated\r\n * @since 4.10.1\r\n * @param value Time zone\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"timezone\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DateAxis.prototype, \"gridInterval\", {\r\n /**\r\n * Current grid interval.\r\n *\r\n * @return Grid interval\r\n */\r\n get: function () {\r\n return this._gridInterval;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n DateAxis.prototype.makeGap = function (dataItem, previous) {\r\n var series = dataItem.component;\r\n if (dataItem && previous) {\r\n if (!series.connect && $type.isNumber(series.autoGapCount)) {\r\n if (series.baseAxis == this) {\r\n var date = dataItem.dates[\"date\" + this.axisLetter];\r\n var prevDate = previous.dates[\"date\" + this.axisLetter];\r\n if (date && prevDate) {\r\n var time = date.getTime();\r\n var prevTime = prevDate.getTime();\r\n if (time - prevTime > series.autoGapCount * this.baseDuration) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n Object.defineProperty(DateAxis.prototype, \"baseValue\", {\r\n /**\r\n * @return base value\r\n */\r\n get: function () {\r\n return this.min;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return DateAxis;\r\n}(ValueAxis));\r\nexport { DateAxis };\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//# sourceMappingURL=DateAxis.js.map","/**\r\n * A module which defines functionality related to Category Axis Break.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar CategoryAxisBreak = /** @class */ (function (_super) {\r\n __extends(CategoryAxisBreak, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CategoryAxisBreak() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CategoryAxisBreak\";\r\n _this.properties.startLocation = 0.5;\r\n _this.properties.endLocation = 0.5;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(CategoryAxisBreak.prototype, \"startPosition\", {\r\n /**\r\n * Pixel position of the break's start.\r\n *\r\n * @return Position (px)\r\n * @readonly\r\n */\r\n get: function () {\r\n if (this.axis) {\r\n return this.axis.indexToPosition(this.adjustedStartValue, this.startLocation);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisBreak.prototype, \"endPosition\", {\r\n /**\r\n * Pixel position of the break's end.\r\n *\r\n * @return Position (px)\r\n * @readonly\r\n */\r\n get: function () {\r\n if (this.axis) {\r\n return this.axis.indexToPosition(this.adjustedEndValue, this.endLocation);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisBreak.prototype, \"startCategory\", {\r\n /**\r\n * @return Start category\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startCategory\");\r\n },\r\n /**\r\n * A category break starts on.\r\n *\r\n * @param value Start category\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startCategory\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisBreak.prototype, \"endCategory\", {\r\n /**\r\n * @return End category\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endCategory\");\r\n },\r\n /**\r\n * A category break ends on.\r\n *\r\n * @param value End category\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endCategory\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisBreak.prototype, \"startValue\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n var category = this.getPropertyValue(\"startCategory\");\r\n if (category) {\r\n return this.axis.categoryToIndex(category);\r\n }\r\n else {\r\n return this.getPropertyValue(\"startValue\");\r\n }\r\n },\r\n /**\r\n * An index of start category.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startValue\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisBreak.prototype, \"endValue\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n var category = this.getPropertyValue(\"endCategory\");\r\n if (category) {\r\n return this.axis.categoryToIndex(category);\r\n }\r\n else {\r\n return this.getPropertyValue(\"endValue\");\r\n }\r\n },\r\n /**\r\n * An index of end category or a end value.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endValue\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisBreak.prototype, \"startLocation\", {\r\n /**\r\n * @return Break start location\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startLocation\");\r\n },\r\n /**\r\n * Indicates where within starting category break should begin.\r\n *\r\n * Values range from `0` (start) to `1` (end), with default being `0.5` (middle).\r\n *\r\n * E.g. if you want to a break to fully encompass start and end categories,\r\n * you should set `startLocation = 0` and `endLocation = 1`.\r\n *\r\n * @since 4.9.17\r\n * @default 0.5\r\n * @param value Break start location\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startLocation\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisBreak.prototype, \"endLocation\", {\r\n /**\r\n * @return Break end location\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endLocation\");\r\n },\r\n /**\r\n * Indicates where within ending category break should end.\r\n *\r\n * Values range from `0` (start) to `1` (end), with default being `0.5` (middle).\r\n *\r\n * E.g. if you want to a break to fully encompass start and end categories,\r\n * you should set `startLocation = 0` and `endLocation = 1`.\r\n *\r\n * @since 4.9.17\r\n * @default 0.5\r\n * @param value Break end location\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endLocation\", value)) {\r\n if (this.axis) {\r\n this.axis.invalidateDataItems();\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return CategoryAxisBreak;\r\n}(AxisBreak));\r\nexport { CategoryAxisBreak };\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//# sourceMappingURL=CategoryAxisBreak.js.map","/**\r\n * Category axis module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Axis, AxisDataItem } from \"./Axis\";\r\nimport { AxisRendererX } from \"./AxisRendererX\";\r\nimport { AxisRendererY } from \"./AxisRendererY\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { CategoryAxisBreak } from \"./CategoryAxisBreak\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[CategoryAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar CategoryAxisDataItem = /** @class */ (function (_super) {\r\n __extends(CategoryAxisDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CategoryAxisDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.seriesDataItems = {};\r\n _this.className = \"CategoryAxisDataItem\";\r\n _this.text = \"{category}\";\r\n _this.locations.category = 0;\r\n _this.locations.endCategory = 1;\r\n _this.deltaPosition = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(CategoryAxisDataItem.prototype, \"category\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n if (this._adapterO) {\r\n if (this._adapterO.isEnabled(\"category\")) {\r\n return this._adapterO.apply(\"category\", this.properties.category);\r\n }\r\n }\r\n return this.properties.category;\r\n },\r\n /**\r\n * Category.\r\n *\r\n * @param value Category\r\n */\r\n set: function (value) {\r\n var oldCategory = this.properties.category;\r\n this.setProperty(\"category\", value);\r\n if ($type.hasValue(oldCategory) && oldCategory != value) {\r\n if (this.component) {\r\n this.component.validateDataElement(this);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisDataItem.prototype, \"endCategory\", {\r\n /**\r\n * @return End category\r\n */\r\n get: function () {\r\n return this.properties.endCategory;\r\n },\r\n /**\r\n * End category.\r\n *\r\n * Used for items that span several categories, like [[CategoryAxisBreak]].\r\n *\r\n * @param value End category\r\n */\r\n set: function (value) {\r\n this.setProperty(\"endCategory\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxisDataItem.prototype, \"deltaPosition\", {\r\n get: function () {\r\n return this.properties.deltaCoordinate;\r\n },\r\n set: function (value) {\r\n if (value != this.properties.deltaCoordinate) {\r\n this.setProperty(\"deltaCoordinate\", value);\r\n if (this.component) {\r\n this.component.invalidateDataItems();\r\n this.component.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return CategoryAxisDataItem;\r\n}(AxisDataItem));\r\nexport { CategoryAxisDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar CategoryAxis = /** @class */ (function (_super) {\r\n __extends(CategoryAxis, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CategoryAxis() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A collection that holds Axis' data items sorted by each category.\r\n */\r\n _this.dataItemsByCategory = new Dictionary();\r\n _this.className = \"CategoryAxis\";\r\n // Set field name\r\n _this.axisFieldName = \"category\";\r\n _this._lastDataItem = _this.createDataItem();\r\n _this._lastDataItem.component = _this;\r\n _this._disposers.push(_this._lastDataItem);\r\n // Apply theme\r\n _this.applyTheme();\r\n var dataItemsByCategory = _this.dataItemsByCategory;\r\n _this.addDisposer(_this.mainDataSet.events.on(\"removed\", function (event) {\r\n dataItemsByCategory.removeKey(event.oldValue.category);\r\n }));\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n CategoryAxis.prototype.createDataItem = function () {\r\n return new CategoryAxisDataItem();\r\n };\r\n /**\r\n * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n *\r\n * @return Axis break\r\n */\r\n CategoryAxis.prototype.createAxisBreak = function () {\r\n return new CategoryAxisBreak();\r\n };\r\n /**\r\n * Processes a related series' data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem Data item\r\n */\r\n CategoryAxis.prototype.processSeriesDataItem = function (dataItem, axisLetter) {\r\n _super.prototype.processSeriesDataItem.call(this, dataItem, axisLetter);\r\n var category = dataItem[\"category\" + this.axisLetter];\r\n if ($type.hasValue(category)) {\r\n var categoryAxisDataItem = this.dataItemsByCategory.getKey(category);\r\n if (categoryAxisDataItem) {\r\n var seriesId = dataItem.component.uid;\r\n var seriesDataItems = categoryAxisDataItem.seriesDataItems[seriesId];\r\n if (!seriesDataItems) {\r\n seriesDataItems = [];\r\n categoryAxisDataItem.seriesDataItems[seriesId] = seriesDataItems;\r\n }\r\n seriesDataItems.push(dataItem);\r\n }\r\n }\r\n else {\r\n dataItem.component.dataItems.remove(dataItem);\r\n }\r\n };\r\n /**\r\n * Validates the data range.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n */\r\n CategoryAxis.prototype.validateDataRange = function () {\r\n var _this = this;\r\n _super.prototype.validateDataRange.call(this);\r\n $iter.each(this._series.iterator(), function (series) {\r\n if ((series.xAxis instanceof CategoryAxis) && (series.yAxis instanceof CategoryAxis)) {\r\n series.invalidateDataRange();\r\n }\r\n else {\r\n var startIndex = _this.positionToIndex(_this.start);\r\n var endIndex = _this.positionToIndex(_this.end);\r\n if (endIndex >= _this.dataItems.length) {\r\n endIndex--;\r\n }\r\n var seriesId = series.uid;\r\n var minIndex = void 0;\r\n var maxIndex = void 0;\r\n for (var i = startIndex; i <= endIndex; i++) {\r\n var axisDataItem = _this.dataItems.getIndex(i);\r\n if (axisDataItem) {\r\n var seriesDataItems = axisDataItem.seriesDataItems[seriesId];\r\n if (seriesDataItems) {\r\n for (var i_1 = 0; i_1 < seriesDataItems.length; i_1++) {\r\n var seriesDataItem = seriesDataItems[i_1];\r\n if (seriesDataItem) {\r\n var index = seriesDataItem.index;\r\n if (!$type.isNumber(minIndex) || index < minIndex) {\r\n minIndex = index;\r\n }\r\n if (!$type.isNumber(maxIndex) || index > maxIndex) {\r\n maxIndex = index;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if ($type.isNumber(minIndex)) {\r\n series.startIndex = minIndex;\r\n }\r\n else {\r\n series.start = _this.start;\r\n }\r\n if ($type.isNumber(maxIndex)) {\r\n series.endIndex = maxIndex + 1;\r\n }\r\n else {\r\n series.end = _this.end;\r\n }\r\n // range might not change, but axis breaks might.\r\n if (_this._axisBreaks && _this._axisBreaks.length > 0) {\r\n series.invalidateDataRange();\r\n }\r\n }\r\n });\r\n };\r\n /**\r\n * Validates the whole axis. Causes it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n */\r\n CategoryAxis.prototype.validate = function () {\r\n var _this = this;\r\n _super.prototype.validate.call(this);\r\n var dataCount = this.dataItems.length;\r\n var startIndex = $math.fitToRange(Math.floor(this.start * dataCount - 1), 0, dataCount);\r\n var endIndex = $math.fitToRange(Math.ceil(this.end * dataCount), 0, dataCount);\r\n if (this.renderer.invalid) {\r\n this.renderer.validate();\r\n }\r\n // find frequency at which we'll show items\r\n var maxCount = this.renderer.axisLength / Math.max(this.renderer.minGridDistance, 1 / Number.MAX_SAFE_INTEGER);\r\n var frequency = Math.min(this.dataItems.length, Math.ceil((endIndex - startIndex) / maxCount));\r\n this._startIndex = Math.floor(startIndex / frequency) * frequency;\r\n this._endIndex = Math.ceil(this.end * dataCount);\r\n this.fixAxisBreaks();\r\n if (this._startIndex == this._endIndex) {\r\n this._endIndex++;\r\n }\r\n this._frequency = frequency;\r\n if (this.axisLength <= 0) {\r\n return;\r\n }\r\n this.maxZoomFactor = this.dataItems.length;\r\n if (this.dataItems.length <= 0) {\r\n this.maxZoomFactor = 1;\r\n }\r\n this.resetIterators();\r\n // it's important to use protected variables here, as getters will return 0 - length\r\n // TODO use iterator instead\r\n // @ todo: not solved cat axis item fading\r\n startIndex = $math.max(0, this._startIndex - this._frequency);\r\n endIndex = $math.min(this.dataItems.length, this._endIndex + this._frequency);\r\n var itemIndex = 0;\r\n for (var i = 0; i < startIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n dataItem.__disabled = true;\r\n }\r\n for (var i = endIndex, len = this.dataItems.length; i < len; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n dataItem.__disabled = true;\r\n }\r\n for (var i = startIndex; i < endIndex; i++) {\r\n if (i < this.dataItems.length) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (i / this._frequency == Math.round(i / this._frequency)) {\r\n var axisBreak = this.isInBreak(i);\r\n if (!axisBreak) {\r\n this.appendDataItem(dataItem);\r\n this.validateDataElement(dataItem, itemIndex);\r\n }\r\n itemIndex++;\r\n }\r\n else {\r\n //previously we disabled all before, but this is better for cpu\r\n //this.validateDataElement(dataItem, itemIndex); // helps to solve shrinking // not good - creates all items\r\n dataItem.__disabled = true;\r\n }\r\n }\r\n }\r\n this.appendDataItem(this._lastDataItem);\r\n this.validateDataElement(this._lastDataItem, itemIndex + 1, this.dataItems.length);\r\n if (this._axisBreaks) {\r\n var axisBreaks = this._axisBreaks;\r\n axisBreaks.each(function (axisBreak) {\r\n var adjustedStartValue = axisBreak.adjustedStartValue;\r\n var adjustedEndValue = axisBreak.adjustedEndValue;\r\n if ($math.intersect({ start: adjustedStartValue, end: adjustedEndValue }, { start: _this._startIndex, end: _this._endIndex })) {\r\n for (var b = adjustedStartValue; b <= adjustedEndValue; b++) {\r\n var dataItem = _this.dataItems.getIndex(b);\r\n dataItem.__disabled = true;\r\n }\r\n var frequency_1 = $math.fitToRange(Math.ceil(_this._frequency / axisBreak.breakSize), 1, adjustedEndValue - adjustedStartValue);\r\n var itemIndex_1 = 0;\r\n if (axisBreak.breakSize > 0) {\r\n // TODO use iterator instead\r\n for (var b = adjustedStartValue; b <= adjustedEndValue; b = b + frequency_1) {\r\n var dataItem = _this.dataItems.getIndex(b);\r\n dataItem.__disabled = false;\r\n _this.appendDataItem(dataItem);\r\n _this.validateDataElement(dataItem, itemIndex_1);\r\n itemIndex_1++;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n this.validateBreaks();\r\n this.validateAxisRanges();\r\n this.ghostLabel.invalidate(); // solves font issue\r\n this.renderer.invalidateLayout();\r\n };\r\n /**\r\n * [validateDataElement description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem [description]\r\n * @param itemIndex [description]\r\n */\r\n CategoryAxis.prototype.validateDataElement = function (dataItem, itemIndex, index) {\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n dataItem.itemIndex = this._axisItemCount;\r\n this._axisItemCount++;\r\n //dataItem.__disabled = false;\r\n var renderer = this.renderer;\r\n if (!$type.isNumber(index)) {\r\n index = this.categoryToIndex(dataItem.category);\r\n }\r\n var endIndex = this.categoryToIndex(dataItem.endCategory);\r\n if (!$type.isNumber(endIndex)) {\r\n endIndex = index;\r\n }\r\n var position = this.indexToPosition(index, dataItem.locations.category);\r\n var endPosition = this.indexToPosition(endIndex, dataItem.locations.endCategory);\r\n dataItem.position = position;\r\n var fillEndIndex;\r\n var fillPosition;\r\n var fillEndPosition;\r\n if (dataItem.isRange) {\r\n fillEndIndex = endIndex;\r\n fillPosition = this.indexToPosition(index, dataItem.locations.category);\r\n fillEndPosition = this.indexToPosition(fillEndIndex, dataItem.locations.endCategory);\r\n }\r\n dataItem.point = renderer.positionToPoint(position);\r\n var tick = dataItem.tick;\r\n if (tick && !tick.disabled) {\r\n renderer.updateTickElement(tick, position, endPosition);\r\n }\r\n var grid = dataItem.grid;\r\n if (grid && !grid.disabled) {\r\n renderer.updateGridElement(grid, position, endPosition);\r\n }\r\n var label = dataItem.label;\r\n if (label && !label.disabled) {\r\n // theorethically this might result problems if category text changes, the range text won't change. But otherwise range.label.text = \"custom text\" won't work, which is not intuitive.\r\n if (!dataItem.isRange || label.text == undefined) {\r\n dataItem.text = dataItem.text;\r\n }\r\n renderer.updateLabelElement(label, position, endPosition);\r\n if ((renderer instanceof AxisRendererY && dataItem.label.measuredWidth > this.ghostLabel.measuredWidth) || (renderer instanceof AxisRendererX && dataItem.label.measuredHeight > this.ghostLabel.measuredHeight)) {\r\n if (dataItem.label.html) {\r\n this.ghostLabel.html = dataItem.label.currentText;\r\n }\r\n else {\r\n this.ghostLabel.text = dataItem.label.currentText;\r\n }\r\n }\r\n }\r\n var fill = dataItem.axisFill;\r\n if (fill && !fill.disabled) {\r\n if (!dataItem.isRange) {\r\n fillEndIndex = index + this._frequency;\r\n fillPosition = this.indexToPosition(index, fill.location);\r\n fillEndPosition = this.indexToPosition(fillEndIndex, fill.location);\r\n }\r\n renderer.updateFillElement(fill, fillPosition, fillEndPosition);\r\n if (!dataItem.isRange) {\r\n this.fillRule(dataItem, itemIndex);\r\n }\r\n }\r\n if (dataItem.bullet) {\r\n renderer.updateBullet(dataItem.bullet, position, endPosition);\r\n }\r\n var mask = dataItem.mask;\r\n if (mask) {\r\n renderer.updateFillElement(mask, fillPosition, fillEndPosition);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n CategoryAxis.prototype.disposeData = function () {\r\n this.dataItemsByCategory.clear();\r\n _super.prototype.disposeData.call(this);\r\n };\r\n /**\r\n * Processes the axis data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n * @param dataContext The raw data that corresponds to this data item\r\n */\r\n CategoryAxis.prototype.processDataItem = function (dataItem, dataContext) {\r\n if (dataItem) {\r\n // creat a collection for fast access\r\n _super.prototype.processDataItem.call(this, dataItem, dataContext);\r\n // check if such category already exists\r\n //let existingDataItem: CategoryAxisDataItem = this.dataItemsByCategory.getKey(dataItem.category);\r\n //if (existingDataItem && existingDataItem != dataItem) {\r\n //\tthis.dataItems.remove(existingDataItem);\r\n //}\r\n if ($type.hasValue(dataItem.category)) {\r\n this.dataItemsByCategory.setKey(dataItem.category, dataItem);\r\n }\r\n }\r\n };\r\n CategoryAxis.prototype.getDataItem = function (dataContext) {\r\n var category = (dataContext[this.dataFields.category]);\r\n if ($type.hasValue(category)) {\r\n var dataItem = this.dataItemsByCategory.getKey(category);\r\n if (dataItem) {\r\n return dataItem;\r\n }\r\n else {\r\n return this.dataItems.create();\r\n }\r\n }\r\n };\r\n /**\r\n * Converts a category index to an actual screen coordinate on the axis.\r\n *\r\n * `location` identifies relative location within category. 0 - beginning,\r\n * 0.5 - middle, 1 - end, and anything inbetween.\r\n *\r\n * @param index Index\r\n * @param location Location (0-1)\r\n * @return Position (px)\r\n */\r\n CategoryAxis.prototype.indexToPosition = function (index, location) {\r\n if (!$type.isNumber(location)) {\r\n location = 0.5;\r\n }\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var difference = this.adjustDifference(startIndex, endIndex);\r\n var startLocation = this.startLocation;\r\n var endLocation = this.endLocation;\r\n difference -= startLocation;\r\n difference -= (1 - endLocation);\r\n if (this._axisBreaks) {\r\n var axisBreaks = this._axisBreaks;\r\n $iter.eachContinue(axisBreaks.iterator(), function (axisBreak) {\r\n var breakStartIndex = axisBreak.adjustedStartValue;\r\n var breakEndIndex = axisBreak.adjustedEndValue;\r\n if (index < startIndex || !$type.isNumber(breakStartIndex) || !$type.isNumber(breakEndIndex)) {\r\n return false;\r\n }\r\n if ($math.intersect({ start: breakStartIndex, end: breakEndIndex }, { start: startIndex, end: endIndex })) {\r\n breakStartIndex = Math.max(startIndex, breakStartIndex);\r\n breakEndIndex = Math.min(endIndex, breakEndIndex);\r\n var breakSize = axisBreak.breakSize;\r\n // value to the right of break end\r\n if (index > breakEndIndex) {\r\n startIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n }\r\n // value to the left of break start\r\n else if (index < breakStartIndex) {\r\n }\r\n // value within break\r\n else {\r\n index = breakStartIndex + (index - breakStartIndex) * breakSize;\r\n }\r\n }\r\n return true;\r\n });\r\n }\r\n var deltaPosition = 0;\r\n var dataItem = this.dataItems.getIndex(index);\r\n if (dataItem) {\r\n deltaPosition = dataItem.deltaPosition;\r\n }\r\n return $math.round(deltaPosition + (index + location - startLocation - startIndex) / difference, 5);\r\n };\r\n /**\r\n * Converts a string category name to relative position on axis.\r\n *\r\n * `location` identifies relative location within category. 0 - beginning,\r\n * 0.5 - middle, 1 - end, and anything inbetween.\r\n *\r\n * @param category Category name\r\n * @param location Location (0-1)\r\n * @return Position\r\n */\r\n CategoryAxis.prototype.categoryToPosition = function (category, location) {\r\n var index = this.categoryToIndex(category);\r\n return this.indexToPosition(index, location);\r\n };\r\n /**\r\n * Converts a string category name to a orientation point (x, y, angle) on axis\r\n *\r\n * `location` identifies relative location within category. 0 - beginning,\r\n * 0.5 - middle, 1 - end, and anything inbetween.\r\n * @param category Category name\r\n * @param location Location (0-1)\r\n * @return Orientation point\r\n */\r\n CategoryAxis.prototype.categoryToPoint = function (category, location) {\r\n var position = this.categoryToPosition(category, location);\r\n var point = this.renderer.positionToPoint(position);\r\n var angle = this.renderer.positionToAngle(position);\r\n return { x: point.x, y: point.y, angle: angle };\r\n };\r\n /**\r\n * Converts a string category name to a orientation point (x, y, angle) on axis\r\n *\r\n * `location` identifies relative location within category. 0 - beginning,\r\n * 0.5 - middle, 1 - end, and anything inbetween.\r\n * @param category Category name\r\n * @param location Location (0-1)\r\n * @return Orientation point\r\n */\r\n CategoryAxis.prototype.anyToPoint = function (category, location) {\r\n return this.categoryToPoint(category, location);\r\n };\r\n /**\r\n * Converts a string category name to relative position on axis.\r\n *\r\n * An alias to `categoryToPosition()`.\r\n *\r\n * @param category Category name\r\n * @param location Location (0-1)\r\n * @return Relative position\r\n */\r\n CategoryAxis.prototype.anyToPosition = function (category, location) {\r\n return this.categoryToPosition(category, location);\r\n };\r\n /**\r\n * Converts named category to an index of data item it corresponds to.\r\n *\r\n * @param category Category\r\n * @return Data item index\r\n */\r\n CategoryAxis.prototype.categoryToIndex = function (category) {\r\n if ($type.hasValue(category)) {\r\n var dataItem = this.dataItemsByCategory.getKey(category);\r\n if (dataItem) {\r\n return dataItem.index;\r\n }\r\n }\r\n };\r\n /**\r\n * Zooms the axis to specific named ctaegories.\r\n *\r\n * @param startCategory Start category\r\n * @param endCategory End category\r\n */\r\n CategoryAxis.prototype.zoomToCategories = function (startCategory, endCategory) {\r\n this.zoomToIndexes(this.categoryToIndex(startCategory), this.categoryToIndex(endCategory) + 1);\r\n };\r\n /**\r\n * [getAnyRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param start [description]\r\n * @param end [description]\r\n * @param startLocation [description]\r\n * @param endLocation [description]\r\n * @return [description]\r\n */\r\n CategoryAxis.prototype.getAnyRangePath = function (start, end, startLocation, endLocation) {\r\n var startPos = this.categoryToPosition(start, startLocation);\r\n var endPos = this.categoryToPosition(end, endLocation);\r\n return this.getPositionRangePath(startPos, endPos); // Base class (Axis) gets range shape from AxisRenderer\r\n };\r\n /**\r\n * Takes an absolute position (px) within axis and adjust it to a specific\r\n * `location` within category it corresponds to.\r\n *\r\n * @param position Source position (px)\r\n * @param location Location within category (0-1)\r\n * @return Adjusted position (px)\r\n */\r\n CategoryAxis.prototype.roundPosition = function (position, location) {\r\n var index = this.positionToIndex(position);\r\n return this.indexToPosition(index, location);\r\n };\r\n /**\r\n * Finds and returns first series data item with specific category\r\n * @param series Target series\r\n * @param category Category\r\n * @return XYSeriesDataItem data item\r\n */\r\n CategoryAxis.prototype.getFirstSeriesDataItem = function (series, category) {\r\n for (var i = 0; i < series.dataItems.length; i++) {\r\n var dataItem = series.dataItems.getIndex(i);\r\n if (series.xAxis == this) {\r\n if (dataItem.categoryX == category) {\r\n return dataItem;\r\n }\r\n }\r\n if (series.yAxis == this) {\r\n if (dataItem.categoryY == category) {\r\n return dataItem;\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Finds and returns last series data item with specific category.\r\n * @param series Target series\r\n * @param category Category\r\n * @return XYSeriesDataItem data item\r\n */\r\n CategoryAxis.prototype.getLastSeriesDataItem = function (series, category) {\r\n for (var i = series.dataItems.length - 1; i >= 0; i--) {\r\n var dataItem = series.dataItems.getIndex(i);\r\n if (series.xAxis == this) {\r\n if (dataItem.categoryX == category) {\r\n return dataItem;\r\n }\r\n }\r\n if (series.yAxis == this) {\r\n if (dataItem.categoryY == category) {\r\n return dataItem;\r\n }\r\n }\r\n }\r\n };\r\n // todo: optimize\r\n CategoryAxis.prototype.getSeriesDataItemByCategory = function (category, series) {\r\n var _this = this;\r\n var seriesDataItem;\r\n series.dataItems.each(function (dataItem) {\r\n if (series.xAxis == _this) {\r\n if (dataItem.categoryX == category) {\r\n seriesDataItem = dataItem;\r\n }\r\n }\r\n else if (series.yAxis == _this) {\r\n if (dataItem.categoryY == category) {\r\n seriesDataItem = dataItem;\r\n }\r\n }\r\n });\r\n return seriesDataItem;\r\n };\r\n /**\r\n * Returns a data item from Series that corresponds to a specific absolute\r\n * position on the Axis.\r\n *\r\n * @param series Target series\r\n * @param position Position (px)\r\n * @return XYSeriesDataItem data item\r\n */\r\n CategoryAxis.prototype.getSeriesDataItem = function (series, position, findNearest) {\r\n var _this = this;\r\n if ($type.isNumber(position)) {\r\n var index_1 = this.positionToIndex(position);\r\n if (index_1 >= this.dataItems.length) {\r\n index_1--;\r\n }\r\n var dataItem = this.dataItems.getIndex(index_1);\r\n if (dataItem) {\r\n var category_1 = dataItem.category;\r\n var sdi_1;\r\n var seriesDataItem = series.dataItems.getIndex(index_1);\r\n if (seriesDataItem) {\r\n if (series.xAxis == this) {\r\n if (seriesDataItem.categoryX == category_1) {\r\n return seriesDataItem;\r\n }\r\n }\r\n if (series.yAxis == this) {\r\n if (seriesDataItem.categoryY == category_1) {\r\n return seriesDataItem;\r\n }\r\n }\r\n }\r\n series.dataItems.each(function (dataItem) {\r\n if (series.xAxis == _this) {\r\n if (dataItem.categoryX == category_1) {\r\n if (!sdi_1) {\r\n sdi_1 = dataItem;\r\n }\r\n if (Math.abs(index_1 - sdi_1.index) > Math.abs(index_1 - dataItem.index)) {\r\n sdi_1 = dataItem;\r\n }\r\n }\r\n }\r\n if (series.yAxis == _this) {\r\n if (dataItem.categoryY == category_1) {\r\n if (!sdi_1) {\r\n sdi_1 = dataItem;\r\n }\r\n if (Math.abs(index_1 - sdi_1.index) > Math.abs(index_1 - dataItem.index)) {\r\n sdi_1 = dataItem;\r\n }\r\n }\r\n }\r\n });\r\n //@todo\r\n if (findNearest) {\r\n }\r\n return sdi_1;\r\n }\r\n }\r\n };\r\n /**\r\n * Returns the X coordinate for series' data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Category\r\n * @param location Location (0-1)\r\n * @return X coordinate (px)\r\n */\r\n CategoryAxis.prototype.getX = function (dataItem, key, location, stackKey, range) {\r\n var position = this.getPositionX(dataItem, key, location, stackKey, range);\r\n if ($type.isNaN(position)) {\r\n return this.basePoint.x;\r\n }\r\n else {\r\n return this.renderer.positionToPoint(position).x;\r\n }\r\n };\r\n /**\r\n * Returns relative position on axis for series' data item.\r\n *\r\n * @since 4.5.14\r\n * @param dataItem Data item\r\n * @param key Category\r\n * @param location Location (0-1)\r\n * @return Relative position\r\n */\r\n CategoryAxis.prototype.getPositionX = function (dataItem, key, location, stackKey, range) {\r\n var position;\r\n if ($type.hasValue(key)) {\r\n position = this.categoryToPosition(dataItem.categories[key], location);\r\n }\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return position;\r\n };\r\n /**\r\n * Returns the Y coordinate for series' data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Category\r\n * @param location Location (0-1)\r\n * @return Y coordinate (px)\r\n */\r\n CategoryAxis.prototype.getY = function (dataItem, key, location, stackKey, range) {\r\n var position = this.getPositionY(dataItem, key, location, stackKey, range);\r\n if ($type.isNaN(position)) {\r\n return this.basePoint.y;\r\n }\r\n else {\r\n return this.renderer.positionToPoint(position).y;\r\n }\r\n };\r\n /**\r\n * Returns relative position on axis for series' data item.\r\n *\r\n * @since 4.5.14\r\n * @param dataItem Data item\r\n * @param key Category\r\n * @param location Location (0-1)\r\n * @return Relative position\r\n */\r\n CategoryAxis.prototype.getPositionY = function (dataItem, key, location, stackKey, range) {\r\n var position;\r\n if ($type.hasValue(key)) {\r\n position = this.categoryToPosition(dataItem.categories[key], location);\r\n }\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return position;\r\n };\r\n /**\r\n * Returns an angle for series data item.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param dataItem Data item\r\n * @param key Category\r\n * @param location Location (0-1)\r\n * @param stackKey Stack key (?)\r\n * @param range Range to fit in\r\n * @return Angle\r\n */\r\n CategoryAxis.prototype.getAngle = function (dataItem, key, location, stackKey, range) {\r\n var position = this.categoryToPosition(dataItem.categories[key], location);\r\n if (range) {\r\n position = $math.fitToRange(position, range.start, range.end);\r\n }\r\n return this.positionToAngle(position);\r\n };\r\n /**\r\n * Returns an absolute pixel coordinate of the start of the cell (category),\r\n * that specific position value falls into.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param position Position (px)\r\n * @return Cell start position (px)\r\n */\r\n CategoryAxis.prototype.getCellStartPosition = function (position) {\r\n return this.roundPosition(position, 0);\r\n };\r\n /**\r\n * Returns an absolute pixel coordinate of the end of the cell (category),\r\n * that specific position value falls into.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param position Position (px)\r\n * @return Cell end position (px)\r\n */\r\n CategoryAxis.prototype.getCellEndPosition = function (position) {\r\n return this.roundPosition(position, 1);\r\n };\r\n /**\r\n * Returns text to show in a category tooltip, based on specific position\r\n * within axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position (px)\r\n * @return Label (category)\r\n */\r\n CategoryAxis.prototype.getTooltipText = function (position) {\r\n var dataItem = this.dataItems.getIndex(this.positionToIndex(position));\r\n if (dataItem) {\r\n this.tooltipDataItem = dataItem;\r\n this.tooltip.dataItem = dataItem;\r\n if (this.tooltipText) {\r\n return this.tooltipText;\r\n }\r\n if (!this._adapterO) {\r\n return dataItem.category;\r\n }\r\n else {\r\n return this._adapterO.apply(\"getTooltipText\", dataItem.category);\r\n }\r\n }\r\n };\r\n /**\r\n * Returns an index of the category that corresponds to specific pixel\r\n * position within axis.\r\n *\r\n * @param position Position (px)\r\n * @return Category index\r\n */\r\n CategoryAxis.prototype.positionToIndex = function (position) {\r\n position = $math.round(position, 10);\r\n if (position < 0) {\r\n position = 0;\r\n }\r\n if (position > 1) {\r\n position = 1;\r\n }\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var difference = endIndex - startIndex - this.startLocation - (1 - this.endLocation);\r\n position += 1 / difference * this.startLocation;\r\n var index = null;\r\n if (this._axisBreaks) {\r\n var axisBreaks = this._axisBreaks;\r\n // in case we have some axis breaks\r\n $iter.eachContinue(axisBreaks.iterator(), function (axisBreak) {\r\n var breakStartPosition = axisBreak.startPosition;\r\n var breakEndPosition = axisBreak.endPosition;\r\n var breakStartIndex = axisBreak.adjustedStartValue;\r\n var breakEndIndex = axisBreak.adjustedEndValue;\r\n breakStartIndex = $math.max(breakStartIndex, startIndex);\r\n breakEndIndex = $math.min(breakEndIndex, endIndex);\r\n var breakSize = axisBreak.breakSize;\r\n difference -= (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n // position to the right of break end\r\n if (position > breakEndPosition) {\r\n startIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n }\r\n // position to the left of break start\r\n else if (position < breakStartPosition) {\r\n }\r\n // value within break\r\n else {\r\n var breakPosition = (position - breakStartPosition) / (breakEndPosition - breakStartPosition);\r\n index = breakStartIndex + Math.round(breakPosition * (breakEndIndex - breakStartIndex));\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n if (!$type.isNumber(index)) {\r\n index = Math.floor(position * difference + startIndex);\r\n }\r\n if (index >= this.dataItems.length) {\r\n index = this.dataItems.length - 1;\r\n }\r\n // not good, when panning out of bounds, each time one less item gets selected\r\n //if (index >= endIndex) {\r\n //\tindex--;\r\n //}\r\n return index;\r\n };\r\n /**\r\n * Returns category based on position.\r\n *\r\n * Please note that `position` represents position within axis which may be\r\n * zoomed and not correspond to Cursor's `position`.\r\n *\r\n * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n *\r\n * This is a synonim of `getPositionLabel()` implemented here for consistentcy.\r\n *\r\n * @since 4.3.8\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n * @param position Relative position on axis (0-1)\r\n * @return Position label\r\n */\r\n CategoryAxis.prototype.positionToCategory = function (position) {\r\n return this.getPositionLabel(position);\r\n };\r\n /**\r\n * Returns category based on position.\r\n *\r\n * Please note that `position` represents position within axis which may be\r\n * zoomed and not correspond to Cursor's `position`.\r\n *\r\n * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n * @param position Relative position on axis (0-1)\r\n * @return Position label\r\n */\r\n CategoryAxis.prototype.getPositionLabel = function (position) {\r\n var dataItem = this.dataItems.getIndex(this.positionToIndex(position));\r\n if (dataItem) {\r\n return dataItem.category;\r\n }\r\n };\r\n Object.defineProperty(CategoryAxis.prototype, \"basePoint\", {\r\n /**\r\n * Coordinates of the actual axis start.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Base point\r\n */\r\n get: function () {\r\n // This makes base grid to be drawn at the end of the axis and adds extra\r\n // grid which we need to nicely close the chart.\r\n return this.renderer.positionToPoint(1);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Initializes Axis' renderer.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n CategoryAxis.prototype.initRenderer = function () {\r\n _super.prototype.initRenderer.call(this);\r\n var renderer = this.renderer;\r\n renderer.baseGrid.disabled = true;\r\n };\r\n Object.defineProperty(CategoryAxis.prototype, \"frequency\", {\r\n /**\r\n * Current frequency of labels of the axis.\r\n *\r\n * Normally it would be 1, but when labels start to be hidden due\r\n * to `minGridDistance` this read-only property will increase.\r\n *\r\n * @readonly\r\n * @since 4.2.0\r\n * @return Label frequency\r\n */\r\n get: function () {\r\n return this._frequency;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CategoryAxis.prototype, \"sortBySeries\", {\r\n /**\r\n * @return Sort categories?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"sortBySeries\");\r\n },\r\n /**\r\n * If set to a reference of [[ColumnSeries]] the categories will be sorted\r\n * by actual values.\r\n *\r\n * The categories are ordered in descending order (from highest values to\r\n * lowest). To reverse the order, use axis renderer's `inversed` setting.\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * categoryAxis.sortBySeries = series;\r\n * categoryAxis.renderer.inversed = true;\r\n * ```\r\n * ```JavaScript\r\n * categoryAxis.sortBySeries = series;\r\n * categoryAxis.renderer.inversed = true;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * // ...\r\n * \"sortBySeries\": \"s1\",\r\n * \"renderer\": {\r\n * // ...\r\n * \"inversed\": true\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @since 4.8.7\r\n * @param value Sort categories?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"sortBySeries\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n CategoryAxis.prototype.processConfig = function (config) {\r\n if (config) {\r\n if ($type.hasValue(config.sortBySeries) && $type.isString(config.sortBySeries)) {\r\n if (this.map.hasKey(config.sortBySeries)) {\r\n config.sortBySeries = this.map.getKey(config.sortBySeries);\r\n }\r\n else {\r\n this.addDelayedMap(\"sortBySeries\", config.sortBySeries);\r\n delete config.sortBySeries;\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return CategoryAxis;\r\n}(Axis));\r\nexport { CategoryAxis };\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//# sourceMappingURL=CategoryAxis.js.map","/**\r\n * XY series module.\r\n */\r\nimport { __extends, __values } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { Sprite, visualProperties } from \"../../core/Sprite\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { options } from \"../../core/Options\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[XYSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar XYSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(XYSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"XYSeriesDataItem\";\r\n _this.values.customValue = {};\r\n _this.values.valueX = { stack: 0 };\r\n _this.values.valueY = { stack: 0 };\r\n _this.values.openValueX = {};\r\n _this.values.openValueY = {};\r\n _this.values.dateX = {};\r\n _this.values.dateY = {};\r\n _this.values.openDateX = {};\r\n _this.values.openDateY = {};\r\n _this.setLocation(\"dateX\", 0.5, 0);\r\n _this.setLocation(\"dateY\", 0.5, 0);\r\n _this.setLocation(\"categoryX\", 0.5, 0);\r\n _this.setLocation(\"categoryY\", 0.5, 0);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"valueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.valueX.value;\r\n },\r\n /**\r\n * Item's numeric value on X value axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"valueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"customValue\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.customValue.value;\r\n },\r\n /**\r\n * Item's custom numeric value.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"customValue\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"valueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.valueY.value;\r\n },\r\n /**\r\n * Item's numeric value on Y value axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"valueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"dateX\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.getDate(\"dateX\");\r\n },\r\n /**\r\n * Item's date value on X date-based axis.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"dateX\", date);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"dateY\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.getDate(\"dateY\");\r\n },\r\n /**\r\n * Item's date value on Y date-based axis.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"dateY\", date);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"categoryX\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.categories.categoryX;\r\n },\r\n /**\r\n * Item's category on X category axis.\r\n *\r\n * @param category Category\r\n */\r\n set: function (category) {\r\n this.setCategory(\"categoryX\", category);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"categoryY\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.categories.categoryY;\r\n },\r\n /**\r\n * Item's category on Y category axis.\r\n *\r\n * @param category Category\r\n */\r\n set: function (category) {\r\n this.setCategory(\"categoryY\", category);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openValueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.openValueX.value;\r\n },\r\n /**\r\n * Item's open numeric value on X value axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"openValueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openValueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.openValueY.value;\r\n },\r\n /**\r\n * Item's open numeric value on Y value axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"openValueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openDateX\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.getDate(\"openDateX\");\r\n },\r\n /**\r\n * Item's open date value on X date-based axis.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"openDateX\", date);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openDateY\", {\r\n /**\r\n * @return Date\r\n */\r\n get: function () {\r\n return this.getDate(\"openDateY\");\r\n },\r\n /**\r\n * Item's open date value on Y date-based axis.\r\n *\r\n * @param date Date\r\n */\r\n set: function (date) {\r\n this.setDate(\"openDateY\", date);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openCategoryX\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.categories.openCategoryX;\r\n },\r\n /**\r\n * Item's open category on X category axis.\r\n *\r\n * @param category Category\r\n */\r\n set: function (category) {\r\n this.setCategory(\"openCategoryX\", category);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeriesDataItem.prototype, \"openCategoryY\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.categories.openCategoryY;\r\n },\r\n /**\r\n * Item's open category on Y category axis.\r\n *\r\n * @param category Category\r\n */\r\n set: function (category) {\r\n this.setCategory(\"openCategoryY\", category);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Return smallest value out of all item's value fields.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fields Fields to check in\r\n * @param working Include working (temporary) values\r\n * @param stackValue If item is in a stack, the value item starts as\r\n * @return Value\r\n */\r\n XYSeriesDataItem.prototype.getMin = function (fields, working, stackValue) {\r\n var _this = this;\r\n //if (this.visible) { // dumped because of non smooth zooming\r\n var min;\r\n if (!$type.isNumber(stackValue)) {\r\n stackValue = 0;\r\n }\r\n $array.each(fields, function (field) {\r\n var value;\r\n if (working) {\r\n value = _this.getWorkingValue(field);\r\n }\r\n else {\r\n value = _this.getValue(field);\r\n }\r\n value += stackValue;\r\n if (value < min || !$type.isNumber(min)) {\r\n min = value;\r\n }\r\n });\r\n return min;\r\n //}\r\n };\r\n /**\r\n * Return biggest value out of all item's value fields.\r\n *\r\n * @ignore Exclude from docs\r\n * @param fields Fields to check in\r\n * @param working Include working (temporary) values\r\n * @param stackValue If item is in a stack, the value item starts as\r\n * @return Value\r\n */\r\n XYSeriesDataItem.prototype.getMax = function (fields, working, stackValue) {\r\n var _this = this;\r\n //if (this.visible) { // dumped because of non smooth zooming\r\n var max;\r\n if (!$type.isNumber(stackValue)) {\r\n stackValue = 0;\r\n }\r\n $array.each(fields, function (field) {\r\n var value;\r\n if (working) {\r\n value = _this.getWorkingValue(field);\r\n }\r\n else {\r\n value = _this.getValue(field);\r\n }\r\n value += stackValue;\r\n if (value > max || !$type.isNumber(max)) {\r\n max = value;\r\n }\r\n });\r\n return max;\r\n //}\r\n };\r\n return XYSeriesDataItem;\r\n}(SeriesDataItem));\r\nexport { XYSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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 * @important\r\n */\r\nvar XYSeries = /** @class */ (function (_super) {\r\n __extends(XYSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYSeries() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Indicates which of the series' `dataFields` to calculate aggregate values\r\n * for.\r\n *\r\n * Available data fields for all [[XYSeries]] are:\r\n * `valueX`, `valueY`, `openValueX`, and `openValueY`.\r\n *\r\n * [[CandlestickSeries]] adds:\r\n * `lowValueX`, `lowValueY`, `highValueX`, and `highValueY`.\r\n *\r\n * Available options:\r\n * `\"open\"`, `\"close\"`, `\"low\"`, `\"high\"`, `\"average\"`, `\"sum\"`.\r\n *\r\n * Defaults are as follows:\r\n * * `valueX`: `\"close\"`\r\n * * `valueY`: `\"close\"`\r\n * * `openValueX`: `\"open\"`\r\n * * `openValueY`: `\"open\"`\r\n * * `lowValueX`: `\"low\"`\r\n * * `lowValueY`: `\"low\"`\r\n * * `highValueX`: `\"high\"`\r\n * * `highValueY`: `\"high\"`\r\n *\r\n * Is required only if data being plotted on a `DateAxis` and\r\n * its `groupData` is set to `true`.\r\n *\r\n * ```TypeScript\r\n * let dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n * dateAxis.groupData = true;\r\n *\r\n * let valueAxis = chart.xAxes.push(new am4charts.valueAxis());\r\n *\r\n * let series = chart.series.push(new am4charts.LineSeries());\r\n * series.dataFields.dateX = \"date\";\r\n * series.dataFields.valueY = \"value\";\r\n * series.groupFields.valueY = \"average\";\r\n * ```\r\n * ```JavaScript\r\n * var dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n * dateAxis.groupData = true;\r\n *\r\n * var valueAxis = chart.xAxes.push(new am4charts.valueAxis());\r\n *\r\n * var series = chart.series.push(new am4charts.LineSeries());\r\n * series.dataFields.dateX = \"date\";\r\n * series.dataFields.valueY = \"value\";\r\n * series.groupFields.valueY = \"average\";\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"groupData\": true\r\n * }],\r\n * \"yAxes\": [{\r\n * \"type\": \"ValueAxis\"\r\n * }],\r\n * \"series\": [{\r\n * \"type\": \"LineSeries\",\r\n * \"dataFields\": {\r\n * \"dateX\": \"date\",\r\n * \"valueY\": \"value\"\r\n * },\r\n * \"groupFields\": {\r\n * \"valueY\": \"average\"\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * The above setup will ensure, that if there are many data items within\r\n * selected range, they will be grouped into aggregated data points, using\r\n * average value of all the values.\r\n *\r\n * For example if we have 2 years worth of daily data (~700 data items), when\r\n * fully zoomed out, the chart would show ~100 data items instead: one for\r\n * each week in those two years.\r\n *\r\n * Grouping will occur automatically, based on current selection range, and\r\n * will change dynamically when user zooms in/out the chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/date-axis/#Dynamic_data_item_grouping} for more information about dynamic data item grouping.\r\n * @since 4.7.0\r\n */\r\n _this.groupFields = {};\r\n /**\r\n * X axis the series is attached to.\r\n */\r\n _this._xAxis = new MutableValueDisposer();\r\n /**\r\n * Y axis the series is attached to.\r\n */\r\n _this._yAxis = new MutableValueDisposer();\r\n /**\r\n * [_xValueFields description]\r\n *\r\n * @todo Description\r\n */\r\n _this._xValueFields = [];\r\n /**\r\n * [_yValueFields description]\r\n *\r\n * @todo Description\r\n */\r\n _this._yValueFields = [];\r\n /**\r\n * @ignore\r\n */\r\n _this._baseInterval = {};\r\n /**\r\n * @ignore\r\n */\r\n _this.dataGrouped = false;\r\n /**\r\n * @ignore\r\n */\r\n _this.usesShowFields = false;\r\n /**\r\n * @ignore\r\n */\r\n _this._dataSetChanged = false;\r\n _this._maxxX = 100000;\r\n _this._maxxY = 100000;\r\n _this._propertiesChanged = false;\r\n /**\r\n * @ignore\r\n */\r\n _this.outOfRange = false;\r\n _this.className = \"XYSeries\";\r\n _this.isMeasured = false;\r\n _this.groupFields.valueX = \"close\";\r\n _this.groupFields.valueY = \"close\";\r\n _this.groupFields.customValue = \"close\";\r\n _this.groupFields.openValueX = \"open\";\r\n _this.groupFields.openValueY = \"open\";\r\n _this.cursorTooltipEnabled = true;\r\n _this.cursorHoverEnabled = true;\r\n _this.excludeFromTotal = false;\r\n _this.mainContainer.mask = new Sprite();\r\n _this.mainContainer.mask.setElement(_this.paper.add(\"path\"));\r\n _this.stacked = false;\r\n _this.snapTooltip = false;\r\n _this._showBullets = false;\r\n _this.tooltip.pointerOrientation = \"horizontal\";\r\n _this.properties.stackToNegative = true;\r\n _this.hideTooltipWhileZooming = true;\r\n _this.setPropertyValue(\"maskBullets\", true);\r\n _this.tooltip.events.on(\"hidden\", function () {\r\n _this.returnBulletDefaultState();\r\n }, undefined, false);\r\n _this._disposers.push(_this._xAxis);\r\n _this._disposers.push(_this._yAxis);\r\n _this.observe(visualProperties, function () {\r\n if (_this.inited) {\r\n _this._propertiesChanged = true;\r\n if (_this.legendDataItem) {\r\n _this.legendDataItem.childrenCreated = false;\r\n }\r\n if (_this.chart && _this.chart.legend) {\r\n _this.chart.legend.invalidateDataItems();\r\n }\r\n _this.invalidate();\r\n }\r\n }, undefined, false);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n XYSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"X/Y Series\");\r\n }\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n XYSeries.prototype.createDataItem = function () {\r\n return new XYSeriesDataItem();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.resetExtremes = function () {\r\n this._tmin.clear();\r\n this._tmax.clear();\r\n this._smin.clear();\r\n this._smax.clear();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.dataChangeUpdate = function () {\r\n this.dataGrouped = false;\r\n this._baseInterval = {};\r\n this._currentDataSetId = \"\";\r\n this.resetExtremes();\r\n if (this.xAxis) {\r\n this.xAxis.seriesDataChangeUpdate(this);\r\n }\r\n if (this.yAxis) {\r\n this.yAxis.seriesDataChangeUpdate(this);\r\n }\r\n };\r\n /**\r\n * (Re)validates the series' data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.validateData = function () {\r\n this._baseInterval = {};\r\n var dataFields = this.dataFields;\r\n if (dataFields.valueYShow || dataFields.openValueXShow || dataFields.openValueXShow || dataFields.openValueYShow) {\r\n this.usesShowFields = true;\r\n }\r\n else {\r\n this.usesShowFields = false;\r\n }\r\n this.defineFields();\r\n if (this.data.length > 0) {\r\n this.dataChangeUpdate();\r\n }\r\n _super.prototype.validateData.call(this);\r\n this.updateItemReaderText();\r\n if (this.chart) {\r\n if (!$type.hasValue(this.dataFields[this._xField]) || !$type.hasValue(this.dataFields[this._yField])) {\r\n throw Error(\"Data fields for series \\\"\" + (this.name ? this.name : this.uid) + \"\\\" are not properly defined.\");\r\n }\r\n }\r\n // 4.7.21 solves 51540\r\n if (this.inited && this.isHidden) {\r\n this.hide(0);\r\n }\r\n this.dataGrouped = false;\r\n };\r\n /**\r\n * Processes data item.\r\n *\r\n * @param dataItem Data item\r\n * @param dataContext Raw data\r\n * @param index Index of the data item\r\n */\r\n XYSeries.prototype.processDataItem = function (dataItem, dataContext) {\r\n try {\r\n _super.prototype.processDataItem.call(this, dataItem, dataContext);\r\n this.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n this.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n this.setInitialWorkingValues(dataItem);\r\n }\r\n catch (e) {\r\n if (this._chart) {\r\n this._chart.raiseCriticalError(e);\r\n }\r\n }\r\n };\r\n /**\r\n *\r\n * When validating raw data, instead of processing data item, we update it\r\n *\r\n * @ignore Exclude from docs\r\n * @param item\r\n */\r\n XYSeries.prototype.updateDataItem = function (dataItem) {\r\n _super.prototype.updateDataItem.call(this, dataItem);\r\n //dataItem.events.disable();\r\n this.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n this.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n //dataItem.events.enable();\t\t\r\n };\r\n /**\r\n * Inits data item's working values.\r\n *\r\n * @param dataItem Data item\r\n * @param index Data item's index\r\n */\r\n XYSeries.prototype.setInitialWorkingValues = function (dataItem) {\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis) {\r\n var dataItemsX = this.dataItemsByAxis.getKey(xAxis.uid);\r\n if (dataItemsX) {\r\n dataItemsX.clear();\r\n }\r\n if (xAxis instanceof CategoryAxis) {\r\n this.clearCatAxis(xAxis);\r\n }\r\n }\r\n if (yAxis) {\r\n var dataItemsY = this.dataItemsByAxis.getKey(yAxis.uid);\r\n if (dataItemsY) {\r\n dataItemsY.clear();\r\n }\r\n if (yAxis instanceof CategoryAxis) {\r\n this.clearCatAxis(yAxis);\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.clearCatAxis = function (axis) {\r\n var uid = this.uid;\r\n axis.dataItems.each(function (dataItem) {\r\n if (dataItem.seriesDataItems[uid]) {\r\n dataItem.seriesDataItems[uid] = [];\r\n }\r\n });\r\n };\r\n /**\r\n * Sets up which data fields to use for data access.\r\n */\r\n XYSeries.prototype.defineFields = function () {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n var xAxisFieldName = xAxis.axisFieldName;\r\n var xField = (xAxisFieldName + \"X\");\r\n var xOpenField = (\"open\" + $utils.capitalize(xAxisFieldName) + \"X\");\r\n var yAxisFieldName = yAxis.axisFieldName;\r\n var yField = (yAxisFieldName + \"Y\");\r\n var yOpenField = (\"open\" + $utils.capitalize(yAxisFieldName) + \"Y\");\r\n this._xField = xField;\r\n this._yField = yField;\r\n if (this.dataFields[xOpenField]) {\r\n this._xOpenField = xOpenField;\r\n }\r\n if (this.dataFields[yOpenField]) {\r\n this._yOpenField = yOpenField;\r\n }\r\n if (!this.dataFields[yOpenField] && this.baseAxis == yAxis) {\r\n this._yOpenField = yField;\r\n }\r\n if (!this.dataFields[xOpenField] && this.baseAxis == xAxis) {\r\n this._xOpenField = xField;\r\n }\r\n if (this.stacked && this.baseAxis == xAxis) {\r\n this._xOpenField = xField;\r\n }\r\n if (this.stacked && this.baseAxis == yAxis) {\r\n this._yOpenField = yField;\r\n }\r\n if ((xAxis instanceof CategoryAxis) && (yAxis instanceof CategoryAxis)) {\r\n if (!this._yOpenField) {\r\n this._yOpenField = yField;\r\n }\r\n }\r\n this._xValueFields = [];\r\n this._yValueFields = [];\r\n this.addValueField(xAxis, this._xValueFields, this._xField);\r\n this.addValueField(xAxis, this._xValueFields, this._xOpenField);\r\n this.addValueField(yAxis, this._yValueFields, this._yField);\r\n this.addValueField(yAxis, this._yValueFields, this._yOpenField);\r\n }\r\n };\r\n /**\r\n * [axis description]\r\n *\r\n * @todo Description\r\n * @param axis Axis\r\n * @param fields Fields (?)\r\n * @param field Field\r\n */\r\n XYSeries.prototype.addValueField = function (axis, fields, field) {\r\n if (axis instanceof ValueAxis) {\r\n if ($type.hasValue(this.dataFields[field]) && fields.indexOf(field) == -1) {\r\n fields.push(field);\r\n }\r\n }\r\n };\r\n /**\r\n * Sets category field from the category axis.\r\n *\r\n * User might set field for category axis only, but not for series. In such\r\n * case, we take field value from axis and set it for series.\r\n *\r\n * @param field Field\r\n * @param axis Axis\r\n */\r\n XYSeries.prototype.setCategoryAxisField = function (field, axis) {\r\n if (!$type.hasValue(this.dataFields[field])) {\r\n this.dataFields[field] = axis.dataFields.category;\r\n }\r\n };\r\n /**\r\n * Sets date field from the date axis.\r\n *\r\n * User might set field for category axis only, but not for series. In such\r\n * case, we take field value from axis and set it for series.\r\n *\r\n * @param field Field\r\n * @param axis Axis\r\n */\r\n XYSeries.prototype.setDateAxisField = function (field, axis) {\r\n if (!$type.hasValue(this.dataFields[field])) {\r\n this.dataFields[field] = axis.dataFields.date;\r\n }\r\n };\r\n /**\r\n * Performs after-draw tasks, e.g. creates masks.\r\n */\r\n XYSeries.prototype.afterDraw = function () {\r\n _super.prototype.afterDraw.call(this);\r\n this.createMask();\r\n };\r\n /**\r\n * Create a mask for the series.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.createMask = function () {\r\n // this mask from which we cut out ranges. does not work well if ranges overlap.\r\n if (this.mainContainer.mask) {\r\n var path_1 = this.getMaskPath();\r\n // @todo: this approach won't work well on circluar or other non x/y axes\r\n $iter.each(this.axisRanges.iterator(), function (range) {\r\n if (range.axisFill.fillPath) {\r\n range.axisFill.validate();\r\n path_1 += range.axisFill.fillPath;\r\n }\r\n });\r\n this.mainContainer.mask.path = path_1;\r\n }\r\n };\r\n /**\r\n * Returns an SVG path to use as series mask.\r\n *\r\n * @return SVG path\r\n */\r\n XYSeries.prototype.getMaskPath = function () {\r\n if (this.xAxis && this.yAxis) {\r\n return $path.rectToPath({\r\n x: 0,\r\n y: 0,\r\n width: this.xAxis.axisLength,\r\n height: this.yAxis.axisLength\r\n });\r\n }\r\n return \"\";\r\n };\r\n /**\r\n * Returns axis data field to use.\r\n *\r\n * @param axis Axis\r\n * @return Field name\r\n */\r\n XYSeries.prototype.getAxisField = function (axis) {\r\n if (axis == this.xAxis) {\r\n return this.xField;\r\n }\r\n if (axis == this.yAxis) {\r\n return this.yField;\r\n }\r\n };\r\n /**\r\n * Validates data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.validateDataItems = function () {\r\n var chart = this.chart;\r\n if (chart) {\r\n this._maxxX = $math.max(100000, chart.plotContainer.maxWidth * 2);\r\n this._maxxY = $math.max(100000, chart.plotContainer.maxHeight * 2);\r\n }\r\n // this helps date axis to check which baseInterval we should use\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n xAxis.updateAxisBySeries();\r\n yAxis.updateAxisBySeries();\r\n }\r\n _super.prototype.validateDataItems.call(this);\r\n if (xAxis && yAxis) {\r\n xAxis.postProcessSeriesDataItems(this);\r\n yAxis.postProcessSeriesDataItems(this);\r\n }\r\n };\r\n /**\r\n * Validates data range.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.validateDataRange = function () {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n if (xAxis.dataRangeInvalid) {\r\n xAxis.validateDataRange();\r\n }\r\n if (yAxis.dataRangeInvalid) {\r\n yAxis.validateDataRange();\r\n }\r\n }\r\n _super.prototype.validateDataRange.call(this);\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.validate = function () {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n if (xAxis.invalid) {\r\n xAxis.validate();\r\n }\r\n if (yAxis.invalid) {\r\n yAxis.validate();\r\n }\r\n this.y = yAxis.pixelY;\r\n this.x = xAxis.pixelX;\r\n this._showBullets = true;\r\n var minBulletDistance = this.minBulletDistance;\r\n if ($type.isNumber(minBulletDistance)) {\r\n if (this.baseAxis.axisLength / (this.endIndex - this.startIndex) < minBulletDistance) {\r\n this._showBullets = false;\r\n }\r\n }\r\n }\r\n this.updateTooltip();\r\n if ((xAxis instanceof DateAxis && xAxis.groupData && !this.dataGrouped) || (yAxis instanceof DateAxis && yAxis.groupData && !this.dataGrouped)) {\r\n return;\r\n }\r\n _super.prototype.validate.call(this);\r\n var chart = this.chart;\r\n var maskBullets = this.maskBullets;\r\n if (chart && maskBullets) {\r\n if (chart.className == \"XYChart\") {\r\n if (chart.leftAxesContainer.layout == \"vertical\" || chart.rightAxesContainer.layout == \"vertical\") {\r\n if (this.yAxis) {\r\n this.bulletsContainer.mask = this.yAxis.renderer.gridContainer;\r\n }\r\n else {\r\n this.bulletsContainer.mask = undefined;\r\n }\r\n }\r\n if (chart.topAxesContainer.layout == \"horizontal\" || chart.bottomAxesContainer.layout == \"horizontal\") {\r\n if (this.xAxis) {\r\n this.bulletsContainer.mask = this.xAxis.renderer.gridContainer;\r\n }\r\n else {\r\n this.bulletsContainer.mask = undefined;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"xAxis\", {\r\n /**\r\n * @return Axis\r\n */\r\n get: function () {\r\n if (this.chart) {\r\n if (!this._xAxis.get()) {\r\n var axis = this.chart.xAxes.getIndex(0);\r\n if (!axis) {\r\n throw Error(\"There are no X axes on chart.\");\r\n }\r\n this.xAxis = axis;\r\n }\r\n return this._xAxis.get();\r\n }\r\n },\r\n /**\r\n * X axis the series is attached to.\r\n *\r\n * @param axis Axis\r\n */\r\n set: function (axis) {\r\n this.setXAxis(axis);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n XYSeries.prototype.setXAxis = function (axis) {\r\n var oldAxis = this._xAxis.get();\r\n if (oldAxis != axis) {\r\n if (oldAxis) {\r\n this.dataItemsByAxis.removeKey(oldAxis.uid);\r\n // TODO why is this here ?\r\n this._xAxis.dispose();\r\n // temp @todo: why it is not disposed?\r\n oldAxis.series.removeValue(this);\r\n }\r\n this._xAxis.set(axis, axis.registerSeries(this));\r\n this.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n this.invalidateData();\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"yAxis\", {\r\n /**\r\n * @return Axis\r\n */\r\n get: function () {\r\n if (this.chart) {\r\n if (!this._yAxis.get()) {\r\n var axis = this.chart.yAxes.getIndex(0);\r\n if (!axis) {\r\n throw Error(\"There are no Y axes on chart.\");\r\n }\r\n this.yAxis = axis;\r\n }\r\n return this._yAxis.get();\r\n }\r\n },\r\n /**\r\n * Y axis the series is attached to.\r\n *\r\n * @param axis Axis\r\n */\r\n set: function (axis) {\r\n this.setYAxis(axis);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n XYSeries.prototype.setYAxis = function (axis) {\r\n var oldAxis = this._yAxis.get();\r\n if (oldAxis != axis) {\r\n if (oldAxis) {\r\n this.dataItemsByAxis.removeKey(oldAxis.uid);\r\n // TODO why is this here ?\r\n this._yAxis.dispose();\r\n // temp @todo: why it is not disposed?\r\n oldAxis.series.removeValue(this);\r\n }\r\n this._yAxis.set(axis, axis.registerSeries(this));\r\n if (axis.chart instanceof XYChart) {\r\n axis.chart.handleYAxisSet(this);\r\n }\r\n this.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n this.invalidateData();\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"baseAxis\", {\r\n /**\r\n * @return Axis\r\n */\r\n get: function () {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (!this._baseAxis && xAxis && yAxis) {\r\n if (yAxis instanceof DateAxis) {\r\n this._baseAxis = yAxis;\r\n }\r\n if (xAxis instanceof DateAxis) {\r\n this._baseAxis = xAxis;\r\n }\r\n if (yAxis instanceof CategoryAxis) {\r\n this._baseAxis = yAxis;\r\n }\r\n if (xAxis instanceof CategoryAxis) {\r\n this._baseAxis = xAxis;\r\n }\r\n if (!this._baseAxis) {\r\n this._baseAxis = xAxis;\r\n }\r\n }\r\n return this._baseAxis;\r\n },\r\n /**\r\n * The main (base) axis.\r\n *\r\n * This is the axis that series fills will go to, or grow animations will\r\n * happen from.\r\n *\r\n * @param value Axis\r\n */\r\n set: function (value) {\r\n if (this._baseAxis != value) {\r\n this._baseAxis = value;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Adds one or several (array) of data items to the existing data.\r\n *\r\n * @param rawDataItem One or many raw data item objects\r\n */\r\n XYSeries.prototype.addData = function (rawDataItem, removeCount, skipRaw) {\r\n _super.prototype.addData.call(this, rawDataItem, removeCount, skipRaw);\r\n var scrollbarSeries = this.scrollbarSeries;\r\n if (scrollbarSeries) {\r\n this.scrollbarSeries.addData(rawDataItem, removeCount, true);\r\n this.scrollbarSeries._parseDataFrom = this._parseDataFrom;\r\n }\r\n };\r\n XYSeries.prototype.setData = function (value) {\r\n _super.prototype.setData.call(this, value);\r\n if (this.scrollbarSeries) {\r\n this.scrollbarSeries.setData(value);\r\n }\r\n };\r\n /**\r\n * Makes the chart use particular data set.\r\n *\r\n * If `id` is not provided or there is no such data set, main data will be\r\n * used.\r\n *\r\n * @ignore\r\n * @since 4.7.0\r\n * @param id Data set id\r\n */\r\n XYSeries.prototype.setDataSet = function (id) {\r\n var changed = _super.prototype.setDataSet.call(this, id);\r\n if (changed) {\r\n this._dataSetChanged = true;\r\n var dataItems = this.dataItems;\r\n this.resetExtremes();\r\n if (dataItems && dataItems.length > 0) {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n this._prevStartIndex = undefined;\r\n this._prevEndIndex = undefined;\r\n this._startIndex = undefined;\r\n this._endIndex = undefined;\r\n if (!this.appeared) {\r\n this.processValues(false); // this will slow down!\r\n }\r\n if (xAxis instanceof DateAxis && xAxis == this.baseAxis) {\r\n this._tmin.setKey(xAxis.uid, dataItems.getIndex(0).dateX.getTime());\r\n this._tmax.setKey(xAxis.uid, dataItems.getIndex(dataItems.length - 1).dateX.getTime());\r\n this.dispatch(\"extremeschanged\");\r\n }\r\n if (yAxis instanceof DateAxis && yAxis == this.baseAxis) {\r\n this._tmin.setKey(yAxis.uid, dataItems.getIndex(0).dateY.getTime());\r\n this._tmax.setKey(yAxis.uid, dataItems.getIndex(dataItems.length - 1).dateY.getTime());\r\n this.dispatch(\"extremeschanged\");\r\n }\r\n }\r\n }\r\n return changed;\r\n };\r\n /**\r\n * Processes values after data items' were added.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItems Data items\r\n */\r\n XYSeries.prototype.processValues = function (working) {\r\n _super.prototype.processValues.call(this, working);\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (!xAxis || !yAxis) {\r\n return;\r\n }\r\n var dataItems = this.dataItems;\r\n var minX = Infinity;\r\n var maxX = -Infinity;\r\n var minY = Infinity;\r\n var maxY = -Infinity;\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var workingStartIndex = startIndex;\r\n var workingEndIndex = endIndex;\r\n if (!working) {\r\n startIndex = 0;\r\n endIndex = this.dataItems.length;\r\n }\r\n for (var i = startIndex; i < endIndex; i++) {\r\n var dataItem = dataItems.getIndex(i);\r\n this.getStackValue(dataItem, working);\r\n var stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n var stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n minX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n minY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n maxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n maxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n // if it's stacked, pay attention to stack value\r\n if (this.stacked) {\r\n if (this.baseAxis == xAxis) {\r\n if (stackY < minY) {\r\n minY = stackY;\r\n }\r\n if (stackY > maxY) {\r\n maxY = stackY;\r\n }\r\n }\r\n if (this.baseAxis == yAxis) {\r\n if (stackX < minX) {\r\n minX = stackX;\r\n }\r\n if (stackX > maxX) {\r\n maxX = stackX;\r\n }\r\n }\r\n }\r\n }\r\n // this is mainly for value axis to calculate total and perecent.total of each series category\r\n xAxis.processSeriesDataItems();\r\n yAxis.processSeriesDataItems();\r\n var xAxisId = xAxis.uid;\r\n var yAxisId = yAxis.uid;\r\n if (this.xAxis instanceof ValueAxis && (minX == Infinity || maxX == -Infinity)) {\r\n this._smin.setKey(xAxisId, undefined);\r\n this._smax.setKey(xAxisId, undefined);\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n return;\r\n }\r\n if (this.yAxis instanceof ValueAxis && (minY == Infinity || maxY == -Infinity)) {\r\n this._smin.setKey(yAxisId, undefined);\r\n this._smax.setKey(yAxisId, undefined);\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n return;\r\n }\r\n if (!working) {\r\n if (this._tmin.getKey(xAxisId) != minX || this._tmax.getKey(xAxisId) != maxX || this._tmin.getKey(yAxisId) != minY || this._tmax.getKey(yAxisId) != maxY) {\r\n this._tmin.setKey(xAxisId, minX);\r\n this._tmax.setKey(xAxisId, maxX);\r\n this._tmin.setKey(yAxisId, minY);\r\n this._tmax.setKey(yAxisId, maxY);\r\n var stackedSeries = this.stackedSeries;\r\n if (stackedSeries) {\r\n if (stackedSeries.isDisposed()) {\r\n this.stackedSeries = undefined;\r\n }\r\n else {\r\n stackedSeries.processValues(false);\r\n }\r\n }\r\n this.dispatchImmediately(\"extremeschanged\");\r\n }\r\n }\r\n if (startIndex != workingStartIndex || endIndex != workingEndIndex) {\r\n minX = Infinity;\r\n maxX = -Infinity;\r\n minY = Infinity;\r\n maxY = -Infinity;\r\n for (var i = workingStartIndex; i < workingEndIndex; i++) {\r\n var dataItem = dataItems.getIndex(i);\r\n this.getStackValue(dataItem, working);\r\n var stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n var stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n minX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n minY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n maxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n maxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n // if it's stacked, pay attention to stack value\r\n if (this.stacked) {\r\n if (this.baseAxis == xAxis) {\r\n if (stackY < minY) {\r\n minY = stackY;\r\n }\r\n if (stackY > maxY) {\r\n maxY = stackY;\r\n }\r\n }\r\n if (this.baseAxis == yAxis) {\r\n if (stackX < minX) {\r\n minX = stackX;\r\n }\r\n if (stackX > maxX) {\r\n maxX = stackX;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this.xAxis instanceof ValueAxis && (minX == Infinity || maxX == -Infinity)) {\r\n this._smin.setKey(xAxisId, undefined);\r\n this._smax.setKey(xAxisId, undefined);\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n return;\r\n }\r\n if (this.yAxis instanceof ValueAxis && (minY == Infinity || maxY == -Infinity)) {\r\n this._smin.setKey(yAxisId, undefined);\r\n this._smax.setKey(yAxisId, undefined);\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n return;\r\n }\r\n if (this._smin.getKey(xAxisId) != minX || this._smax.getKey(xAxisId) != maxX || this._smin.getKey(yAxisId) != minY || this._smax.getKey(yAxisId) != maxY) {\r\n this._smin.setKey(xAxisId, minX);\r\n this._smax.setKey(xAxisId, maxX);\r\n this._smin.setKey(yAxisId, minY);\r\n this._smax.setKey(yAxisId, maxY);\r\n if (this.appeared || this.start != 0 || this.end != 1 || this.dataItems != this.mainDataSet) {\r\n /// new, helps to handle issues with change percent\r\n var changed = false;\r\n if (yAxis instanceof ValueAxis && !(yAxis instanceof DateAxis)) {\r\n var tmin = this._tmin.getKey(yAxisId);\r\n if (!$type.isNumber(tmin) || ((this.usesShowFields || this._dataSetChanged || (xAxis instanceof DateAxis && xAxis.groupData && this.isShowing)) && minY < tmin) || (this.stackedSeries && !this.isHidden)) {\r\n this._tmin.setKey(yAxisId, minY);\r\n changed = true;\r\n }\r\n var tmax = this._tmax.getKey(yAxisId);\r\n if (!$type.isNumber(tmax) || ((this.usesShowFields || this._dataSetChanged || (xAxis instanceof DateAxis && xAxis.groupData && this.isShowing)) && maxY > tmax) || (this.stackedSeries && !this.isHidden)) {\r\n this._tmax.setKey(yAxisId, maxY);\r\n changed = true;\r\n }\r\n }\r\n if (xAxis instanceof ValueAxis && !(xAxis instanceof DateAxis)) {\r\n var tmin = this._tmin.getKey(xAxisId);\r\n if (!$type.isNumber(tmin) || ((this.usesShowFields || this._dataSetChanged || (yAxis instanceof DateAxis && yAxis.groupData && this.isShowing)) && minX < tmin) || (this.stackedSeries && !this.isHidden)) {\r\n this._tmin.setKey(xAxisId, minX);\r\n changed = true;\r\n }\r\n var tmax = this._tmax.getKey(xAxisId);\r\n if (!$type.isNumber(tmax) || ((this.usesShowFields || this._dataSetChanged || (yAxis instanceof DateAxis && yAxis.groupData && this.isShowing)) && maxX > tmax) || (this.stackedSeries && !this.isHidden)) {\r\n this._tmax.setKey(xAxisId, maxX);\r\n changed = true;\r\n }\r\n }\r\n if (changed) {\r\n this.dispatchImmediately(\"extremeschanged\");\r\n }\r\n if (this.start == 0 && this.end == 1) {\r\n // yes, its ok. otherwise min/max won't be updated when zooming out\r\n this._dataSetChanged = false;\r\n }\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n }\r\n }\r\n if (!working && this.stacked) {\r\n this.processValues(true);\r\n }\r\n };\r\n /**\r\n * Hides element's [[Tooltip]].\r\n *\r\n * @see {@link Tooltip}\r\n */\r\n XYSeries.prototype.hideTooltip = function (duration) {\r\n _super.prototype.hideTooltip.call(this, duration);\r\n this.returnBulletDefaultState();\r\n this._prevTooltipDataItem = undefined;\r\n };\r\n /**\r\n * Shows series tooltip at specific position.\r\n *\r\n * @param xPosition X\r\n * @param yPosition Y\r\n */\r\n XYSeries.prototype.showTooltipAtPosition = function (xPosition, yPosition) {\r\n var dataItem;\r\n if (this.visible && !this.isHiding && !this.isShowing) {\r\n var xAxis = this._xAxis.get();\r\n var yAxis = this._yAxis.get();\r\n if (xAxis == this.baseAxis) {\r\n dataItem = xAxis.getSeriesDataItem(this, xAxis.toAxisPosition(xPosition), this.snapTooltip);\r\n }\r\n if (yAxis == this.baseAxis) {\r\n dataItem = yAxis.getSeriesDataItem(this, yAxis.toAxisPosition(yPosition), this.snapTooltip);\r\n }\r\n var point = this.showTooltipAtDataItem(dataItem);\r\n if (point) {\r\n return point;\r\n }\r\n // so that if tooltip is shown on columns or bullets for it not to be hidden\r\n if (!this.tooltipText && !this.tooltipHTML) {\r\n return;\r\n }\r\n }\r\n this.hideTooltip();\r\n };\r\n XYSeries.prototype.getAdjustedXLocation = function (dataItem, field, bulletLocationX) {\r\n return dataItem.locations[field];\r\n };\r\n XYSeries.prototype.getAdjustedYLocation = function (dataItem, field, bulletLocationY) {\r\n return dataItem.locations[field];\r\n };\r\n /**\r\n * Shows series tooltip at specific dataItem.\r\n *\r\n * @param dataItem\r\n */\r\n XYSeries.prototype.showTooltipAtDataItem = function (dataItem) {\r\n var e_1, _a;\r\n var cursor = this.chart.cursor;\r\n if (cursor && cursor.hideSeriesTooltipsOnSelection && cursor.selection.visible && cursor.downPoint) {\r\n this.hideTooltip();\r\n return;\r\n }\r\n this.returnBulletDefaultState(dataItem);\r\n if (dataItem && dataItem.visible) {\r\n this.updateLegendValue(dataItem);\r\n if (this.cursorTooltipEnabled) {\r\n this.tooltipDataItem = dataItem;\r\n // todo: add tooltipXField and tooltipYField.\r\n var tooltipXField = this.tooltipXField;\r\n var tooltipYField = this.tooltipYField;\r\n if ($type.hasValue(dataItem[tooltipXField]) && $type.hasValue(dataItem[tooltipYField])) {\r\n var tooltipPoint = this.getPoint(dataItem, tooltipXField, tooltipYField, this.getAdjustedXLocation(dataItem, tooltipXField), this.getAdjustedYLocation(dataItem, tooltipYField));\r\n if (tooltipPoint) {\r\n if (this.chart.className == \"XYChart\" && (tooltipPoint.y < -1 || tooltipPoint.y > this.yAxis.pixelHeight + 1 || tooltipPoint.x < -1 || tooltipPoint.x > this.xAxis.pixelWidth + 1)) {\r\n // void\r\n }\r\n else {\r\n this.tooltipX = tooltipPoint.x;\r\n this.tooltipY = tooltipPoint.y;\r\n if (this._prevTooltipDataItem != dataItem) {\r\n this.dispatchImmediately(\"tooltipshownat\", {\r\n type: \"tooltipshownat\",\r\n target: this,\r\n dataItem: dataItem\r\n });\r\n this._prevTooltipDataItem = dataItem;\r\n }\r\n if (this.cursorHoverEnabled) {\r\n try {\r\n for (var _b = __values(dataItem.sprites), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var sprite = _c.value;\r\n if (!sprite.parent.visible || sprite.isHidden || sprite.__disabled || sprite.disabled || sprite.isHiding) {\r\n }\r\n else {\r\n if (!sprite.interactions.isRealHover) {\r\n sprite.dispatchImmediately(\"over\");\r\n sprite.interactions.isRealHover = true;\r\n }\r\n sprite.isHover = true;\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n }\r\n if (this.showTooltip()) {\r\n return $utils.spritePointToSvg({ x: tooltipPoint.x, y: tooltipPoint.y }, this);\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n this.updateLegendValue(dataItem, true);\r\n }\r\n };\r\n /**\r\n * Returns default state to bullets when tooltip is shown at some other data\r\n * item or hidden\r\n */\r\n XYSeries.prototype.returnBulletDefaultState = function (dataItem) {\r\n var e_2, _a;\r\n if (this._prevTooltipDataItem && this._prevTooltipDataItem != dataItem) {\r\n try {\r\n for (var _b = __values(this._prevTooltipDataItem.sprites), _c = _b.next(); !_c.done; _c = _b.next()) {\r\n var sprite = _c.value;\r\n if (!sprite.isDisposed()) {\r\n var fireEvent = sprite.interactions.isRealHover;\r\n sprite.isHover = false;\r\n if (fireEvent) {\r\n sprite.dispatchImmediately(\"out\");\r\n }\r\n }\r\n else {\r\n this._prevTooltipDataItem = undefined;\r\n }\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n }\r\n };\r\n XYSeries.prototype.shouldCreateBullet = function (dataItem, bulletTemplate) {\r\n // use series xField/yField if bullet doesn't have fields set\r\n var xField = bulletTemplate.xField;\r\n if (!$type.hasValue(xField)) {\r\n xField = this.xField;\r\n }\r\n var yField = bulletTemplate.yField;\r\n if (!$type.hasValue(yField)) {\r\n yField = this.yField;\r\n }\r\n if ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n return false;\r\n }\r\n if (bulletTemplate.disabled) {\r\n var disabledField = bulletTemplate.propertyFields.disabled;\r\n var dataContext = dataItem.dataContext;\r\n if (dataContext && dataContext[disabledField] === false) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.updateTooltip = function () {\r\n if (!this.hideTooltipWhileZooming && this.tooltip && !this.tooltip.isHidden && !this.isHiding && !this.isHidden && this.tooltipDataItem) {\r\n this.showTooltipAtDataItem(this.tooltipDataItem);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYSeries.prototype.positionBullet = function (bullet) {\r\n _super.prototype.positionBullet.call(this, bullet);\r\n var dataItem = bullet.dataItem;\r\n // use series xField/yField if bullet doesn't have fields set\r\n var xField = bullet.xField;\r\n if (!$type.hasValue(xField)) {\r\n xField = this.xField;\r\n }\r\n var yField = bullet.yField;\r\n if (!$type.hasValue(yField)) {\r\n yField = this.yField;\r\n }\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if ((xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n bullet.visible = false;\r\n }\r\n else {\r\n var bulletLocationX = this.getBulletLocationX(bullet, xField);\r\n var bulletLocationY = this.getBulletLocationY(bullet, yField);\r\n var point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n if (point) {\r\n var xOpenField = this.xOpenField;\r\n var yOpenField = this.yOpenField;\r\n var positionX = void 0;\r\n var positionY = void 0;\r\n if (xAxis instanceof DateAxis) {\r\n if (!$type.isNumber(bulletLocationX)) {\r\n bulletLocationX = 0;\r\n }\r\n var openValue = void 0;\r\n var closeValue = dataItem.getWorkingValue(xField);\r\n if (!xOpenField) {\r\n if (xAxis == this.baseAxis) {\r\n openValue = xAxis.baseValue;\r\n }\r\n }\r\n else {\r\n openValue = dataItem.getWorkingValue(xOpenField);\r\n }\r\n if (!$type.isNumber(openValue)) {\r\n openValue = closeValue;\r\n }\r\n var stack = dataItem.getValue(\"valueX\", \"stack\");\r\n openValue += stack;\r\n closeValue += stack;\r\n if (openValue == closeValue) {\r\n var baseInterval = xAxis.baseInterval;\r\n var dateFormatter = xAxis.dateFormatter;\r\n openValue = $time.round(new Date(openValue), baseInterval.timeUnit, baseInterval.count, dateFormatter.firstDayOfWeek, dateFormatter.utc, undefined, dateFormatter.timezoneMinutes, dateFormatter.timezone).getTime();\r\n closeValue = $time.add(new Date(openValue), baseInterval.timeUnit, baseInterval.count, dateFormatter.utc).getTime();\r\n }\r\n var middleValue = void 0;\r\n if (xAxis == this.baseAxis) {\r\n middleValue = openValue + (closeValue - openValue) * bulletLocationX;\r\n }\r\n else {\r\n middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationX);\r\n }\r\n positionX = xAxis.valueToPosition(middleValue);\r\n }\r\n else if (xAxis instanceof ValueAxis) {\r\n if (!$type.isNumber(bulletLocationX)) {\r\n bulletLocationX = 0;\r\n }\r\n var openValue = void 0;\r\n var closeValue = dataItem.getWorkingValue(xField);\r\n if (!xOpenField) {\r\n openValue = xAxis.baseValue;\r\n }\r\n else {\r\n openValue = dataItem.getWorkingValue(xOpenField);\r\n }\r\n var stack = dataItem.getValue(\"valueX\", \"stack\");\r\n openValue += stack;\r\n closeValue += stack;\r\n var middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationX);\r\n positionX = xAxis.valueToPosition(middleValue);\r\n }\r\n else if (xAxis instanceof CategoryAxis) {\r\n var rightLocation = this.getAdjustedXLocation(dataItem, xField, bullet.locationX);\r\n var leftLocation = this.getAdjustedXLocation(dataItem, xOpenField, bullet.locationX);\r\n positionX = xAxis.categoryToPosition(dataItem[xField], rightLocation);\r\n var openPositionX = void 0;\r\n if (xOpenField) {\r\n openPositionX = xAxis.categoryToPosition(dataItem[xOpenField], leftLocation);\r\n }\r\n if (!$type.isNumber(openPositionX)) {\r\n openPositionX = 1;\r\n }\r\n positionX = openPositionX + (positionX - openPositionX) * bulletLocationX;\r\n }\r\n if (yAxis instanceof DateAxis) {\r\n if (!$type.isNumber(bulletLocationY)) {\r\n bulletLocationY = 0;\r\n }\r\n var openValue = void 0;\r\n var closeValue = dataItem.getWorkingValue(yField);\r\n if (!yOpenField) {\r\n if (yAxis == this.baseAxis) {\r\n openValue = yAxis.baseValue;\r\n }\r\n }\r\n else {\r\n openValue = dataItem.getWorkingValue(yOpenField);\r\n }\r\n if (!$type.isNumber(openValue)) {\r\n openValue = closeValue;\r\n }\r\n var stack = dataItem.getValue(\"valueY\", \"stack\");\r\n openValue += stack;\r\n closeValue += stack;\r\n if (openValue == closeValue) {\r\n var baseInterval = yAxis.baseInterval;\r\n var dateFormatter = yAxis.dateFormatter;\r\n openValue = $time.round(new Date(openValue), baseInterval.timeUnit, baseInterval.count, dateFormatter.firstDayOfWeek, dateFormatter.utc, undefined, dateFormatter.timezoneMinutes, dateFormatter.timezone).getTime();\r\n closeValue = $time.add(new Date(openValue), baseInterval.timeUnit, baseInterval.count, dateFormatter.utc).getTime();\r\n }\r\n var middleValue = void 0;\r\n if (yAxis == this.baseAxis) {\r\n middleValue = openValue + (closeValue - openValue) * bulletLocationY;\r\n }\r\n else {\r\n middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationY);\r\n }\r\n positionY = yAxis.valueToPosition(middleValue);\r\n }\r\n else if (yAxis instanceof ValueAxis) {\r\n if (!$type.isNumber(bulletLocationY)) {\r\n bulletLocationY = 0;\r\n }\r\n var openValue = void 0;\r\n var closeValue = dataItem.getWorkingValue(yField);\r\n if (!yOpenField) {\r\n openValue = yAxis.baseValue;\r\n }\r\n else {\r\n openValue = dataItem.getWorkingValue(yOpenField);\r\n }\r\n var stack = dataItem.getValue(\"valueY\", \"stack\");\r\n openValue += stack;\r\n closeValue += stack;\r\n var middleValue = openValue + (closeValue - openValue) * (1 - bulletLocationY);\r\n positionY = yAxis.valueToPosition(middleValue);\r\n }\r\n else if (yAxis instanceof CategoryAxis) {\r\n positionY = yAxis.categoryToPosition(dataItem[yField], bulletLocationY);\r\n var topLocation = this.getAdjustedYLocation(dataItem, yField, bullet.locationY);\r\n var bottomLocation = this.getAdjustedYLocation(dataItem, yOpenField, bullet.locationY);\r\n positionY = yAxis.categoryToPosition(dataItem[yField], topLocation);\r\n var openPositionY = void 0;\r\n if (yOpenField) {\r\n openPositionY = yAxis.categoryToPosition(dataItem[yOpenField], bottomLocation);\r\n }\r\n if (!$type.isNumber(openPositionY)) {\r\n openPositionY = 1;\r\n }\r\n positionY = openPositionY + (positionY - openPositionY) * bulletLocationY;\r\n }\r\n bullet.visible = true;\r\n this.positionBulletReal(bullet, positionX, positionY);\r\n }\r\n else {\r\n bullet.visible = false;\r\n }\r\n }\r\n };\r\n XYSeries.prototype.positionBulletReal = function (bullet, positionX, positionY) {\r\n bullet.x = this.xAxis.renderer.positionToPoint(positionX, positionY).x;\r\n bullet.y = this.yAxis.renderer.positionToPoint(positionY, positionX).y;\r\n };\r\n /**\r\n * returns bullet x location\r\n * @ignore\r\n */\r\n XYSeries.prototype.getBulletLocationX = function (bullet, field) {\r\n var bulletLocation = bullet.locationX;\r\n var dataItem = bullet.dataItem;\r\n if (!$type.isNumber(bulletLocation)) {\r\n bulletLocation = dataItem.workingLocations[field];\r\n }\r\n return bulletLocation;\r\n };\r\n /**\r\n * Returns bullet x location\r\n * @ignore\r\n */\r\n XYSeries.prototype.getBulletLocationY = function (bullet, field) {\r\n var bulletLocation = bullet.locationY;\r\n var dataItem = bullet.dataItem;\r\n if (!$type.isNumber(bulletLocation)) {\r\n bulletLocation = dataItem.workingLocations[field];\r\n }\r\n return bulletLocation;\r\n };\r\n /**\r\n * This method must be called if you update Series' data fields that might\r\n * affect stacking of the series.\r\n *\r\n * Since individual `dataField` changes are not being monitored, you need\r\n * todo it manually for changes to take affect.\r\n *\r\n * @since 4.7.21\r\n */\r\n XYSeries.prototype.updateStacking = function () {\r\n var _this = this;\r\n this.invalidateDataItems();\r\n if (this.chart) {\r\n this.chart.series.each(function (series) {\r\n if (series.baseAxis == _this.baseAxis) {\r\n series.stackedSeries = undefined;\r\n series.invalidateDataItems();\r\n series.invalidateProcessedData();\r\n }\r\n });\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"stacked\", {\r\n /**\r\n * @return Can be stacked?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"stacked\");\r\n },\r\n /**\r\n * Can items from this series be included into stacks?\r\n *\r\n * Note: proper stacking is only possible if series have the same number\r\n * of data items. To ensure this, don't set data directly on series\r\n * but do this on chart instead.\r\n *\r\n * @default false\r\n * @param stacked Can be stacked?\r\n */\r\n set: function (stacked) {\r\n if (this.setPropertyValue(\"stacked\", stacked, true)) {\r\n this.updateStacking();\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (!stacked) {\r\n var field_1;\r\n if (xAxis != this.baseAxis && xAxis instanceof ValueAxis) {\r\n field_1 = this.xField;\r\n }\r\n if (yAxis != this.baseAxis && yAxis instanceof ValueAxis) {\r\n field_1 = this.yField;\r\n }\r\n if (field_1) {\r\n this.dataItems.each(function (dataItem) {\r\n dataItem.setCalculatedValue(field_1, 0, \"stack\");\r\n });\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"snapTooltip\", {\r\n /**\r\n * @return Should snap?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"snapTooltip\");\r\n },\r\n /**\r\n * Should the nearest tooltip be shown if no data item is found on the\r\n * current cursor position? In order this to work, you should set snapTooltip = false on the series baseAxis.\r\n *\r\n * @default false\r\n * @param value Should snap?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"snapTooltip\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Shows hidden series.\r\n *\r\n * @param duration Duration of reveal animation (ms)\r\n * @return Animation\r\n */\r\n XYSeries.prototype.show = function (duration) {\r\n var _this = this;\r\n if (this.isHidden) {\r\n if (this.appeared && this.xAxis instanceof DateAxis && this.xAxis.groupData) {\r\n this._tmin.setKey(this.yAxis.uid, undefined);\r\n this._tmax.setKey(this.yAxis.uid, undefined);\r\n }\r\n if (this.appeared && this.yAxis instanceof DateAxis && this.yAxis.groupData) {\r\n this._tmin.setKey(this.xAxis.uid, undefined);\r\n this._tmax.setKey(this.xAxis.uid, undefined);\r\n }\r\n }\r\n var fields;\r\n if (this.xAxis instanceof ValueAxis && this.xAxis != this.baseAxis) {\r\n fields = this._xValueFields;\r\n }\r\n if (this.yAxis instanceof ValueAxis && this.yAxis != this.baseAxis) {\r\n fields = this._yValueFields;\r\n }\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var delay = 0;\r\n var interpolationDuration = this.defaultState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n if (!options.animationsEnabled) {\r\n interpolationDuration = 0;\r\n }\r\n var anim;\r\n $iter.each($iter.indexed(this.dataItems.iterator()), function (a) {\r\n var i = a[0];\r\n var dataItem = a[1];\r\n var realDuration = interpolationDuration;\r\n if (i < _this.startIndex - 10 || i > _this.endIndex + 10) {\r\n realDuration = 0;\r\n delay = 0;\r\n }\r\n if (_this.sequencedInterpolation && realDuration > 0) {\r\n delay = _this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n }\r\n anim = dataItem.show(realDuration, delay, fields);\r\n });\r\n // other data sets\r\n this.dataSets.each(function (key, dataSet) {\r\n if (dataSet != _this.dataItems) {\r\n dataSet.each(function (dataItem) {\r\n dataItem.events.disable();\r\n dataItem.show(0, 0, fields);\r\n dataItem.events.enable();\r\n });\r\n }\r\n });\r\n if (this.mainDataSet != this.dataItems) {\r\n this.mainDataSet.each(function (dataItem) {\r\n dataItem.events.disable();\r\n dataItem.show(0, 0, fields);\r\n dataItem.events.enable();\r\n });\r\n }\r\n var animation = _super.prototype.show.call(this, duration);\r\n if (anim && !anim.isFinished()) {\r\n animation = anim;\r\n }\r\n if (this.hidden) {\r\n this.dispatchImmediately(\"selectionextremeschanged\");\r\n this.hidden = false;\r\n }\r\n return animation;\r\n };\r\n /**\r\n * Hides series.\r\n *\r\n * @param duration Duration of hiding animation (ms)\r\n * @return Animation\r\n */\r\n XYSeries.prototype.hide = function (duration) {\r\n var _this = this;\r\n var fields;\r\n var value;\r\n var xAxis = this.xAxis;\r\n if (xAxis instanceof ValueAxis && xAxis != this.baseAxis) {\r\n fields = this._xValueFields;\r\n // animate to zero if 0 is within zoomMin/zoomMax\r\n if (this.stacked || (xAxis.minZoomed < xAxis.baseValue && xAxis.maxZoomed > xAxis.baseValue) || this.stackedSeries) {\r\n value = xAxis.baseValue;\r\n }\r\n else {\r\n value = xAxis.min;\r\n }\r\n }\r\n var yAxis = this.yAxis;\r\n if (yAxis instanceof ValueAxis && yAxis != this.baseAxis) {\r\n fields = this._yValueFields;\r\n // animate to zero if 0 is within zoomMin/zoomMax\r\n if (this.stacked || (yAxis.minZoomed < yAxis.baseValue && yAxis.maxZoomed > yAxis.baseValue) || this.stackedSeries) {\r\n value = yAxis.baseValue;\r\n }\r\n else {\r\n value = yAxis.min;\r\n }\r\n }\r\n //if ($type.hasValue(fields)) {\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var interpolationDuration = this.hiddenState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n if (!options.animationsEnabled) {\r\n interpolationDuration = 0;\r\n }\r\n var delay = 0;\r\n var anim;\r\n $iter.each($iter.indexed(this.dataItems.iterator()), function (a) {\r\n var i = a[0];\r\n var dataItem = a[1];\r\n var realDuration = interpolationDuration;\r\n if (i < _this.startIndex - 10 || i > _this.endIndex + 10) {\r\n realDuration = 0;\r\n }\r\n if (realDuration == 0) {\r\n dataItem.hide(0, 0, value, fields);\r\n }\r\n else {\r\n if (_this.sequencedInterpolation && realDuration > 0) {\r\n delay = _this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n }\r\n anim = dataItem.hide(realDuration, delay, value, fields);\r\n }\r\n });\r\n // other data sets\r\n this.dataSets.each(function (key, dataSet) {\r\n if (dataSet != _this.dataItems) {\r\n dataSet.each(function (dataItem) {\r\n dataItem.events.disable();\r\n dataItem.hide(0, 0, value, fields);\r\n dataItem.events.enable();\r\n });\r\n }\r\n });\r\n if (this.mainDataSet != this.dataItems) {\r\n this.mainDataSet.each(function (dataItem) {\r\n dataItem.events.disable();\r\n dataItem.hide(0, 0, value, fields);\r\n dataItem.events.enable();\r\n });\r\n }\r\n var animation = _super.prototype.hide.call(this, interpolationDuration);\r\n if (animation && !animation.isFinished()) {\r\n animation.delay(delay);\r\n }\r\n if (anim && !anim.isFinished()) {\r\n animation = anim;\r\n }\r\n // helps to avoid flicker. otherwise columns will show up at full size and only on next frame will animate from 0\r\n this.validateDataElements();\r\n //}\r\n return animation;\r\n };\r\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYSeries.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {\r\n _super.prototype.handleDataItemWorkingValueChange.call(this, dataItem, name);\r\n // to calculate stack values\r\n var axisSeries = this.baseAxis.series;\r\n $iter.each(axisSeries.iterator(), function (series) {\r\n if (series.stacked || series.stackedSeries) {\r\n series.invalidateProcessedData();\r\n }\r\n });\r\n };\r\n /**\r\n * [getStackValue description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param dataItem Data item\r\n */\r\n XYSeries.prototype.getStackValue = function (dataItem, working) {\r\n // todo: here wer stack x and y values only. question is - what should we do with other values, like openX, openY?\r\n // if this series is not stacked or new stack begins, return.\r\n var _this = this;\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (!this.stacked || !xAxis || !yAxis) {\r\n return;\r\n }\r\n else {\r\n // 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 var chart = this.chart;\r\n var index = chart.series.indexOf(this);\r\n var field_2;\r\n if (xAxis != this.baseAxis && xAxis instanceof ValueAxis) {\r\n field_2 = this.xField;\r\n }\r\n if (yAxis != this.baseAxis && yAxis instanceof ValueAxis) {\r\n field_2 = this.yField;\r\n }\r\n if (!field_2) {\r\n return;\r\n }\r\n //this is good for removing series, otherwise stack values will remain the same and chart won't pay atention when adding/removing series\t\t\t\r\n dataItem.setCalculatedValue(field_2, 0, \"stack\");\r\n $iter.eachContinue(chart.series.range(0, index).backwards().iterator(), function (prevSeries) {\r\n // stacking is only possible if both axes are the same\r\n if (prevSeries.xAxis == xAxis && prevSeries.yAxis == yAxis && prevSeries.className == _this.className) {\r\n // saving value\r\n prevSeries.stackedSeries = _this;\r\n var prevDataItem = prevSeries.dataItems.getIndex(dataItem.index); // indexes should match\r\n if (prevDataItem && prevDataItem.hasValue(_this._xValueFields) && prevDataItem.hasValue(_this._yValueFields)) {\r\n var value = dataItem.getValue(field_2);\r\n var prevValue = void 0;\r\n var prevRealValue = prevDataItem.getValue(field_2) + prevDataItem.getValue(field_2, \"stack\");\r\n if (working) {\r\n prevValue = prevDataItem.getWorkingValue(field_2) + prevDataItem.getValue(field_2, \"stack\");\r\n }\r\n else {\r\n prevValue = prevDataItem.getValue(field_2) + prevDataItem.getValue(field_2, \"stack\");\r\n }\r\n if (_this.stackToNegative) {\r\n if ((value >= 0 && prevRealValue >= 0) || (value < 0 && prevRealValue < 0)) {\r\n dataItem.setCalculatedValue(field_2, prevValue, \"stack\");\r\n return false;\r\n }\r\n else if (!prevSeries.stacked) {\r\n return false;\r\n }\r\n }\r\n else {\r\n dataItem.setCalculatedValue(field_2, prevValue, \"stack\");\r\n return false;\r\n }\r\n }\r\n else if (!prevSeries.stacked) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n });\r\n }\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"stackToNegative\", {\r\n /**\r\n * @return Stack to base line\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"stackToNegative\");\r\n },\r\n /**\r\n * This setting indicates how negative values are treated in stacked stacked\r\n * series.\r\n *\r\n * If set to `true` (default), negative values will stack on the base line.\r\n *\r\n * If set to `false`, negative value will stack in relation to the previous\r\n * value in the stack.\r\n *\r\n * @since 4.9.34\r\n * @param value Stack to base line\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"stackToNegative\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"xField\", {\r\n /**\r\n * [xField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._xField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"yField\", {\r\n /**\r\n * [yField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._yField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"xOpenField\", {\r\n /**\r\n * [xOpenField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._xOpenField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"yOpenField\", {\r\n /**\r\n * [yOpenField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this._yOpenField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"tooltipXField\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n if (this._tooltipXField) {\r\n return this._tooltipXField;\r\n }\r\n return this._xField;\r\n },\r\n /**\r\n * [tooltipXField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this._tooltipXField = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"tooltipYField\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\n get: function () {\r\n if (this._tooltipYField) {\r\n return this._tooltipYField;\r\n }\r\n return this._yField;\r\n },\r\n /**\r\n * [tooltipYField description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this._tooltipYField = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns lowest value in the series for the specific axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n * @return value\r\n */\r\n XYSeries.prototype.min = function (axis) {\r\n return this._tmin.getKey(axis.uid);\r\n };\r\n /**\r\n * Returns highest value in the series for the specific axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n * @return value\r\n */\r\n XYSeries.prototype.max = function (axis) {\r\n return this._tmax.getKey(axis.uid);\r\n };\r\n /**\r\n * Returns lowest value in the series for the specific axis within current\r\n * selection.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n * @return value\r\n */\r\n XYSeries.prototype.selectionMin = function (axis) {\r\n var value = this._smin.getKey(axis.uid);\r\n // not good, because bad if there are no items with values in selection\r\n //if (!$type.isNumber(value)) {\r\n //value = this.min(axis);\r\n //}\t\t\r\n return value;\r\n };\r\n /**\r\n * Returns highest value in the series for the specific axis within current\r\n * selection.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n * @return value\r\n */\r\n XYSeries.prototype.selectionMax = function (axis) {\r\n var value = this._smax.getKey(axis.uid);\r\n // not good, because bad if there are no items with values in selection\r\n //if (!$type.isNumber(value)) {\r\n //value = this.max(axis);\r\n //}\r\n return value;\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n XYSeries.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up base axes\r\n if ($type.hasValue(config.baseAxis) && $type.isString(config.baseAxis)) {\r\n if (this.map.hasKey(config.baseAxis)) {\r\n config.baseAxis = this.map.getKey(config.baseAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.baseAxis + \"\\\" found for `baseAxis`.\");\r\n delete config.baseAxis;\r\n }\r\n }\r\n // Set up axes\r\n if ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n if (this.map.hasKey(config.xAxis)) {\r\n config.xAxis = this.map.getKey(config.xAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`.\");\r\n delete config.xAxis;\r\n }\r\n }\r\n if ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n if (this.map.hasKey(config.yAxis)) {\r\n config.yAxis = this.map.getKey(config.yAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`.\");\r\n delete config.yAxis;\r\n }\r\n }\r\n // Set up axis ranges\r\n if ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\r\n for (var i = 0, len = config.axisRanges.length; i < len; i++) {\r\n var range = config.axisRanges[i];\r\n if (!$type.hasValue(range.type)) {\r\n range.type = \"AxisDataItem\";\r\n }\r\n if ($type.hasValue(range.axis) && $type.isString(range.axis) && this.map.hasKey(range.axis)) {\r\n range.component = this.map.getKey(range.axis);\r\n }\r\n else if ($type.hasValue(range.component) && $type.isString(range.component) && this.map.hasKey(range.component)) {\r\n range.component = this.map.getKey(range.component);\r\n }\r\n }\r\n }\r\n // Parse date fields based on the series fields\r\n if (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n this.processingErrors.push(\"`dataFields` is not set for series [\" + (this.name || \"unnamed\") + \"]\");\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n *\r\n * @param dataItem Data item\r\n * @param xKey Name of X data field\r\n * @param yKey Name of Y data field\r\n * @param locationX X location\r\n * @param locationY Y location\r\n * @param stackKeyX ?\r\n * @param stackKeyY ?\r\n * @returns Coordinates\r\n */\r\n XYSeries.prototype.getPoint = function (dataItem, xKey, yKey, locationX, locationY, stackKeyX, stackKeyY) {\r\n if (this.xAxis && this.yAxis) {\r\n var x = this.xAxis.getX(dataItem, xKey, locationX);\r\n var y = this.yAxis.getY(dataItem, yKey, locationY);\r\n x = $math.fitToRange(x, -this._maxxX, this._maxxX); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n y = $math.fitToRange(y, -this._maxxY, this._maxxY); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n return { x: x, y: y };\r\n }\r\n };\r\n /**\r\n * Updates item reader text based on the type and set up of axis.\r\n */\r\n XYSeries.prototype.updateItemReaderText = function () {\r\n // We do not want to overwrite this if `itemReaderText` was changed by\r\n // user code.\r\n if (this._itemReaderTextChanged) {\r\n return;\r\n }\r\n var text = \"\";\r\n $object.each(this.dataFields, function (key, val) {\r\n text += \"{\" + key + \"} \";\r\n });\r\n this.itemReaderText = text;\r\n this._itemReaderTextChanged = false;\r\n };\r\n Object.defineProperty(XYSeries.prototype, \"cursorTooltipEnabled\", {\r\n /**\r\n * @return Display tooltip?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cursorTooltipEnabled\");\r\n },\r\n /**\r\n * Indicates if series should display a tooltip for chart's cursor.\r\n *\r\n * If set to `true` (default), the tooltips set for all series item's\r\n * elements like columns and bullets will be automatically shown\r\n * when [[XYCursor]] passes over category/date, even if its not hovered\r\n * directly over the item.\r\n *\r\n * Set this to `false` to disable such behavior and display item-specific\r\n * tooltips only when hovered directly over them\r\n *\r\n * @default true\r\n * @param value Display tooltip?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cursorTooltipEnabled\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"cursorHoverEnabled\", {\r\n /**\r\n * @return Hover enabled?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cursorHoverEnabled\");\r\n },\r\n /**\r\n * Indicates if series should apply hover state on bullets/columns/etc when\r\n * cursor is over the data item.\r\n *\r\n * If set to `true` (default) and chart cursor is enabled on th chart,\r\n * hovering over date/category will trigger hover states on related Series\r\n * items like bullets and columns.\r\n *\r\n * @default true\r\n * @since 4.2.2\r\n * @param value Hover enabled?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cursorHoverEnabled\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"excludeFromTotal\", {\r\n /**\r\n * @return Exclude from totals?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"excludeFromTotal\");\r\n },\r\n /**\r\n * Indicates if series' values should be excluded when calculating totals.\r\n *\r\n * @default false\r\n * @since 4.4.9\r\n * @param value Exclude from totals?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"excludeFromTotal\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"hideTooltipWhileZooming\", {\r\n /**\r\n * @return Hide tooltip while zooming?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"hideTooltipWhileZooming\");\r\n },\r\n /**\r\n * Indicates if series' tooltip should be hidden while series axis range is\r\n * animating (zooming).\r\n *\r\n * @default true\r\n * @since 4.7.16\r\n * @param value Hide tooltip while zooming?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"hideTooltipWhileZooming\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYSeries.prototype, \"maskBullets\", {\r\n /**\r\n * @return Mask bullets?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maskBullets\");\r\n },\r\n /**\r\n * Indicates if series' bullets should be masked.\r\n *\r\n * @default true\r\n * @since 4.7.17\r\n * @param value Mask bullets?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maskBullets\", value);\r\n var chart = this.chart;\r\n if (chart) {\r\n if (value) {\r\n this.bulletsContainer.parent = chart.bulletsContainer;\r\n }\r\n else {\r\n this.bulletsContainer.parent = chart.axisBulletsContainer;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all properties from another instance of [[Series]].\r\n *\r\n * @param source Source series\r\n */\r\n XYSeries.prototype.copyFrom = function (source) {\r\n this.groupFields = $utils.copyProperties(source.groupFields, {});\r\n _super.prototype.copyFrom.call(this, source);\r\n };\r\n /**\r\n * Destroys this object and all related data.\r\n */\r\n XYSeries.prototype.dispose = function () {\r\n if (this.scrollbarSeries) {\r\n this.scrollbarSeries.dispose();\r\n }\r\n _super.prototype.dispose.call(this);\r\n };\r\n return XYSeries;\r\n}(Series));\r\nexport { XYSeries };\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//# sourceMappingURL=XYSeries.js.map","/**\r\n * A module with functionality for buildin a scrollbar with an XY graph in it.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Scrollbar } from \"../../core/elements/Scrollbar\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DesaturateFilter } from \"../../core/rendering/filters/DesaturateFilter\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { options } from \"../../core/Options\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar XYChartScrollbar = /** @class */ (function (_super) {\r\n __extends(XYChartScrollbar, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYChartScrollbar() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A chart element Scrollbar is for.\r\n */\r\n _this._chart = new MutableValueDisposer();\r\n _this.className = \"XYChartScrollbar\";\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.padding(0, 0, 0, 0);\r\n var scrollbarChart = _this.createChild(XYChart);\r\n scrollbarChart.shouldClone = false;\r\n scrollbarChart.margin(0, 0, 0, 0);\r\n scrollbarChart.padding(0, 0, 0, 0);\r\n scrollbarChart.interactionsEnabled = false;\r\n _this._scrollbarChart = scrollbarChart;\r\n if (!$utils.isIE()) {\r\n var filter = new DesaturateFilter();\r\n filter.filterUnits = \"userSpaceOnUse\";\r\n scrollbarChart.plotContainer.filters.push(filter);\r\n }\r\n _this._disposers.push(_this._scrollbarChart);\r\n _this.minHeight = 60;\r\n _this.minWidth = 60;\r\n var unselectedOverlay = _this.createChild(Sprite);\r\n unselectedOverlay.shouldClone = false;\r\n unselectedOverlay.setElement(_this.paper.add(\"path\"));\r\n unselectedOverlay.fill = interfaceColors.getFor(\"background\");\r\n unselectedOverlay.fillOpacity = 0.8;\r\n unselectedOverlay.interactionsEnabled = false;\r\n unselectedOverlay.isMeasured = false;\r\n unselectedOverlay.toBack();\r\n _this._unselectedOverlay = unselectedOverlay;\r\n _this._disposers.push(_this._unselectedOverlay);\r\n scrollbarChart.toBack();\r\n _this.background.cornerRadius(0, 0, 0, 0);\r\n var thumbBackground = _this.thumb.background;\r\n thumbBackground.cornerRadius(0, 0, 0, 0);\r\n thumbBackground.fillOpacity = 0;\r\n thumbBackground.fill = interfaceColors.getFor(\"background\");\r\n var hoverState = thumbBackground.states.getKey(\"hover\");\r\n if (hoverState) {\r\n hoverState.properties.fillOpacity = 0.2;\r\n }\r\n var downState = thumbBackground.states.getKey(\"down\");\r\n if (downState) {\r\n downState.properties.fillOpacity = 0.4;\r\n }\r\n _this._disposers.push(_this._chart);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(XYChartScrollbar.prototype, \"series\", {\r\n /**\r\n * A list of series that are used to draw graph(s) on the scrollbar.\r\n *\r\n * @readonly\r\n * @return Series\r\n */\r\n get: function () {\r\n if (!this._series) {\r\n this._series = new List();\r\n this._disposers.push(this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false));\r\n this._disposers.push(this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false));\r\n }\r\n return this._series;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Decorates a new series when they are pushed into a `series` list.\r\n *\r\n * @param event Event\r\n */\r\n XYChartScrollbar.prototype.handleSeriesAdded = function (event) {\r\n var _this = this;\r\n var sourceSeries = event.newValue;\r\n if (!sourceSeries.xAxis || !sourceSeries.yAxis) {\r\n return;\r\n }\r\n var scrollbarChart = this.scrollbarChart;\r\n scrollbarChart.zoomOutButton.disabled = true;\r\n this.chart = sourceSeries.chart;\r\n scrollbarChart.dateFormatter.inputDateFormat = this.chart.dateFormatter.inputDateFormat;\r\n // Ensure that scrollbar chart shares the same locale as parent chart\r\n scrollbarChart.language.locale = this.chart.language.locale;\r\n var addXAxis = true;\r\n var addYAxis = true;\r\n // check if we haven't added clone of x or y axis before\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (series != sourceSeries) {\r\n if (series.xAxis == sourceSeries.xAxis && _this.scrollbarChart.xAxes.length > 0) {\r\n addXAxis = false;\r\n }\r\n if (series.yAxis == sourceSeries.yAxis && _this.scrollbarChart.yAxes.length > 0) {\r\n addYAxis = false;\r\n }\r\n }\r\n });\r\n sourceSeries.events.on(\"beforedisposed\", function () {\r\n _this.series.removeValue(sourceSeries);\r\n });\r\n var interfaceColors = new InterfaceColorSet();\r\n var series = sourceSeries.clone();\r\n if (options.onlyShowOnViewport || options.queue) {\r\n this.addDisposer(this.chart.events.on(\"removedfromqueue\", function () {\r\n scrollbarChart.invalidateData();\r\n }));\r\n }\r\n if ($utils.isIE()) {\r\n series.stroke = color(\"#aaaaaa\");\r\n series.fill = series.stroke;\r\n series.propertyFields.fill = undefined;\r\n series.propertyFields.stroke = undefined;\r\n }\r\n sourceSeries.scrollbarSeries = series;\r\n if (addXAxis) {\r\n var xAxis = sourceSeries.xAxis.clone();\r\n scrollbarChart.xAxes.moveValue(xAxis);\r\n xAxis.title.disabled = true;\r\n xAxis.rangeChangeDuration = 0;\r\n //xAxis.id = sourceSeries.uid;\r\n var renderer = xAxis.renderer;\r\n renderer.ticks.template.disabled = true;\r\n renderer.inside = true;\r\n renderer.labels.template.inside = true;\r\n renderer.line.strokeOpacity = 0;\r\n renderer.minLabelPosition = 0.02;\r\n renderer.maxLabelPosition = 0.98;\r\n renderer.line.disabled = true;\r\n renderer.axisFills.template.disabled = true;\r\n renderer.baseGrid.disabled = true;\r\n renderer.grid.template.strokeOpacity = 0.05;\r\n renderer.minWidth = undefined;\r\n renderer.minHeight = undefined;\r\n renderer.padding(0, 0, 0, 0);\r\n renderer.chart = scrollbarChart;\r\n renderer.margin(0, 0, 0, 0);\r\n xAxis.width = percent(100);\r\n var labelsTemplate = renderer.labels.template;\r\n labelsTemplate.fillOpacity = 0.5;\r\n xAxis.maxZoomCount = undefined;\r\n xAxis.minZoomCount = undefined;\r\n if (xAxis instanceof DateAxis) {\r\n var vAxis_1 = xAxis;\r\n var sourceAxis = sourceSeries.xAxis;\r\n vAxis_1.groupCount = sourceAxis.groupCount * 5;\r\n vAxis_1.min = undefined;\r\n vAxis_1.max = undefined;\r\n this._disposers.push(vAxis_1.clonedFrom.events.on(\"extremeschanged\", function () {\r\n if ($type.isNumber(vAxis_1.clonedFrom.minDefined)) {\r\n vAxis_1.min = vAxis_1.clonedFrom.minDefined;\r\n }\r\n if ($type.isNumber(vAxis_1.clonedFrom.maxDefined)) {\r\n vAxis_1.max = vAxis_1.clonedFrom.maxDefined;\r\n }\r\n }, undefined, false));\r\n }\r\n else if (xAxis instanceof ValueAxis) {\r\n var vAxis_2 = xAxis;\r\n vAxis_2.min = undefined;\r\n vAxis_2.max = undefined;\r\n if (!$type.isNumber(vAxis_2.clonedFrom.minDefined)) {\r\n vAxis_2.min = undefined;\r\n }\r\n if (!$type.isNumber(vAxis_2.clonedFrom.maxDefined)) {\r\n vAxis_2.max = undefined;\r\n }\r\n this._disposers.push(vAxis_2.clonedFrom.events.on(\"extremeschanged\", function () {\r\n if ($type.isNumber(vAxis_2.clonedFrom.minDefined)) {\r\n vAxis_2.min = vAxis_2.clonedFrom.min;\r\n }\r\n if ($type.isNumber(vAxis_2.clonedFrom.maxDefined)) {\r\n vAxis_2.max = vAxis_2.clonedFrom.max;\r\n }\r\n }, undefined, false));\r\n }\r\n series.xAxis = xAxis;\r\n }\r\n else {\r\n this.scrollbarChart.xAxes.each(function (xAxis) {\r\n if (xAxis.clonedFrom == sourceSeries.xAxis) {\r\n series.xAxis = xAxis;\r\n }\r\n });\r\n }\r\n if (addYAxis) {\r\n var yAxis = sourceSeries.yAxis.clone();\r\n scrollbarChart.yAxes.moveValue(yAxis);\r\n yAxis.title.disabled = true;\r\n yAxis.rangeChangeDuration = 0;\r\n var renderer = yAxis.renderer;\r\n renderer.ticks.template.disabled = true;\r\n renderer.inside = true;\r\n renderer.labels.template.inside = true;\r\n renderer.line.strokeOpacity = 0;\r\n renderer.minLabelPosition = 0.02;\r\n renderer.maxLabelPosition = 0.98;\r\n renderer.line.disabled = true;\r\n renderer.axisFills.template.disabled = true;\r\n renderer.grid.template.stroke = interfaceColors.getFor(\"background\");\r\n renderer.baseGrid.disabled = true;\r\n renderer.grid.template.strokeOpacity = 0.05;\r\n renderer.minWidth = undefined;\r\n renderer.minHeight = undefined;\r\n renderer.chart = scrollbarChart;\r\n renderer.padding(0, 0, 0, 0);\r\n renderer.margin(0, 0, 0, 0);\r\n yAxis.height = percent(100);\r\n var labelsTemplate = renderer.labels.template;\r\n labelsTemplate.fillOpacity = 0.5;\r\n series.yAxis = yAxis;\r\n yAxis.maxZoomCount = undefined;\r\n yAxis.minZoomCount = undefined;\r\n if (yAxis instanceof DateAxis) {\r\n var vAxis_3 = yAxis;\r\n vAxis_3.min = undefined;\r\n vAxis_3.max = undefined;\r\n var sourceAxis = sourceSeries.yAxis;\r\n yAxis.groupCount = sourceAxis.groupCount * 5;\r\n this._disposers.push(vAxis_3.clonedFrom.events.on(\"extremeschanged\", function () {\r\n if ($type.isNumber(vAxis_3.clonedFrom.minDefined)) {\r\n vAxis_3.min = vAxis_3.clonedFrom.minDefined;\r\n }\r\n if ($type.isNumber(vAxis_3.clonedFrom.maxDefined)) {\r\n vAxis_3.max = vAxis_3.clonedFrom.maxDefined;\r\n }\r\n }));\r\n }\r\n else if (yAxis instanceof ValueAxis) {\r\n var vAxis_4 = yAxis;\r\n vAxis_4.min = undefined;\r\n vAxis_4.max = undefined;\r\n if (!$type.isNumber(vAxis_4.clonedFrom.minDefined)) {\r\n vAxis_4.min = undefined;\r\n }\r\n if (!$type.isNumber(vAxis_4.clonedFrom.maxDefined)) {\r\n vAxis_4.max = undefined;\r\n }\r\n this._disposers.push(vAxis_4.clonedFrom.events.on(\"extremeschanged\", function () {\r\n if ($type.isNumber(vAxis_4.clonedFrom.minDefined)) {\r\n vAxis_4.min = vAxis_4.clonedFrom.minDefined;\r\n }\r\n if ($type.isNumber(vAxis_4.clonedFrom.maxDefined)) {\r\n vAxis_4.max = vAxis_4.clonedFrom.maxDefined;\r\n }\r\n }));\r\n }\r\n }\r\n else {\r\n this.scrollbarChart.yAxes.each(function (yAxis) {\r\n if (yAxis.clonedFrom == sourceSeries.yAxis) {\r\n series.yAxis = yAxis;\r\n }\r\n });\r\n }\r\n series.rangeChangeDuration = 0;\r\n series.interpolationDuration = 0;\r\n series.defaultState.transitionDuration = 0;\r\n series.showOnInit = false;\r\n this._disposers.push(series.events.on(\"validated\", this.zoomOutAxes, this, false));\r\n // data might be set drectly on series\r\n this._disposers.push(sourceSeries.events.on(\"datavalidated\", function () {\r\n if (series.data != sourceSeries.data) { // data setter doesn't check this\r\n series.data = sourceSeries.data;\r\n }\r\n }, undefined, false));\r\n series.defaultState.properties.visible = true;\r\n scrollbarChart.series.push(series);\r\n this.updateByOrientation();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChartScrollbar.prototype.updateByOrientation = function () {\r\n var _this = this;\r\n if (this._scrollbarChart) {\r\n $iter.each(this._scrollbarChart.xAxes.iterator(), function (xAxis) {\r\n var renderer = xAxis.renderer;\r\n if (_this.orientation == \"vertical\") {\r\n renderer.grid.template.disabled = true;\r\n renderer.labels.template.disabled = true;\r\n renderer.minGridDistance = 10;\r\n }\r\n else {\r\n renderer.grid.template.disabled = false;\r\n renderer.labels.template.disabled = false;\r\n renderer.minGridDistance = xAxis.clonedFrom.renderer.minGridDistance;\r\n }\r\n });\r\n $iter.each(this._scrollbarChart.yAxes.iterator(), function (yAxis) {\r\n var renderer = yAxis.renderer;\r\n if (_this.orientation == \"horizontal\") {\r\n renderer.grid.template.disabled = true;\r\n renderer.labels.template.disabled = true;\r\n renderer.minGridDistance = 10;\r\n }\r\n else {\r\n renderer.grid.template.disabled = false;\r\n renderer.labels.template.disabled = false;\r\n renderer.minGridDistance = yAxis.clonedFrom.renderer.minGridDistance;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Cleans up after series are removed from Scrollbar.\r\n *\r\n * @param event Event\r\n */\r\n XYChartScrollbar.prototype.handleSeriesRemoved = function (event) {\r\n var sourceSeries = event.oldValue;\r\n var scrollbarChart = this.scrollbarChart;\r\n scrollbarChart.series.each(function (series) {\r\n if (series && series.clonedFrom == sourceSeries) {\r\n scrollbarChart.series.removeValue(series);\r\n }\r\n });\r\n if (scrollbarChart.series.length == 0) {\r\n scrollbarChart.xAxes.clear();\r\n scrollbarChart.yAxes.clear();\r\n }\r\n try {\r\n sourceSeries.events.off(\"validated\", this.zoomOutAxes, this);\r\n }\r\n catch (err) {\r\n }\r\n };\r\n Object.defineProperty(XYChartScrollbar.prototype, \"scrollbarChart\", {\r\n /**\r\n * A chart element that is used to display graphs in the Scrollbar.\r\n *\r\n * This is not the same as `chart`. It's a totally independent instance of\r\n * [[XYChart]] with separate config, series, etc.\r\n *\r\n * It can be configured just like any other [[XYChart]].\r\n *\r\n * @readonly\r\n * @return Scrollbar's internal chart\r\n */\r\n get: function () {\r\n return this._scrollbarChart;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChartScrollbar.prototype, \"chart\", {\r\n /**\r\n * @return Chart\r\n */\r\n get: function () {\r\n return this._chart.get();\r\n },\r\n /**\r\n * A chart that Scrollbar belongs to.\r\n *\r\n * @param chart Chart\r\n */\r\n set: function (chart) {\r\n if (this._chart.get() !== chart) {\r\n this._chart.set(chart, chart.events.on(\"datavalidated\", this.handleDataChanged, this, false));\r\n this.handleDataChanged();\r\n this._scrollbarChart.dataProvider = chart; // this makes scrollbar chart do not validate data untill charts' data is validated\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChartScrollbar.prototype, \"unselectedOverlay\", {\r\n /**\r\n * A [[Sprite]] object representing overlay that is used to dim area of the\r\n * scrollbar that is currently not selected.\r\n *\r\n * Use its `fillOpacity` to set opacity of the fill, with `0` (zero)\r\n * completely disabling the dimming, and `1` making unselected area completely\r\n * blank.\r\n *\r\n * @since 4.6.1\r\n * @readonly\r\n * @return Unselected area curtain element\r\n */\r\n get: function () {\r\n return this._unselectedOverlay;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates Scrollbar's internal chart's data when the main chart's data\r\n * changes.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChartScrollbar.prototype.handleDataChanged = function () {\r\n if (this.chart.data != this.scrollbarChart.data) {\r\n this.scrollbarChart.data = this.chart.data;\r\n }\r\n else {\r\n // add data is handled in XYChart\r\n // invalidating all data caused the problem: https://github.com/amcharts/amcharts4/issues/2096\r\n this.scrollbarChart.invalidateRawData();\r\n }\r\n };\r\n /**\r\n * Zooms out all axes on the internal chart.\r\n */\r\n XYChartScrollbar.prototype.zoomOutAxes = function () {\r\n var scrollbarChart = this.scrollbarChart;\r\n $iter.each(scrollbarChart.xAxes.iterator(), function (x) {\r\n x.zoom({ start: 0, end: 1 }, true, true);\r\n });\r\n $iter.each(scrollbarChart.yAxes.iterator(), function (y) {\r\n y.zoom({ start: 0, end: 1 }, true, true);\r\n });\r\n };\r\n /**\r\n * Updates scrollbar thumb.\r\n *\r\n * @ignore\r\n */\r\n XYChartScrollbar.prototype.updateThumb = function (dispatchEvents) {\r\n if (dispatchEvents === void 0) { dispatchEvents = true; }\r\n _super.prototype.updateThumb.call(this, dispatchEvents);\r\n if (this._unselectedOverlay) {\r\n var thumb = this.thumb;\r\n var x = thumb.pixelX || 0;\r\n var y = thumb.pixelY || 0;\r\n var w = thumb.pixelWidth || 0;\r\n var h = thumb.pixelHeight || 0;\r\n var path = \"\";\r\n if (this.orientation == \"horizontal\") {\r\n path = $path.rectToPath({\r\n x: -1,\r\n y: 0,\r\n width: x,\r\n height: h\r\n });\r\n path += $path.rectToPath({\r\n x: x + w,\r\n y: 0,\r\n width: (this.pixelWidth || 0) - x - w,\r\n height: h\r\n });\r\n }\r\n else {\r\n path = $path.rectToPath({\r\n x: 0,\r\n y: 0,\r\n width: w,\r\n height: y\r\n });\r\n path += $path.rectToPath({\r\n x: 0,\r\n y: y + h,\r\n width: w,\r\n height: (this.pixelHeight || 0) - y - h\r\n });\r\n }\r\n this._unselectedOverlay.path = path;\r\n }\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n XYChartScrollbar.prototype.processConfig = function (config) {\r\n if (config) {\r\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n for (var i = 0, len = config.series.length; i < len; i++) {\r\n var series = config.series[i];\r\n if ($type.hasValue(series) && $type.isString(series)) {\r\n if (this.map.hasKey(series)) {\r\n config.series[i] = this.map.getKey(series);\r\n }\r\n else {\r\n throw Error(\"XYChartScrollbar error: Series with id `\" + series + \"` does not exist.\");\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return XYChartScrollbar;\r\n}(Scrollbar));\r\nexport { XYChartScrollbar };\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//# sourceMappingURL=XYChartScrollbar.js.map","/**\r\n * XY Chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { List, ListDisposer } from \"../../core/utils/List\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\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 { Disposer } from \"../../core/utils/Disposer\";\r\nimport { ZoomOutButton } from \"../../core/elements/ZoomOutButton\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { XYChartScrollbar } from \"../elements/XYChartScrollbar\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar XYChartDataItem = /** @class */ (function (_super) {\r\n __extends(XYChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"XYChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return XYChartDataItem;\r\n}(SerialChartDataItem));\r\nexport { XYChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar XYChart = /** @class */ (function (_super) {\r\n __extends(XYChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Defines the type of horizontal axis rederer.\r\n */\r\n _this._axisRendererX = AxisRendererX;\r\n /**\r\n * Defines the type of vertical axis rederer.\r\n */\r\n _this._axisRendererY = AxisRendererY;\r\n /**\r\n * @ignore\r\n */\r\n _this._seriesPoints = [];\r\n _this.className = \"XYChart\";\r\n // Set defaults\r\n //this.margin(10, 10, 10, 10);\r\n _this.maskBullets = true;\r\n _this.arrangeTooltips = true;\r\n // Create main chart container\r\n var chartContainer = _this.chartContainer;\r\n chartContainer.layout = \"vertical\";\r\n _this.padding(15, 15, 15, 15);\r\n // Create top axes container\r\n var topAxesCont = chartContainer.createChild(Container);\r\n topAxesCont.shouldClone = false;\r\n topAxesCont.layout = \"vertical\";\r\n topAxesCont.width = percent(100);\r\n topAxesCont.zIndex = 1;\r\n _this.topAxesContainer = topAxesCont;\r\n // Create vertical axes and plot area container\r\n // Plot area and vertical axes share the whole width of the chart,\r\n // so we need to put then into a separate container so that layouting\r\n // engine takes care of the positioning\r\n var yAxesAndPlotCont = chartContainer.createChild(Container);\r\n yAxesAndPlotCont.shouldClone = false;\r\n yAxesAndPlotCont.layout = \"horizontal\";\r\n yAxesAndPlotCont.width = percent(100);\r\n yAxesAndPlotCont.height = percent(100);\r\n yAxesAndPlotCont.zIndex = 0;\r\n _this.yAxesAndPlotContainer = yAxesAndPlotCont;\r\n // Create a container for bottom axes\r\n var bottomAxesCont = chartContainer.createChild(Container);\r\n bottomAxesCont.shouldClone = false;\r\n bottomAxesCont.width = percent(100);\r\n bottomAxesCont.layout = \"vertical\";\r\n bottomAxesCont.zIndex = 1;\r\n _this.bottomAxesContainer = bottomAxesCont;\r\n // Create a container for left-side axes\r\n var leftAxesCont = yAxesAndPlotCont.createChild(Container);\r\n leftAxesCont.shouldClone = false;\r\n leftAxesCont.layout = \"horizontal\";\r\n leftAxesCont.height = percent(100);\r\n leftAxesCont.contentAlign = \"right\";\r\n leftAxesCont.events.on(\"transformed\", _this.updateXAxesMargins, _this, false);\r\n leftAxesCont.zIndex = 1;\r\n _this.leftAxesContainer = leftAxesCont;\r\n // Create a container for plot area\r\n var plotCont = yAxesAndPlotCont.createChild(Container);\r\n plotCont.shouldClone = false;\r\n plotCont.height = percent(100);\r\n plotCont.width = percent(100);\r\n // Create transparend background for plot container so that hover works\r\n // on all of it\r\n plotCont.background.fillOpacity = 0;\r\n _this.plotContainer = plotCont;\r\n // must go below plot container\r\n _this.mouseWheelBehavior = \"none\";\r\n _this._cursorContainer = plotCont;\r\n // Create a container for right-side axes\r\n var rightAxesCont = yAxesAndPlotCont.createChild(Container);\r\n rightAxesCont.shouldClone = false;\r\n rightAxesCont.layout = \"horizontal\";\r\n rightAxesCont.height = percent(100);\r\n rightAxesCont.zIndex = 1;\r\n rightAxesCont.events.on(\"transformed\", _this.updateXAxesMargins, _this, false);\r\n _this.rightAxesContainer = rightAxesCont;\r\n _this.seriesContainer.parent = plotCont;\r\n _this.bulletsContainer.parent = plotCont;\r\n var zoomOutButton = plotCont.createChild(ZoomOutButton);\r\n zoomOutButton.shouldClone = false;\r\n zoomOutButton.align = \"right\";\r\n zoomOutButton.valign = \"top\";\r\n zoomOutButton.zIndex = Number.MAX_SAFE_INTEGER;\r\n zoomOutButton.marginTop = 5;\r\n zoomOutButton.marginRight = 5;\r\n zoomOutButton.hide(0);\r\n _this.zoomOutButton = zoomOutButton;\r\n // Create a container for bullets\r\n var axisBulletsContainer = _this.plotContainer.createChild(Container);\r\n axisBulletsContainer.shouldClone = false;\r\n axisBulletsContainer.width = percent(100);\r\n axisBulletsContainer.height = percent(100);\r\n axisBulletsContainer.isMeasured = false;\r\n axisBulletsContainer.zIndex = 4;\r\n axisBulletsContainer.layout = \"none\";\r\n _this.axisBulletsContainer = axisBulletsContainer;\r\n _this._bulletMask = _this.plotContainer;\r\n _this.events.on(\"beforedatavalidated\", function () {\r\n _this.series.each(function (series) {\r\n series.dataGrouped = false;\r\n series._baseInterval = {};\r\n });\r\n }, _this, false);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n XYChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n this.zoomOutButton.exportable = false;\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"X/Y chart\");\r\n }\r\n };\r\n /**\r\n * Draws the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n this.seriesContainer.toFront();\r\n this.bulletsContainer.toFront();\r\n if (this.maskBullets) {\r\n this.bulletsContainer.mask = this._bulletMask;\r\n }\r\n this.updateSeriesLegend();\r\n };\r\n /**\r\n * Triggers a redrawing of all chart's series.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.updatePlotElements = function () {\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.invalidate();\r\n });\r\n };\r\n /**\r\n * Triggers data (re)validation which in turn can cause a redraw of the\r\n * whole chart or just aprticular series / elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.validateData = function () {\r\n // tell axes that data changed\r\n if (this._parseDataFrom == 0) {\r\n $iter.each(this.xAxes.iterator(), function (axis) {\r\n axis.dataChangeUpdate();\r\n });\r\n $iter.each(this.yAxes.iterator(), function (axis) {\r\n axis.dataChangeUpdate();\r\n });\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.dataChangeUpdate();\r\n });\r\n }\r\n _super.prototype.validateData.call(this);\r\n };\r\n /**\r\n * Updates margins for horizontal axes based on settings and available space.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.updateXAxesMargins = function () {\r\n var leftAxesWidth = this.leftAxesContainer.measuredWidth;\r\n var rightAxesWidth = this.rightAxesContainer.measuredWidth;\r\n var bottomAxesCont = this.bottomAxesContainer;\r\n if (bottomAxesCont.paddingLeft != leftAxesWidth || bottomAxesCont.paddingRight != rightAxesWidth) {\r\n bottomAxesCont.paddingLeft = leftAxesWidth;\r\n bottomAxesCont.paddingRight = rightAxesWidth;\r\n }\r\n var topAxesCont = this.topAxesContainer;\r\n if (topAxesCont.paddingLeft != leftAxesWidth || topAxesCont.paddingRight != rightAxesWidth) {\r\n topAxesCont.paddingLeft = leftAxesWidth;\r\n topAxesCont.paddingRight = rightAxesWidth;\r\n }\r\n };\r\n /**\r\n * Triggers a re-initialization of this element.\r\n *\r\n * Will result in complete redrawing of the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.reinit = function () {\r\n _super.prototype.reinit.call(this);\r\n this.series.each(function (series) {\r\n series.appeared = false;\r\n });\r\n };\r\n /**\r\n * Triggers an update on the horizontal axis when one of its properties\r\n * change.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event An event object\r\n */\r\n XYChart.prototype.handleXAxisChange = function (event) {\r\n this.updateXAxis(event.target);\r\n };\r\n /**\r\n * Triggers an update on the vertical axis when one of its properties\r\n * change.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event An event object\r\n */\r\n XYChart.prototype.handleYAxisChange = function (event) {\r\n this.updateYAxis(event.target);\r\n };\r\n /**\r\n * Sets up a new horizontal (X) axis when it is added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Axis insert event\r\n */\r\n XYChart.prototype.processXAxis = function (event) {\r\n var axis = event.newValue;\r\n axis.chart = this;\r\n if (!axis.renderer) {\r\n axis.renderer = new this._axisRendererX();\r\n axis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleXAxisChange, this, false);\r\n }\r\n axis.axisLetter = \"X\";\r\n axis.events.on(\"startendchanged\", this.handleXAxisRangeChange, this, false);\r\n //axis.events.on(\"endchanged\", this.handleXAxisRangeChange, this, false);\r\n // Although axis does not use data directly, we set dataProvider here\r\n // (but not add to chart data users) to hold up rendering before data\r\n // is parsed (system handles this)\r\n axis.dataProvider = this;\r\n this.updateXAxis(axis.renderer);\r\n this.processAxis(axis);\r\n };\r\n /**\r\n * Sets up a new vertical (Y) axis when it is added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Axis insert event\r\n */\r\n XYChart.prototype.processYAxis = function (event) {\r\n var axis = event.newValue;\r\n axis.chart = this;\r\n if (!axis.renderer) {\r\n axis.renderer = new this._axisRendererY();\r\n axis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleYAxisChange, this, false);\r\n }\r\n axis.axisLetter = \"Y\";\r\n axis.events.on(\"startendchanged\", this.handleYAxisRangeChange, this, false);\r\n //axis.events.on(\"endchanged\", this.handleYAxisRangeChange, this, false);\r\n // Although axis does not use data directly, we set dataProvider here\r\n // (but not add to chart data users) to hold up rendering before data\r\n // is parsed (system handles this)\r\n axis.dataProvider = this;\r\n this.updateYAxis(axis.renderer);\r\n this.processAxis(axis);\r\n };\r\n /**\r\n * Updates horizontal (X) scrollbar and other horizontal axis whenever axis'\r\n * value range changes.\r\n */\r\n XYChart.prototype.handleXAxisRangeChange = function () {\r\n var range = this.getCommonAxisRange(this.xAxes);\r\n if (this.scrollbarX) {\r\n this.zoomAxes(this.xAxes, range, true);\r\n }\r\n this.toggleZoomOutButton();\r\n this.updateScrollbar(this.scrollbarX, range);\r\n };\r\n /**\r\n * Shows or hides the Zoom Out button depending on whether the chart is fully\r\n * zoomed out or not.\r\n */\r\n XYChart.prototype.toggleZoomOutButton = function () {\r\n if (this.zoomOutButton) {\r\n var show_1 = false;\r\n $iter.eachContinue(this.xAxes.iterator(), function (axis) {\r\n if (axis.toggleZoomOutButton) {\r\n if (axis.maxZoomCount > 0) {\r\n var minZoomFactor = axis.maxZoomFactor / axis.maxZoomCount;\r\n if ($math.round(axis.end - axis.start, 3) < 1 / minZoomFactor) {\r\n show_1 = true;\r\n return false;\r\n }\r\n }\r\n else {\r\n if ($math.round(axis.start, 3) > 0 || $math.round(axis.end, 3) < 1) {\r\n show_1 = true;\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n });\r\n $iter.eachContinue(this.yAxes.iterator(), function (axis) {\r\n if (axis.toggleZoomOutButton) {\r\n if (axis.maxZoomCount > 0) {\r\n var minZoomFactor = axis.maxZoomFactor / axis.maxZoomCount;\r\n if ($math.round(axis.end - axis.start, 3) < 1 / minZoomFactor) {\r\n show_1 = true;\r\n return false;\r\n }\r\n }\r\n else {\r\n if ($math.round(axis.start, 3) > 0 || $math.round(axis.end, 3) < 1) {\r\n show_1 = true;\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n });\r\n if (!this.seriesAppeared) {\r\n show_1 = false;\r\n }\r\n if (show_1) {\r\n this.zoomOutButton.show();\r\n }\r\n else {\r\n this.zoomOutButton.hide();\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n * moved this check to a separate method so that we could override it in TreeMapSeries\r\n */\r\n XYChart.prototype.seriesAppeared = function () {\r\n var appeared = false;\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (!series.appeared) {\r\n appeared = false;\r\n return false;\r\n }\r\n });\r\n return appeared;\r\n };\r\n /**\r\n * Updates vertical (Y) scrollbar and other horizontal axis whenever axis'\r\n * value range changes.\r\n */\r\n XYChart.prototype.handleYAxisRangeChange = function () {\r\n var range = this.getCommonAxisRange(this.yAxes);\r\n if (this.scrollbarY) {\r\n this.zoomAxes(this.yAxes, range, true);\r\n }\r\n this.toggleZoomOutButton();\r\n this.updateScrollbar(this.scrollbarY, range);\r\n };\r\n /**\r\n * Updates a relative scrollbar whenever data range of the axis changes.\r\n *\r\n * @param scrollbar Scrollbar instance\r\n * @param range New data (values) range of the axis\r\n */\r\n XYChart.prototype.updateScrollbar = function (scrollbar, range) {\r\n if (scrollbar) {\r\n scrollbar.skipRangeEvents();\r\n scrollbar.start = range.start;\r\n scrollbar.end = range.end;\r\n }\r\n };\r\n /**\r\n * Returns a common range of values between a list of axes.\r\n *\r\n * This is used to synchronize the zoom between multiple axes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axes A list of axes\r\n * @return Common value range\r\n */\r\n XYChart.prototype.getCommonAxisRange = function (axes) {\r\n var start;\r\n var end;\r\n axes.each(function (axis) {\r\n if (!axis.zoomable || (axis instanceof ValueAxis && axis.syncWithAxis)) {\r\n }\r\n else {\r\n var axisStart = axis.start;\r\n var axisEnd = axis.end;\r\n if (axis.renderer.inversed) {\r\n axisStart = 1 - axis.end;\r\n axisEnd = 1 - axis.start;\r\n }\r\n if (!$type.isNumber(start) || (axisStart < start)) {\r\n start = axisStart;\r\n }\r\n if (!$type.isNumber(end) || (axisEnd > end)) {\r\n end = axisEnd;\r\n }\r\n }\r\n });\r\n return { start: start, end: end };\r\n };\r\n /**\r\n * Triggers (re)rendering of the horizontal (X) axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n */\r\n XYChart.prototype.updateXAxis = function (renderer) {\r\n var axis = renderer.axis;\r\n if (renderer.opposite) {\r\n axis.parent = this.topAxesContainer;\r\n axis.toFront();\r\n }\r\n else {\r\n axis.parent = this.bottomAxesContainer;\r\n axis.toBack();\r\n }\r\n if (axis.renderer) {\r\n axis.renderer.processRenderer();\r\n }\r\n };\r\n /**\r\n * Triggers (re)rendering of the vertical (Y) axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n */\r\n XYChart.prototype.updateYAxis = function (renderer) {\r\n var axis = renderer.axis;\r\n if (renderer.opposite) {\r\n axis.parent = this.rightAxesContainer;\r\n axis.toBack();\r\n }\r\n else {\r\n axis.parent = this.leftAxesContainer;\r\n axis.toFront();\r\n }\r\n if (axis.renderer) {\r\n axis.renderer.processRenderer();\r\n }\r\n };\r\n /**\r\n * Decorates an Axis for use with this chart, e.g. sets proper renderer\r\n * and containers for placement.\r\n *\r\n * @param axis Axis\r\n */\r\n XYChart.prototype.processAxis = function (axis) {\r\n var _this = this;\r\n // Value axis does not use data directly, only category axis does\r\n if (axis instanceof CategoryAxis) {\r\n this._dataUsers.moveValue(axis);\r\n }\r\n var renderer = axis.renderer;\r\n renderer.gridContainer.parent = this.plotContainer;\r\n renderer.gridContainer.toBack();\r\n renderer.breakContainer.parent = this.plotContainer;\r\n renderer.breakContainer.toFront();\r\n renderer.breakContainer.zIndex = 10;\r\n axis.addDisposer(new Disposer(function () {\r\n _this.dataUsers.removeValue(axis);\r\n }));\r\n renderer.bulletsContainer.parent = this.axisBulletsContainer;\r\n this._disposers.push(axis.events.on(\"positionchanged\", function () {\r\n var point = $utils.spritePointToSprite({ x: 0, y: 0 }, axis, _this.axisBulletsContainer);\r\n if (axis.renderer instanceof AxisRendererY) {\r\n renderer.bulletsContainer.y = point.y;\r\n }\r\n if (axis.renderer instanceof AxisRendererX) {\r\n renderer.bulletsContainer.x = point.x;\r\n }\r\n }, undefined, false));\r\n this.plotContainer.events.on(\"maxsizechanged\", function () {\r\n if (_this.inited) {\r\n axis.invalidateDataItems();\r\n _this.updateSeriesMasks();\r\n }\r\n }, axis, false);\r\n };\r\n /**\r\n * This is done because for some reason IE doesn't change mask if path of a\r\n * mask changes.\r\n */\r\n XYChart.prototype.updateSeriesMasks = function () {\r\n if ($utils.isIE()) {\r\n this.series.each(function (series) {\r\n var mask = series.mainContainer.mask;\r\n series.mainContainer.mask = undefined;\r\n series.mainContainer.mask = mask;\r\n });\r\n }\r\n };\r\n XYChart.prototype.handleSeriesRemoved = function (event) {\r\n var series = event.oldValue;\r\n if (series) {\r\n if (series.xAxis) {\r\n series.xAxis.series.removeValue(series);\r\n series.xAxis.invalidateProcessedData();\r\n }\r\n if (series.yAxis) {\r\n series.yAxis.series.removeValue(series);\r\n series.yAxis.invalidateProcessedData();\r\n }\r\n // otherwise extremes won't change\r\n this.series.each(function (series) {\r\n series.resetExtremes();\r\n });\r\n }\r\n _super.prototype.handleSeriesRemoved.call(this, event);\r\n };\r\n Object.defineProperty(XYChart.prototype, \"xAxes\", {\r\n /**\r\n * A list of horizontal (X) axes.\r\n *\r\n * @return List of axes\r\n */\r\n get: function () {\r\n if (!this._xAxes) {\r\n this._xAxes = new List();\r\n this._xAxes.events.on(\"inserted\", this.processXAxis, this, false);\r\n this._xAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n this._disposers.push(new ListDisposer(this._xAxes, false));\r\n }\r\n return this._xAxes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.handleAxisRemoval = function (event) {\r\n var axis = event.oldValue;\r\n this.dataUsers.removeValue(axis); // need to remove, as it might not be disposed\r\n if (axis.autoDispose) {\r\n axis.dispose();\r\n }\r\n };\r\n Object.defineProperty(XYChart.prototype, \"yAxes\", {\r\n /**\r\n * A list of vertical (Y) axes.\r\n *\r\n * @return List of axes\r\n */\r\n get: function () {\r\n if (!this._yAxes) {\r\n this._yAxes = new List();\r\n this._yAxes.events.on(\"inserted\", this.processYAxis, this, false);\r\n this._yAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n this._disposers.push(new ListDisposer(this._yAxes, false));\r\n }\r\n return this._yAxes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Decorates a new [[XYSeries]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n XYChart.prototype.handleSeriesAdded = function (event) {\r\n try {\r\n _super.prototype.handleSeriesAdded.call(this, event);\r\n var series = event.newValue;\r\n if (this.xAxes.length == 0 || this.yAxes.length == 0) {\r\n registry.removeFromInvalidComponents(series);\r\n series.dataInvalid = false;\r\n }\r\n $utils.used(series.xAxis); // this is enough to get axis, handled in getter\r\n $utils.used(series.yAxis); // this is enough to get axis, handled in getter\r\n series.maskBullets = series.maskBullets;\r\n if (series.fill == undefined) {\r\n if (this.patterns) {\r\n if (!$type.hasValue(series.stroke)) {\r\n series.stroke = this.colors.next();\r\n }\r\n series.fill = this.patterns.next();\r\n if ($type.hasValue(series.fillOpacity)) {\r\n series.fill.backgroundOpacity = series.fillOpacity;\r\n }\r\n if (series.stroke instanceof Color) {\r\n series.fill.stroke = series.stroke;\r\n series.fill.fill = series.stroke;\r\n }\r\n }\r\n else {\r\n series.fill = this.colors.next();\r\n }\r\n }\r\n if (!$type.hasValue(series.stroke)) {\r\n series.stroke = series.fill;\r\n }\r\n }\r\n catch (e) {\r\n this.raiseCriticalError(e);\r\n }\r\n };\r\n Object.defineProperty(XYChart.prototype, \"cursor\", {\r\n /**\r\n * @return Cursor\r\n */\r\n get: function () {\r\n return this._cursor;\r\n },\r\n /**\r\n * Chart's [[Cursor]].\r\n *\r\n * @param cursor Cursor\r\n */\r\n set: function (cursor) {\r\n if (this._cursor != cursor) {\r\n if (this._cursor) {\r\n this.removeDispose(this._cursor);\r\n }\r\n this._cursor = cursor;\r\n if (cursor) {\r\n // TODO this is wrong, fix it\r\n this._disposers.push(cursor);\r\n cursor.chart = this;\r\n cursor.shouldClone = false;\r\n cursor.parent = this._cursorContainer;\r\n cursor.events.on(\"cursorpositionchanged\", this.handleCursorPositionChange, this, false);\r\n cursor.events.on(\"zoomstarted\", this.handleCursorZoomStart, this, false);\r\n cursor.events.on(\"zoomended\", this.handleCursorZoomEnd, this, false);\r\n cursor.events.on(\"panstarted\", this.handleCursorPanStart, this, false);\r\n cursor.events.on(\"panning\", this.handleCursorPanning, this, false);\r\n cursor.events.on(\"panended\", this.handleCursorPanEnd, this, false);\r\n cursor.events.on(\"behaviorcanceled\", this.handleCursorCanceled, this, false);\r\n cursor.events.on(\"hidden\", this.handleHideCursor, this, false);\r\n cursor.zIndex = Number.MAX_SAFE_INTEGER - 1;\r\n if (this.tapToActivate) {\r\n // We need this in order to setup cursor properly\r\n this.setTapToActivate(this.tapToActivate);\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Performs tasks when the cursor's position changes, e.g. shows proper\r\n * tooltips on axes and series.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.handleCursorPositionChange = function () {\r\n var cursor = this.cursor;\r\n if (cursor.visible && !cursor.isHiding) {\r\n var xPosition_1 = this.cursor.xPosition;\r\n var yPosition_1 = this.cursor.yPosition;\r\n this.showSeriesTooltip({\r\n x: xPosition_1,\r\n y: yPosition_1\r\n });\r\n var exceptAxes_1 = [];\r\n var snapToSeries = cursor.snapToSeries;\r\n if (snapToSeries && !cursor.downPoint) {\r\n if (snapToSeries instanceof XYSeries) {\r\n snapToSeries = [snapToSeries];\r\n }\r\n var dataItems_1 = [];\r\n $array.each(snapToSeries, function (snpSeries) {\r\n if (!snpSeries.isHidden && !snpSeries.isHiding) {\r\n var xAxis = snpSeries.xAxis;\r\n var yAxis = snpSeries.yAxis;\r\n if (xAxis instanceof ValueAxis && !(xAxis instanceof DateAxis) && yAxis instanceof ValueAxis && !(yAxis instanceof DateAxis)) {\r\n snpSeries.dataItems.each(function (dataItem) {\r\n dataItems_1.push(dataItem);\r\n });\r\n $array.move(exceptAxes_1, snpSeries.yAxis);\r\n $array.move(exceptAxes_1, snpSeries.xAxis);\r\n }\r\n else {\r\n if (snpSeries.baseAxis == snpSeries.xAxis) {\r\n $array.move(exceptAxes_1, snpSeries.yAxis);\r\n dataItems_1.push(xAxis.getSeriesDataItem(snpSeries, xAxis.toAxisPosition(xPosition_1), true));\r\n }\r\n if (snpSeries.baseAxis == snpSeries.yAxis) {\r\n $array.move(exceptAxes_1, snpSeries.xAxis);\r\n dataItems_1.push(yAxis.getSeriesDataItem(snpSeries, yAxis.toAxisPosition(yPosition_1), true));\r\n }\r\n }\r\n }\r\n });\r\n var closestDataItem_1 = this.getClosest(dataItems_1, xPosition_1, yPosition_1);\r\n if (closestDataItem_1) {\r\n this.series.each(function (series) {\r\n var closestSeries = closestDataItem_1.component;\r\n if (series != closestSeries) {\r\n series.hideTooltip();\r\n if (series.xAxis != closestSeries.xAxis) {\r\n series.xAxis.hideTooltip();\r\n exceptAxes_1.push(series.xAxis);\r\n }\r\n if (series.yAxis != closestSeries.yAxis) {\r\n series.yAxis.hideTooltip();\r\n exceptAxes_1.push(series.yAxis);\r\n }\r\n }\r\n });\r\n closestDataItem_1.component.showTooltipAtDataItem(closestDataItem_1);\r\n cursor.handleSnap(closestDataItem_1.component);\r\n }\r\n }\r\n //}\r\n this._seriesPoints = [];\r\n if (this._cursorXPosition != xPosition_1) {\r\n this.showAxisTooltip(this.xAxes, xPosition_1, exceptAxes_1);\r\n }\r\n if (this._cursorYPosition != yPosition_1) {\r\n this.showAxisTooltip(this.yAxes, yPosition_1, exceptAxes_1);\r\n }\r\n if (this.arrangeTooltips) {\r\n this.sortSeriesTooltips(this._seriesPoints);\r\n }\r\n if (this.legend) {\r\n this.legend.afterDraw();\r\n }\r\n }\r\n };\r\n /**\r\n * Finds closest data item to position out of the array of items.\r\n *\r\n * @since 4.9.29\r\n * @param dataItems Array of items\r\n * @param xPosition X position\r\n * @param yPosition Y position\r\n * @return Data item\r\n */\r\n XYChart.prototype.getClosest = function (dataItems, xPosition, yPosition) {\r\n var minDistance = Infinity;\r\n var closestDataItem;\r\n $array.eachContinue(dataItems, function (dataItem) {\r\n if (dataItem) {\r\n var xAxis = dataItem.component.xAxis;\r\n var yAxis = dataItem.component.yAxis;\r\n var xPos = xAxis.positionToCoordinate(xAxis.toGlobalPosition(xAxis.toAxisPosition(xPosition)));\r\n var yPos = yAxis.positionToCoordinate(yAxis.toGlobalPosition(yAxis.toAxisPosition(yPosition)));\r\n var xField = dataItem.component.xField;\r\n var yField = dataItem.component.yField;\r\n if (xAxis instanceof ValueAxis && !$type.isNumber(dataItem.getValue(xField))) {\r\n return true;\r\n }\r\n if (yAxis instanceof ValueAxis && !$type.isNumber(dataItem.getValue(yField))) {\r\n return true;\r\n }\r\n var dxPosition = xAxis.positionToCoordinate(xAxis.toGlobalPosition(xAxis.getPositionX(dataItem, xField, dataItem.locations[xField], \"valueX\")));\r\n var dyPosition = yAxis.positionToCoordinate(yAxis.toGlobalPosition(yAxis.getPositionY(dataItem, yField, dataItem.locations[yField], \"valueY\")));\r\n var distance = Math.sqrt(Math.pow(xPos - dxPosition, 2) + Math.pow(yPos - dyPosition, 2));\r\n if (distance < minDistance) {\r\n minDistance = distance;\r\n closestDataItem = dataItem;\r\n }\r\n return true;\r\n }\r\n });\r\n return closestDataItem;\r\n };\r\n /**\r\n * Hides all cursor-related tooltips when the cursor itself is hidden.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.handleHideCursor = function () {\r\n this.hideObjectTooltip(this.xAxes);\r\n this.hideObjectTooltip(this.yAxes);\r\n this.hideObjectTooltip(this.series);\r\n this._cursorXPosition = undefined;\r\n this._cursorYPosition = undefined;\r\n this.updateSeriesLegend();\r\n };\r\n /**\r\n * Updates values for each series' legend item.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart.prototype.updateSeriesLegend = function () {\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.updateLegendValue();\r\n });\r\n };\r\n /**\r\n * Hides a tooltip for a list of objects.\r\n *\r\n * @ignore Exclude from docs\r\n * @param sprites A list of sprites to hide tooltip for\r\n */\r\n XYChart.prototype.hideObjectTooltip = function (sprites) {\r\n $iter.each(sprites.iterator(), function (sprite) {\r\n if (sprite.cursorTooltipEnabled) {\r\n sprite.hideTooltip(0);\r\n }\r\n });\r\n };\r\n /**\r\n * Shows a tooltip for all chart's series, using specific coordinates as a\r\n * reference point.\r\n *\r\n * The tooltip might be shown at different coordinates depending on the\r\n * actual data point's position, overlapping with other tooltips, etc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Reference point\r\n */\r\n XYChart.prototype.showSeriesTooltip = function (position) {\r\n var _this = this;\r\n if (!position) {\r\n this.series.each(function (series) {\r\n series.hideTooltip();\r\n });\r\n return;\r\n }\r\n var seriesPoints = [];\r\n this.series.each(function (series) {\r\n //if (series.tooltipText || series.tooltipHTML) { // not good, bullets are not hovered then\r\n if ((series.xAxis instanceof DateAxis && series.xAxis.snapTooltip) || (series.yAxis instanceof DateAxis && series.yAxis.snapTooltip)) {\r\n // void\r\n }\r\n else {\r\n var point = series.showTooltipAtPosition(position.x, position.y);\r\n if (point) {\r\n series.tooltip.setBounds($utils.spriteRectToSvg({ x: 0, y: 0, width: _this.pixelWidth, height: _this.pixelHeight }, _this));\r\n seriesPoints.push({ series: series, point: point });\r\n }\r\n }\r\n //}\r\n });\r\n if (this.arrangeTooltips) {\r\n this.sortSeriesTooltips(seriesPoints);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.sortSeriesTooltips = function (seriesPoints) {\r\n if (seriesPoints.length > 0) {\r\n var cursor_1 = this.cursor;\r\n if (cursor_1 && $type.isNumber(cursor_1.maxTooltipDistance)) {\r\n var cursorPoint_1 = $utils.spritePointToSvg({ x: cursor_1.point.x, y: cursor_1.point.y }, cursor_1);\r\n var nearestSeries_1;\r\n var nearestPoint_1;\r\n var smallestDistance_1 = Infinity;\r\n $array.each(seriesPoints, function (seriesPoint) {\r\n var series = seriesPoint.series;\r\n var fixedPoint = seriesPoint.point;\r\n if (fixedPoint) {\r\n var point = { x: fixedPoint.x, y: fixedPoint.y };\r\n var distance = Math.abs($math.getDistance(point, cursorPoint_1));\r\n if (distance < smallestDistance_1) {\r\n nearestPoint_1 = point;\r\n smallestDistance_1 = distance;\r\n nearestSeries_1 = series;\r\n }\r\n }\r\n });\r\n var newSeriesPoints_1 = [];\r\n if (nearestSeries_1) {\r\n $array.each(seriesPoints, function (seriesPoint) {\r\n if (Math.abs($math.getDistance(seriesPoint.point, nearestPoint_1)) <= Math.abs(cursor_1.maxTooltipDistance)) {\r\n newSeriesPoints_1.push({ series: seriesPoint.series, point: seriesPoint.point });\r\n }\r\n else {\r\n var tooltipDataItem = seriesPoint.series.tooltipDataItem;\r\n if (tooltipDataItem) {\r\n $array.each(tooltipDataItem.sprites, function (sprite) {\r\n sprite.isHover = false;\r\n sprite.handleOutReal(); // to avoid flicker\r\n });\r\n }\r\n seriesPoint.series.hideTooltip(0);\r\n }\r\n });\r\n if (cursor_1.maxTooltipDistance < 0) {\r\n if (newSeriesPoints_1.length > 0) {\r\n $array.each(newSeriesPoints_1, function (np) {\r\n if (nearestSeries_1 != np.series) {\r\n np.series.hideTooltip(0);\r\n }\r\n });\r\n }\r\n newSeriesPoints_1 = [{ series: nearestSeries_1, point: nearestPoint_1 }];\r\n }\r\n }\r\n seriesPoints = newSeriesPoints_1;\r\n }\r\n var topLeft_1 = $utils.spritePointToSvg({ x: -0.5, y: -0.5 }, this.plotContainer);\r\n var bottomRight_1 = $utils.spritePointToSvg({ x: this.plotContainer.pixelWidth + 0.5, y: this.plotContainer.pixelHeight + 0.5 }, this.plotContainer);\r\n var sum_1 = 0;\r\n var filteredSeriesPoints_1 = [];\r\n $array.each(seriesPoints, function (seriesPoint) {\r\n var point = seriesPoint.point;\r\n if (point && $math.isInRectangle(point, { x: topLeft_1.x, y: topLeft_1.y, width: bottomRight_1.x - topLeft_1.x, height: bottomRight_1.y - topLeft_1.y })) {\r\n filteredSeriesPoints_1.push({ point: point, series: seriesPoint.series });\r\n sum_1 += point.y;\r\n }\r\n });\r\n seriesPoints = filteredSeriesPoints_1;\r\n var firstSeries = this.series.getIndex(0);\r\n var inversed = false;\r\n if (firstSeries && firstSeries.yAxis && firstSeries.yAxis.renderer.inversed) {\r\n inversed = true;\r\n }\r\n if (inversed) {\r\n seriesPoints.sort(function (a, b) { return $number.order(a.point.y, b.point.y); });\r\n }\r\n else {\r\n seriesPoints.sort(function (a, b) { return $number.order(b.point.y, a.point.y); });\r\n seriesPoints.reverse();\r\n }\r\n var averageY = sum_1 / seriesPoints.length;\r\n var maxY = $utils.svgPointToDocument({ x: 0, y: 0 }, this.svgContainer.SVGContainer).y;\r\n if (seriesPoints.length > 0) {\r\n var top_1 = topLeft_1.y;\r\n var bottom = bottomRight_1.y;\r\n // TODO is this needed ?\r\n $utils.spritePointToDocument({ x: 0, y: top_1 }, this);\r\n var dropped = false;\r\n if (averageY > top_1 + (bottom - top_1) / 2) {\r\n var nextHeight = bottom;\r\n for (var i = seriesPoints.length - 1; i >= 0; i--) {\r\n var series = seriesPoints[i].series;\r\n var tooltip = series.tooltip;\r\n var pointY = seriesPoints[i].point.y;\r\n tooltip.setBounds({ x: 0, y: -maxY, width: this.pixelWidth, height: nextHeight + maxY });\r\n if (tooltip.invalid) {\r\n tooltip.validate();\r\n }\r\n tooltip.toBack();\r\n nextHeight = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY - tooltip.pixelY + pointY - tooltip.pixelMarginTop }, tooltip).y;\r\n if (nextHeight < -maxY) {\r\n dropped = true;\r\n break;\r\n }\r\n }\r\n }\r\n if (averageY <= top_1 + (bottom - top_1) / 2 || dropped) {\r\n var nextY = top_1;\r\n for (var i = 0, len = seriesPoints.length; i < len; i++) {\r\n var series = seriesPoints[i].series;\r\n var pointY = seriesPoints[i].point.y;\r\n var tooltip = series.tooltip;\r\n tooltip.setBounds({ x: 0, y: nextY, width: this.pixelWidth, height: bottom });\r\n if (tooltip.invalid) {\r\n tooltip.validate();\r\n }\r\n tooltip.toBack();\r\n nextY = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY + tooltip.label.measuredHeight - tooltip.pixelY + pointY + tooltip.pixelMarginBottom }, tooltip).y;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Shows tooltips for a list of axes at specific position.\r\n *\r\n * Position might be X coordinate for horizontal axes, and Y coordinate for\r\n * vertical axes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axes List of axes to show tooltip on\r\n * @param position Position (px)\r\n */\r\n XYChart.prototype.showAxisTooltip = function (axes, position, except) {\r\n var _this = this;\r\n $iter.each(axes.iterator(), function (axis) {\r\n if (!except || except.indexOf(axis) == -1) {\r\n if (_this.dataItems.length > 0 || axis.dataItems.length > 0) {\r\n axis.showTooltipAtPosition(position);\r\n }\r\n }\r\n });\r\n };\r\n /**\r\n * Recalculates the value range for the axis taking into account zoom level & inversed.\r\n *\r\n * @param axis Axis\r\n * @param range Range\r\n * @return Modified range\r\n */\r\n XYChart.prototype.getUpdatedRange = function (axis, range) {\r\n if (!axis) {\r\n return;\r\n }\r\n var start;\r\n var end;\r\n var inversed = axis.renderer.inversed;\r\n if (inversed) {\r\n $math.invertRange(range);\r\n start = 1 - axis.end;\r\n end = 1 - axis.start;\r\n }\r\n else {\r\n start = axis.start;\r\n end = axis.end;\r\n }\r\n var difference = end - start;\r\n return {\r\n start: start + range.start * difference,\r\n end: start + range.end * difference\r\n };\r\n };\r\n /**\r\n * Performs zoom and other operations when user finishes zooming using chart\r\n * cursor, e.g. zooms axes.\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorZoomEnd = function (event) {\r\n var cursor = this.cursor;\r\n var behavior = cursor.behavior;\r\n if (behavior == \"zoomX\" || behavior == \"zoomXY\") {\r\n var xRange = cursor.xRange;\r\n if (xRange && this.xAxes.length > 0) {\r\n xRange = this.getUpdatedRange(this.xAxes.getIndex(0), xRange);\r\n xRange.priority = \"start\";\r\n this.zoomAxes(this.xAxes, xRange);\r\n }\r\n }\r\n if (behavior == \"zoomY\" || behavior == \"zoomXY\") {\r\n var yRange = cursor.yRange;\r\n if (yRange && this.yAxes.length > 0) {\r\n yRange = this.getUpdatedRange(this.yAxes.getIndex(0), yRange);\r\n yRange.priority = \"start\";\r\n this.zoomAxes(this.yAxes, yRange);\r\n }\r\n }\r\n this.handleHideCursor();\r\n };\r\n /**\r\n * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorPanStart = function (event) {\r\n var xAxis = this.xAxes.getIndex(0);\r\n if (xAxis) {\r\n this._panStartXRange = { start: xAxis.start, end: xAxis.end };\r\n if (xAxis.renderer.inversed) {\r\n this._panStartXRange = $math.invertRange(this._panStartXRange);\r\n }\r\n }\r\n var yAxis = this.yAxes.getIndex(0);\r\n if (yAxis) {\r\n this._panStartYRange = { start: yAxis.start, end: yAxis.end };\r\n if (yAxis.renderer.inversed) {\r\n this._panStartYRange = $math.invertRange(this._panStartYRange);\r\n }\r\n }\r\n };\r\n /**\r\n * Performs zoom and other operations when user ends panning\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorPanEnd = function (event) {\r\n var cursor = this.cursor;\r\n var behavior = cursor.behavior;\r\n if (this._panEndXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n var panEndRange = this._panEndXRange;\r\n var panStartRange = this._panStartXRange;\r\n var delta = 0;\r\n if (panEndRange.start < 0) {\r\n delta = panEndRange.start;\r\n }\r\n if (panStartRange.end > 1) {\r\n if (panEndRange.end > panStartRange.end) {\r\n delta = panEndRange.end - panStartRange.end;\r\n }\r\n }\r\n else if (panEndRange.end > 1) {\r\n delta = panEndRange.end - 1;\r\n }\r\n this.zoomAxes(this.xAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, cursor.snapOnPan);\r\n this._panEndXRange = undefined;\r\n this._panStartXRange = undefined;\r\n }\r\n if (this._panEndYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n var panEndRange = this._panEndYRange;\r\n var delta = 0;\r\n if (panEndRange.start < 0) {\r\n delta = panEndRange.start;\r\n }\r\n if (panEndRange.end > 1) {\r\n delta = panEndRange.end - 1;\r\n }\r\n this.zoomAxes(this.yAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, cursor.snapOnPan);\r\n this._panEndYRange = undefined;\r\n this._panStartYRange = undefined;\r\n }\r\n };\r\n XYChart.prototype.handleCursorCanceled = function () {\r\n this._panEndXRange = undefined;\r\n this._panStartXRange = undefined;\r\n };\r\n /**\r\n * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorPanning = function (event) {\r\n var cursor = this.cursor;\r\n var behavior = cursor.behavior;\r\n var maxPanOut = cursor.maxPanOut;\r\n if (this._panStartXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n var panStartRange = this._panStartXRange;\r\n var range = cursor.xRange;\r\n var axisRange = this.getCommonAxisRange(this.xAxes);\r\n var difference = (panStartRange.end - panStartRange.start);\r\n var delta = range.start * (axisRange.end - axisRange.start);\r\n var newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n var newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n if (newStart <= 0) {\r\n newEnd = newStart + difference;\r\n }\r\n if (newEnd >= 1) {\r\n newStart = newEnd - difference;\r\n }\r\n var newRange = {\r\n start: newStart,\r\n end: newEnd\r\n };\r\n this._panEndXRange = newRange;\r\n this.zoomAxes(this.xAxes, newRange, false, false, cursor.maxPanOut);\r\n }\r\n if (this._panStartYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n var panStartRange = this._panStartYRange;\r\n var range = cursor.yRange;\r\n var axisRange = this.getCommonAxisRange(this.yAxes);\r\n var difference = panStartRange.end - panStartRange.start;\r\n var delta = range.start * (axisRange.end - axisRange.start);\r\n var newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n var newEnd = Math.min(delta + panStartRange.end, 1 + maxPanOut);\r\n if (newStart <= 0) {\r\n newEnd = newStart + difference;\r\n }\r\n if (newEnd >= 1) {\r\n newStart = newEnd - difference;\r\n }\r\n var newRange = {\r\n start: newStart,\r\n end: newEnd\r\n };\r\n this._panEndYRange = newRange;\r\n this.zoomAxes(this.yAxes, newRange, false, false, cursor.maxPanOut);\r\n }\r\n this.handleHideCursor();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.handleYAxisSet = function (series) {\r\n };\r\n /**\r\n * Performs zoom and other operations when user starts zooming using chart\r\n * cursor, e.g. zooms axes.\r\n *\r\n * @param event Cursor's event\r\n */\r\n XYChart.prototype.handleCursorZoomStart = function (event) {\r\n // Nothing here\r\n // This method is here only as a \"placeholder\" for extending classes to\r\n // override if necessary\r\n };\r\n Object.defineProperty(XYChart.prototype, \"scrollbarX\", {\r\n /**\r\n * @return Scrollbar\r\n */\r\n get: function () {\r\n return this._scrollbarX;\r\n },\r\n /**\r\n * Horizontal (X) scrollbar.\r\n *\r\n * @param scrollbar Scrollbar\r\n */\r\n set: function (scrollbar) {\r\n var _this = this;\r\n if (this._scrollbarX) {\r\n this.removeDispose(this._scrollbarX);\r\n }\r\n this._scrollbarX = scrollbar;\r\n if (scrollbar) {\r\n this._disposers.push(scrollbar);\r\n scrollbar.parent = this.topAxesContainer;\r\n scrollbar.shouldClone = false;\r\n scrollbar.startGrip.exportable = false;\r\n scrollbar.endGrip.exportable = false;\r\n scrollbar.toBack();\r\n scrollbar.orientation = \"horizontal\";\r\n scrollbar.events.on(\"rangechanged\", this.handleXScrollbarChange, this, false);\r\n this.events.on(\"datavalidated\", function () { return scrollbar.updateThumb(false); }, this, false);\r\n // accessibility related\r\n scrollbar.adapter.add(\"positionValue\", function (arg) {\r\n var xAxis = _this.xAxes.getIndex(0);\r\n if (xAxis) {\r\n arg.value = xAxis.getPositionLabel(xAxis.renderer.inversed\r\n ? 1 - arg.position\r\n : arg.position);\r\n }\r\n return arg;\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart.prototype, \"scrollbarY\", {\r\n /**\r\n * @return Scrollbar\r\n */\r\n get: function () {\r\n return this._scrollbarY;\r\n },\r\n /**\r\n * Vertical (Y) scrollbar.\r\n *\r\n * @param scrollbar Scrollbar\r\n */\r\n set: function (scrollbar) {\r\n var _this = this;\r\n if (this._scrollbarY) {\r\n this.removeDispose(this._scrollbarY);\r\n }\r\n this._scrollbarY = scrollbar;\r\n if (scrollbar) {\r\n this._disposers.push(scrollbar);\r\n scrollbar.parent = this.rightAxesContainer;\r\n scrollbar.startGrip.exportable = false;\r\n scrollbar.shouldClone = false;\r\n scrollbar.endGrip.exportable = false;\r\n scrollbar.toFront();\r\n scrollbar.orientation = \"vertical\";\r\n scrollbar.events.on(\"rangechanged\", this.handleYScrollbarChange, this, false);\r\n this.events.on(\"datavalidated\", function () { return scrollbar.updateThumb(false); }, this, false);\r\n // accessibility related\r\n scrollbar.adapter.add(\"positionValue\", function (arg) {\r\n var yAxis = _this.yAxes.getIndex(0);\r\n if (yAxis) {\r\n arg.value = yAxis.getPositionLabel(arg.position);\r\n }\r\n return arg;\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Zooms axes affected by the horizontal (X) scrollbar when the selection\r\n * on it changes.\r\n *\r\n * @param event Scrollbar range change event\r\n */\r\n XYChart.prototype.handleXScrollbarChange = function (event) {\r\n if (this.inited) {\r\n var scrollbar = event.target;\r\n var range = scrollbar.range;\r\n if (range.start == 0) {\r\n range.priority = \"start\";\r\n }\r\n if (range.end == 1) {\r\n range.priority = \"end\";\r\n }\r\n range = this.zoomAxes(this.xAxes, range);\r\n scrollbar.fixRange(range);\r\n }\r\n };\r\n /**\r\n * Zooms axes affected by the vertical (Y) scrollbar when the selection\r\n * on it changes.\r\n *\r\n * @param event Scrollbar range change event\r\n */\r\n XYChart.prototype.handleYScrollbarChange = function (event) {\r\n if (this.inited) {\r\n var scrollbar = event.target;\r\n var range = scrollbar.range;\r\n if (range.end == 1) {\r\n range.priority = \"end\";\r\n }\r\n if (range.start == 0) {\r\n range.priority = \"start\";\r\n }\r\n range = this.zoomAxes(this.yAxes, range);\r\n scrollbar.fixRange(range);\r\n }\r\n };\r\n /**\r\n * Zooms axes that are affected by to specific relative range.\r\n *\r\n * @param axes List of axes to zoom\r\n * @param range Range of values to zoom to (0-1)\r\n * @param instantly If set to `true` will skip zooming animation\r\n * @return Recalculated range that is common to all involved axes\r\n */\r\n XYChart.prototype.zoomAxes = function (axes, range, instantly, round, declination, stop) {\r\n var realRange = { start: 0, end: 1 };\r\n this.showSeriesTooltip(); // hides\r\n var originalRange = range;\r\n if (!this.dataInvalid) {\r\n $iter.each(axes.iterator(), function (axis) {\r\n var maxZoomFactor = axis.maxZoomFactor;\r\n if ($type.isNumber(axis.minZoomCount)) {\r\n maxZoomFactor = maxZoomFactor / axis.minZoomCount;\r\n }\r\n if (stop && 1 / (range.end - range.start) >= maxZoomFactor) {\r\n // void\r\n }\r\n else {\r\n if (axis.zoomable) {\r\n if (axis.renderer.inversed) {\r\n range = $math.invertRange(originalRange);\r\n }\r\n else {\r\n range = originalRange;\r\n }\r\n axis.hideTooltip(0);\r\n if (round) {\r\n //let diff = range.end - range.start;\r\n if (axis instanceof CategoryAxis) {\r\n var cellWidth = axis.getCellEndPosition(0) - axis.getCellStartPosition(0);\r\n range.start = axis.roundPosition(range.start + cellWidth / 2 - (axis.startLocation) * cellWidth, axis.startLocation);\r\n range.end = axis.roundPosition(range.end - cellWidth / 2 + (1 - axis.endLocation) * cellWidth, axis.endLocation);\r\n }\r\n else {\r\n range.start = axis.roundPosition(range.start + 0.0001, 0, axis.startLocation);\r\n range.end = axis.roundPosition(range.end + 0.0001, 0, axis.endLocation);\r\n }\r\n }\r\n var axisRange = axis.zoom(range, instantly, instantly, declination);\r\n if (axis.renderer.inversed) {\r\n axisRange = $math.invertRange(axisRange);\r\n }\r\n realRange = axisRange;\r\n }\r\n }\r\n });\r\n }\r\n return realRange;\r\n };\r\n Object.defineProperty(XYChart.prototype, \"maskBullets\", {\r\n /**\r\n * @return Mask bullet container?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maskBullets\");\r\n },\r\n /**\r\n * Indicates if bullet container is masked.\r\n *\r\n * If it is set to `true`, any bullets that do not fit into bullet container\r\n * will be clipped off. Settting to `false` will allow bullets to \"spill out\"\r\n * of the plot area so they are not cut off.\r\n *\r\n * @param value Mask bullet container?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"maskBullets\", value, true) && this.bulletsContainer) {\r\n if (value) {\r\n this.bulletsContainer.mask = this._bulletMask;\r\n }\r\n else {\r\n this.bulletsContainer.mask = undefined;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart.prototype, \"arrangeTooltips\", {\r\n /**\r\n * @return Arrange tooltips?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"arrangeTooltips\");\r\n },\r\n /**\r\n * Indicates if chart should arrange series tooltips so that they would not\r\n * overlap.\r\n *\r\n * If set to `true` (default), the chart will adjust vertical positions of\r\n * all simultaneously shown tooltips to avoid overlapping.\r\n *\r\n * However, if you have a vertically-arranged chart, it might not make sense,\r\n * because tooltips would most probably not be aligned horizontally. In this\r\n * case it would probably be a good idea to set this setting to `false`.\r\n *\r\n * @default true\r\n * @param value Arrange tooltips?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"arrangeTooltips\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Handles mouse wheel event.\r\n *\r\n * @param event Original event\r\n */\r\n XYChart.prototype.handleWheel = function (event) {\r\n var plotContainer = this.plotContainer;\r\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n var plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n var shift = event.shift.y;\r\n this.handleWheelReal(shift, this.mouseWheelBehavior, plotPoint);\r\n };\r\n /**\r\n * Handles mouse wheel event.\r\n *\r\n * @param event Original event\r\n */\r\n XYChart.prototype.handleHorizontalWheel = function (event) {\r\n var plotContainer = this.plotContainer;\r\n var svgPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n var plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n this.handleWheelReal(event.shift.x, this.horizontalMouseWheelBehavior, plotPoint);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.handleWheelReal = function (shift, mouseWheelBehavior, plotPoint) {\r\n if (shift != 0) {\r\n var plotContainer = this.plotContainer;\r\n var rangeX = this.getCommonAxisRange(this.xAxes);\r\n var rangeY = this.getCommonAxisRange(this.yAxes);\r\n var shiftStep = 0.1;\r\n var maxPanOut = 0;\r\n if (mouseWheelBehavior == \"panX\" || mouseWheelBehavior == \"panXY\") {\r\n var differenceX = rangeX.end - rangeX.start;\r\n var newStartX = Math.max(-maxPanOut, rangeX.start + shiftStep * shift / 100 * (rangeX.end - rangeX.start));\r\n var newEndX = Math.min(rangeX.end + shiftStep * shift / 100 * (rangeX.end - rangeX.start), 1 + maxPanOut);\r\n if (newStartX <= 0) {\r\n newEndX = newStartX + differenceX;\r\n }\r\n if (newEndX >= 1) {\r\n newStartX = newEndX - differenceX;\r\n }\r\n this.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n }\r\n if (mouseWheelBehavior == \"panY\" || mouseWheelBehavior == \"panXY\") {\r\n shift *= -1;\r\n var differenceY = rangeY.end - rangeY.start;\r\n var newStartY = Math.max(-maxPanOut, rangeY.start + shiftStep * shift / 100 * (rangeY.end - rangeY.start));\r\n var newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * (rangeY.end - rangeY.start), 1 + maxPanOut);\r\n if (newStartY <= 0) {\r\n newEndY = newStartY + differenceY;\r\n }\r\n if (newEndY >= 1) {\r\n newStartY = newEndY - differenceY;\r\n }\r\n this.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n }\r\n if (mouseWheelBehavior == \"zoomX\" || mouseWheelBehavior == \"zoomXY\") {\r\n var locationX = plotPoint.x / plotContainer.maxWidth;\r\n var location2X = this.xAxes.getIndex(0).toAxisPosition(locationX);\r\n var newStartX = Math.max(-maxPanOut, rangeX.start - shiftStep * (rangeX.end - rangeX.start) * shift / 100 * locationX);\r\n newStartX = Math.min(newStartX, location2X);\r\n var newEndX = Math.min(rangeX.end + shiftStep * (rangeX.end - rangeX.start) * shift / 100 * (1 - locationX), 1 + maxPanOut);\r\n newEndX = Math.max(newEndX, location2X);\r\n this.zoomAxes(this.xAxes, { start: newStartX, end: newEndX }, undefined, undefined, undefined, true);\r\n }\r\n if (mouseWheelBehavior == \"zoomY\" || mouseWheelBehavior == \"zoomXY\") {\r\n var locationY = plotPoint.y / plotContainer.maxHeight;\r\n var location2Y = this.yAxes.getIndex(0).toAxisPosition(locationY);\r\n var newStartY = Math.max(-maxPanOut, rangeY.start - shiftStep * (rangeY.end - rangeY.start) * shift / 100 * (1 - locationY));\r\n newStartY = Math.min(newStartY, location2Y);\r\n var newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * locationY * (rangeY.end - rangeY.start), 1 + maxPanOut);\r\n newEndY = Math.max(newEndY, location2Y);\r\n this.zoomAxes(this.yAxes, { start: newStartY, end: newEndY }, undefined, undefined, undefined, true);\r\n }\r\n }\r\n };\r\n Object.defineProperty(XYChart.prototype, \"mouseWheelBehavior\", {\r\n /**\r\n * @return Mouse wheel behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"mouseWheelBehavior\");\r\n },\r\n /**\r\n * Specifies action for when mouse wheel is used when over the chart.\r\n *\r\n * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`,`\"panXY\"`, `\"none\"` (default).\r\n *\r\n * You can control sensitivity of wheel zooming via `mouseOptions`.\r\n *\r\n * @default \"none\"\r\n * @see {@link https://www.amcharts.com/docs/v4/reference/sprite/#mouseOptions_property} More information about `mouseOptions`\r\n * @param mouse wheel behavior\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n if (value != \"none\") {\r\n this._mouseWheelDisposer = this.plotContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n this._disposers.push(this._mouseWheelDisposer);\r\n }\r\n else {\r\n if (this._mouseWheelDisposer) {\r\n this.plotContainer.wheelable = false;\r\n this.plotContainer.hoverable = false;\r\n this._mouseWheelDisposer.dispose();\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart.prototype, \"horizontalMouseWheelBehavior\", {\r\n /**\r\n * @return Horizontal mouse wheel behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"horizontalMouseWheelBehavior\");\r\n },\r\n /**\r\n * Specifies action for when horizontal mouse wheel is used when over the chart.\r\n *\r\n * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`, `\"panXY\"`, `\"none\"` (default).\r\n *\r\n * @default \"none\"\r\n * @see {@link https://www.amcharts.com/docs/v4/reference/sprite/#mouseOptions_property} More information about `mouseOptions`\r\n * @param mouse wheel behavior\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"horizontalMouseWheelBehavior\", value)) {\r\n if (value != \"none\") {\r\n this._mouseWheelDisposer2 = this.plotContainer.events.on(\"wheel\", this.handleHorizontalWheel, this, false);\r\n this._disposers.push(this._mouseWheelDisposer2);\r\n }\r\n else {\r\n if (this._mouseWheelDisposer2) {\r\n this.plotContainer.wheelable = false;\r\n this.plotContainer.hoverable = false;\r\n this._mouseWheelDisposer2.dispose();\r\n }\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * This function is called by the [[DataSource]]'s `dateFields` adapater\r\n * so that particular chart types can popuplate this setting with their\r\n * own type-specific data fields so they are parsed properly.\r\n *\r\n * @param fields Array of date fields\r\n * @return Array of date fields populated with chart's date fields\r\n */\r\n XYChart.prototype.dataSourceDateFields = function (fields) {\r\n var _this = this;\r\n // Process parent\r\n fields = _super.prototype.dataSourceDateFields.call(this, fields);\r\n // Check if we have any series with date-fields\r\n $iter.each(this.series.iterator(), function (series) {\r\n fields = _this.populateDataSourceFields(fields, series.dataFields, [\"dateX\", \"dateY\", \"openDateX\", \"openDateY\"]);\r\n });\r\n return fields;\r\n };\r\n /**\r\n * This function is called by the [[DataSource]]'s `numberFields` adapater\r\n * so that particular chart types can popuplate this setting with their\r\n * own type-specific data fields so they are parsed properly.\r\n *\r\n * @param value Array of number fields\r\n * @return Array of number fields populated with chart's number fields\r\n */\r\n XYChart.prototype.dataSourceNumberFields = function (fields) {\r\n var _this = this;\r\n fields = _super.prototype.dataSourceDateFields.call(this, fields);\r\n // Check if we have any series with date-fields\r\n $iter.each(this.series.iterator(), function (series) {\r\n fields = _this.populateDataSourceFields(fields, series.dataFields, [\"valueX\", \"valueY\", \"openValueX\", \"openValueY\"]);\r\n });\r\n return fields;\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n XYChart.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Save axis ranges for later processing\r\n var xAxes = [];\r\n var yAxes = [];\r\n // Set up axes\r\n if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n for (var i = 0, len = config.xAxes.length; i < len; i++) {\r\n if (!config.xAxes[i].type) {\r\n throw Error(\"[XYChart error] No type set for xAxes[\" + i + \"].\");\r\n }\r\n else if ($type.hasValue(config.xAxes[i][\"axisRanges\"])) {\r\n // Maybe convert string dates?\r\n for (var x = 0, len_1 = config.xAxes[i][\"axisRanges\"].length; x < len_1; x++) {\r\n var range = config.xAxes[i][\"axisRanges\"][x];\r\n if ($type.hasValue(range.date) && $type.isString(range.date)) {\r\n range.date = this.dateFormatter.parse(range.date);\r\n }\r\n if ($type.hasValue(range.endDate) && $type.isString(range.endDate)) {\r\n range.endDate = this.dateFormatter.parse(range.endDate);\r\n }\r\n }\r\n xAxes.push({\r\n axisRanges: config.xAxes[i][\"axisRanges\"],\r\n index: i\r\n });\r\n delete (config.xAxes[i][\"axisRanges\"]);\r\n }\r\n }\r\n }\r\n if ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n for (var i = 0, len = config.yAxes.length; i < len; i++) {\r\n if (!config.yAxes[i].type) {\r\n throw Error(\"[XYChart error] No type set for yAxes[\" + i + \"].\");\r\n }\r\n else if ($type.hasValue(config.yAxes[i][\"axisRanges\"])) {\r\n // Maybe convert string dates?\r\n for (var x = 0, len_2 = config.yAxes[i][\"axisRanges\"].length; x < len_2; x++) {\r\n var range = config.yAxes[i][\"axisRanges\"][x];\r\n if ($type.hasValue(range.date) && $type.isString(range.date)) {\r\n range.date = this.dateFormatter.parse(range.date);\r\n }\r\n if ($type.hasValue(range.endDate) && $type.isString(range.endDate)) {\r\n range.endDate = this.dateFormatter.parse(range.endDate);\r\n }\r\n }\r\n yAxes.push({\r\n axisRanges: config.yAxes[i][\"axisRanges\"],\r\n index: i\r\n });\r\n delete (config.yAxes[i][\"axisRanges\"]);\r\n }\r\n }\r\n }\r\n // Set up series\r\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n for (var i = 0, len = config.series.length; i < len; i++) {\r\n config.series[i].type = config.series[i].type || \"LineSeries\";\r\n }\r\n }\r\n // Set up cursor\r\n if ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n config.cursor.type = \"XYCursor\";\r\n }\r\n // Set up scrollbars\r\n if ($type.hasValue(config.scrollbarX) && !$type.hasValue(config.scrollbarX.type)) {\r\n config.scrollbarX.type = \"Scrollbar\";\r\n }\r\n if ($type.hasValue(config.scrollbarY) && !$type.hasValue(config.scrollbarY.type)) {\r\n config.scrollbarY.type = \"Scrollbar\";\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n // Finish up with ranges.\r\n // We need to do this here because series are processed last in JSON\r\n // config. Therefore their respective objects are not yet are available\r\n // when axis (and respectively their ranges) are being processed.\r\n if (yAxes.length) {\r\n for (var i = 0, len = yAxes.length; i < len; i++) {\r\n this.yAxes.getIndex(yAxes[i].index).config = {\r\n axisRanges: yAxes[i].axisRanges\r\n };\r\n }\r\n }\r\n if (xAxes.length) {\r\n for (var i = 0, len = xAxes.length; i < len; i++) {\r\n this.xAxes.getIndex(xAxes[i].index).config = {\r\n axisRanges: xAxes[i].axisRanges\r\n };\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\r\n XYChart.prototype.configOrder = function (a, b) {\r\n if (a == b) {\r\n return 0;\r\n }\r\n // Must come last\r\n else if (a == \"scrollbarX\") {\r\n return 1;\r\n }\r\n else if (b == \"scrollbarX\") {\r\n return -1;\r\n }\r\n else if (a == \"scrollbarY\") {\r\n return 1;\r\n }\r\n else if (b == \"scrollbarY\") {\r\n return -1;\r\n }\r\n else if (a == \"cursor\") {\r\n return 1;\r\n }\r\n else if (b == \"cursor\") {\r\n return -1;\r\n }\r\n else if (a == \"series\") {\r\n return 1;\r\n }\r\n else if (b == \"series\") {\r\n return -1;\r\n }\r\n else {\r\n return _super.prototype.configOrder.call(this, a, b);\r\n }\r\n };\r\n /**\r\n * Creates a new Series of type suitable for this chart.\r\n *\r\n * @return New series\r\n */\r\n XYChart.prototype.createSeries = function () {\r\n return new XYSeries();\r\n };\r\n Object.defineProperty(XYChart.prototype, \"zoomOutButton\", {\r\n /**\r\n * @return Zoom out button\r\n */\r\n get: function () {\r\n return this._zoomOutButton;\r\n },\r\n /**\r\n * A [[Button]] element that is used for zooming out the chart.\r\n *\r\n * This button appears only when chart is zoomed in, and disappears\r\n * autoamatically when it is zoome dout.\r\n *\r\n * @param button Zoom out button\r\n */\r\n set: function (button) {\r\n var _this = this;\r\n this._zoomOutButton = button;\r\n if (button) {\r\n button.events.on(\"hit\", function () {\r\n _this.zoomAxes(_this.xAxes, { start: 0, end: 1 });\r\n _this.zoomAxes(_this.yAxes, { start: 0, end: 1 });\r\n }, undefined, false);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all parameters from another [[XYChart]].\r\n *\r\n * @param source Source XYChart\r\n */\r\n XYChart.prototype.copyFrom = function (source) {\r\n var _this = this;\r\n source.xAxes.each(function (axis) {\r\n var a = _this.xAxes.push(axis.clone());\r\n a.chart = _this;\r\n a.renderer.chart = _this;\r\n });\r\n source.yAxes.each(function (axis) {\r\n var a = _this.yAxes.push(axis.clone());\r\n a.renderer.chart = _this;\r\n a.chart = _this;\r\n });\r\n //this.xAxes.copyFrom(source.xAxes);\r\n //this.yAxes.copyFrom(source.yAxes);\r\n _super.prototype.copyFrom.call(this, source);\r\n //this.zoomOutButton.copyFrom(source.zoomOutButton);\r\n if (source.cursor) {\r\n this.cursor = source.cursor.clone();\r\n }\r\n if (source.scrollbarX) {\r\n this.scrollbarX = source.scrollbarX.clone();\r\n }\r\n if (source.scrollbarY) {\r\n this.scrollbarY = source.scrollbarY.clone();\r\n }\r\n //@todo copy all container properties\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n var scrollbarX = this.scrollbarX;\r\n if (scrollbarX && scrollbarX instanceof XYChartScrollbar) {\r\n scrollbarX.scrollbarChart.disposeData();\r\n }\r\n var scrollbarY = this.scrollbarY;\r\n if (scrollbarY && scrollbarY instanceof XYChartScrollbar) {\r\n scrollbarY.scrollbarChart.disposeData();\r\n }\r\n this.xAxes.each(function (axis) {\r\n if (axis instanceof CategoryAxis) {\r\n axis.disposeData();\r\n }\r\n });\r\n this.yAxes.each(function (axis) {\r\n if (axis instanceof CategoryAxis) {\r\n axis.disposeData();\r\n }\r\n });\r\n };\r\n /**\r\n * Adds one or several (array) of data items to the existing data.\r\n *\r\n * @param rawDataItem One or many raw data item objects\r\n */\r\n XYChart.prototype.addData = function (rawDataItem, removeCount) {\r\n if (this.scrollbarX instanceof XYChartScrollbar) {\r\n this.addScrollbarData(this.scrollbarX, removeCount);\r\n }\r\n if (this.scrollbarY instanceof XYChartScrollbar) {\r\n this.addScrollbarData(this.scrollbarY, removeCount);\r\n }\r\n _super.prototype.addData.call(this, rawDataItem, removeCount);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.addScrollbarData = function (scrollbar, removeCount) {\r\n var chart = scrollbar.scrollbarChart;\r\n chart._parseDataFrom = chart.data.length;\r\n chart.invalidateData();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n XYChart.prototype.removeScrollbarData = function (scrollbar, removeCount) {\r\n var chart = scrollbar.scrollbarChart;\r\n if ($type.isNumber(removeCount)) {\r\n while (removeCount > 0) {\r\n var dataItem = this.dataItems.getIndex(0);\r\n if (dataItem) {\r\n chart.dataItems.remove(dataItem);\r\n }\r\n chart.dataUsers.each(function (dataUser) {\r\n var dataItem = dataUser.dataItems.getIndex(0);\r\n if (dataItem) {\r\n dataUser.dataItems.remove(dataItem);\r\n }\r\n });\r\n chart._parseDataFrom--;\r\n removeCount--;\r\n }\r\n chart.invalidateData();\r\n }\r\n };\r\n /**\r\n * Removes elements from the beginning of data\r\n *\r\n * @param count number of elements to remove\r\n */\r\n XYChart.prototype.removeData = function (count) {\r\n if (this.scrollbarX instanceof XYChartScrollbar) {\r\n this.removeScrollbarData(this.scrollbarX, count);\r\n }\r\n if (this.scrollbarY instanceof XYChartScrollbar) {\r\n this.removeScrollbarData(this.scrollbarY, count);\r\n }\r\n _super.prototype.removeData.call(this, count);\r\n };\r\n /**\r\n * @param value Tap to activate?\r\n */\r\n XYChart.prototype.setTapToActivate = function (value) {\r\n _super.prototype.setTapToActivate.call(this, value);\r\n if (this.cursor) {\r\n this.cursor.interactions.isTouchProtected = value;\r\n this.plotContainer.interactions.isTouchProtected = value;\r\n }\r\n };\r\n XYChart.prototype.handleTapToActivate = function () {\r\n _super.prototype.handleTapToActivate.call(this);\r\n if (this.cursor) {\r\n this.cursor.interactions.isTouchProtected = false;\r\n this.plotContainer.interactions.isTouchProtected = false;\r\n }\r\n };\r\n XYChart.prototype.handleTapToActivateDeactivation = function () {\r\n _super.prototype.handleTapToActivateDeactivation.call(this);\r\n if (this.cursor) {\r\n this.cursor.interactions.isTouchProtected = true;\r\n this.plotContainer.interactions.isTouchProtected = true;\r\n }\r\n };\r\n return XYChart;\r\n}(SerialChart));\r\nexport { XYChart };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart\"] = XYChart;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Remove horizontal scrollbar on narrow charts.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.maybeXS,\r\n state: function (target, stateId) {\r\n if (target instanceof XYChart && target.scrollbarX) {\r\n var state = target.states.create(stateId);\r\n var sbstate = target.scrollbarX.states.create(stateId);\r\n sbstate.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n/**\r\n * Remove vertical scrollbar on short charts.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.maybeXS,\r\n state: function (target, stateId) {\r\n if (target instanceof XYChart && target.scrollbarY) {\r\n var state = target.states.create(stateId);\r\n var sbstate = target.scrollbarY.states.create(stateId);\r\n sbstate.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=XYChart.js.map","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite, visualProperties } from \"../../core/Sprite\";\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 $type from \"../../core/utils/Type\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar LineSeriesSegment = /** @class */ (function (_super) {\r\n __extends(LineSeriesSegment, _super);\r\n /**\r\n * Constructor\r\n */\r\n function LineSeriesSegment() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"LineSeriesSegment\";\r\n // Set defaults\r\n _this.isMeasured = false;\r\n _this.interactionsEnabled = false;\r\n _this.layout = \"none\";\r\n // Create fill element\r\n var fillSprite = _this.createChild(Sprite);\r\n _this.fillSprite = fillSprite;\r\n fillSprite.shouldClone = false;\r\n fillSprite.setElement(_this.paper.add(\"path\"));\r\n fillSprite.isMeasured = false;\r\n _this._disposers.push(fillSprite);\r\n // Create line element\r\n var strokeSprite = _this.createChild(Sprite);\r\n _this.strokeSprite = strokeSprite;\r\n strokeSprite.shouldClone = false;\r\n strokeSprite.fill = color();\r\n strokeSprite.setElement(_this.paper.add(\"path\"));\r\n strokeSprite.isMeasured = false;\r\n _this._disposers.push(strokeSprite);\r\n return _this;\r\n }\r\n /**\r\n * Draws the series segment.\r\n *\r\n * @ignore Exclude from docs\r\n * @param points Points to connect\r\n * @param closePoints ?\r\n * @param smoothnessX Horizontal bezier setting (?)\r\n * @param smoothnessY Vertical bezier setting (?)\r\n */\r\n LineSeriesSegment.prototype.drawSegment = function (points, closePoints, smoothnessX, smoothnessY) {\r\n if (!this.disabled) {\r\n if (points.length > 0 && closePoints.length > 0 && $type.isNumber(points[0].x) && $type.isNumber(points[0].y)) {\r\n // first moveTo helps to avoid Chrome straight line in the mask bug.\r\n var path = $path.moveTo({ x: points[0].x - 0.2, y: points[0].y - 0.2 }) + $path.moveTo(points[0]);\r\n var series = this.series;\r\n if (series.smoothing == \"bezier\") {\r\n path += new $smoothing.Tension(smoothnessX, smoothnessY).smooth(points);\r\n }\r\n else if (series.smoothing == \"monotoneX\") {\r\n path += new $smoothing.MonotoneX({ closed: false }).smooth(points);\r\n }\r\n else if (series.smoothing == \"monotoneY\") {\r\n path += new $smoothing.MonotoneY({ closed: false }).smooth(points);\r\n }\r\n if (this.strokeOpacity == 0 || this.strokeSprite.strokeOpacity == 0) {\r\n // like this and not if != 0, otherwise ranges stroke won't be drawn.\r\n }\r\n else {\r\n this.strokeSprite.path = path;\r\n }\r\n if (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n if ($type.isNumber(closePoints[0].x) && $type.isNumber(closePoints[0].y)) {\r\n path += $path.lineTo(closePoints[0]);\r\n if (series.smoothing == \"bezier\") {\r\n path += new $smoothing.Tension(smoothnessX, smoothnessY).smooth(closePoints);\r\n }\r\n else if (series.smoothing == \"monotoneX\") {\r\n path += new $smoothing.MonotoneX({ closed: false }).smooth(closePoints);\r\n }\r\n else if (series.smoothing == \"monotoneY\") {\r\n path += new $smoothing.MonotoneY({ closed: false }).smooth(closePoints);\r\n }\r\n path += $path.lineTo(points[0]);\r\n path += $path.closePath();\r\n this.fillSprite.path = path;\r\n }\r\n }\r\n }\r\n else {\r\n this.fillSprite.path = \"\";\r\n this.strokeSprite.path = \"\";\r\n }\r\n }\r\n };\r\n /**\r\n * Copies properties from a [[Sprite]] to both line and fill elements.\r\n *\r\n * @param source Source [[Sprite]] to copy properties from\r\n */\r\n LineSeriesSegment.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n var lineElement = this.strokeSprite;\r\n $object.copyProperties(source, lineElement.properties, visualProperties);\r\n lineElement.events.copyFrom(source.strokeSprite.events);\r\n lineElement.fillOpacity = 0;\r\n var fillElement = this.fillSprite;\r\n $object.copyProperties(source, fillElement.properties, visualProperties);\r\n fillElement.events.copyFrom(source.fillSprite.events);\r\n fillElement.strokeOpacity = 0;\r\n };\r\n return LineSeriesSegment;\r\n}(Container));\r\nexport { LineSeriesSegment };\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//# sourceMappingURL=LineSeriesSegment.js.map","/**\r\n * DurationAxis module\r\n */\r\nimport { __extends, __values } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem } from \"./ValueAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines data item for [[DurationAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar DurationAxisDataItem = /** @class */ (function (_super) {\r\n __extends(DurationAxisDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function DurationAxisDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"DurationAxisDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return DurationAxisDataItem;\r\n}(ValueAxisDataItem));\r\nexport { DurationAxisDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar DurationAxis = /** @class */ (function (_super) {\r\n __extends(DurationAxis, _super);\r\n /**\r\n * Constructor\r\n */\r\n function DurationAxis() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A base unit (granularity) of data.\r\n *\r\n * Used to indicate what are the base units of your data.\r\n */\r\n _this._baseUnit = \"second\";\r\n _this.className = \"DurationAxis\";\r\n _this.setPropertyValue(\"maxZoomFactor\", 1000000);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Formats the value according to axis' own [[DurationFormatter]].\r\n *\r\n * @param value Source value\r\n * @return Formatted value\r\n */\r\n DurationAxis.prototype.formatLabel = function (value, format) {\r\n return this.durationFormatter.format(value, format || this.axisDurationFormat);\r\n };\r\n /**\r\n * Adjusts actual min and max scale values so that the axis starts and ends\r\n * at \"nice\" values, unless `strictMinMax` is set.\r\n *\r\n * The `difference` can be something else than `max - min`, because of the\r\n * axis breaks.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param min [description]\r\n * @param max [description]\r\n * @param difference [description]\r\n * @param gridCount [description]\r\n * @param strictMode [description]\r\n * @return [description]\r\n */\r\n DurationAxis.prototype.adjustMinMax = function (min, max, difference, gridCount, strictMode) {\r\n var e_1, _a;\r\n var minMaxStep;\r\n var timeUnit = this.baseUnit;\r\n // we don't allow to go to smaller units, setting so to avoid invalidation\r\n this.setPropertyValue(\"maxPrecision\", 0);\r\n if (timeUnit == \"millisecond\" || timeUnit == \"second\" || timeUnit == \"minute\" || timeUnit == \"hour\") {\r\n // will fail if 0\r\n if (gridCount <= 1) {\r\n gridCount = 1;\r\n }\r\n gridCount = Math.round(gridCount);\r\n var initialMin = min;\r\n var initialMax = max;\r\n // in case min and max is the same, use max\r\n if (difference === 0) {\r\n difference = Math.abs(max);\r\n }\r\n var step = difference / gridCount;\r\n var divisors = [60, 30, 20, 15, 10, 2, 1];\r\n var realDivisor = 1;\r\n if (timeUnit == \"hour\") {\r\n divisors = [24, 12, 6, 4, 2, 1];\r\n }\r\n try {\r\n for (var divisors_1 = __values(divisors), divisors_1_1 = divisors_1.next(); !divisors_1_1.done; divisors_1_1 = divisors_1.next()) {\r\n var divisor = divisors_1_1.value;\r\n if (difference / divisor > gridCount) {\r\n realDivisor = divisor;\r\n break;\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (divisors_1_1 && !divisors_1_1.done && (_a = divisors_1.return)) _a.call(divisors_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n var count = Math.ceil(((max - min) / realDivisor) / gridCount);\r\n var exponent = Math.log(Math.abs(count)) * Math.LOG10E;\r\n var power = Math.pow(10, Math.floor(exponent)) / 10;\r\n var reducedCount = count / power;\r\n // find closest to divisor\r\n var closest = $math.closest(divisors, reducedCount);\r\n count = closest * power;\r\n step = realDivisor * count;\r\n // TODO can this be removed ?\r\n this.durationFormatter.getValueUnit(step, this.baseUnit);\r\n min = Math.floor(min / step) * step;\r\n max = Math.ceil(max / step) * step;\r\n if (strictMode) {\r\n min -= step;\r\n if (min < 0 && initialMin >= 0) {\r\n min = 0;\r\n }\r\n max += step;\r\n if (max > 0 && initialMax <= 0) {\r\n max = 0;\r\n }\r\n }\r\n minMaxStep = { min: min, max: max, step: step };\r\n }\r\n else {\r\n minMaxStep = _super.prototype.adjustMinMax.call(this, min, max, difference, gridCount, strictMode);\r\n }\r\n // choose duration formatter based on step\r\n this.axisDurationFormat = this.durationFormatter.getFormat(minMaxStep.step, minMaxStep.max, this.baseUnit);\r\n return minMaxStep;\r\n };\r\n Object.defineProperty(DurationAxis.prototype, \"tooltipDurationFormat\", {\r\n /**\r\n * @return Duration format for axis labels\r\n */\r\n get: function () {\r\n return this._tooltipDurationFormat;\r\n },\r\n /**\r\n * A special duration format to apply axis tooltips.\r\n *\r\n * Will use same format as for labels, if not set.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information.\r\n * @param value Duration format for axis labels\r\n */\r\n set: function (value) {\r\n this._tooltipDurationFormat = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns text to show in a axis tooltip, based on specific position within\r\n * axis.\r\n *\r\n * The label will be formatted as per [[NumberFormatter]] set for the whole\r\n * chart, or explicitly for this Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position (px)\r\n * @return Label (numeric value)\r\n */\r\n DurationAxis.prototype.getTooltipText = function (position) {\r\n var value = $math.round(this.positionToValue(position), this._stepDecimalPlaces);\r\n var valueStr = this.formatLabel(value, this.tooltipDurationFormat);\r\n if (!this._adapterO) {\r\n return valueStr;\r\n }\r\n else {\r\n return this._adapterO.apply(\"getTooltipText\", valueStr);\r\n }\r\n };\r\n Object.defineProperty(DurationAxis.prototype, \"baseUnit\", {\r\n /**\r\n * @return Base unit\r\n */\r\n get: function () {\r\n return this._baseUnit;\r\n },\r\n /**\r\n * A base unit (granularity) of data.\r\n *\r\n * Used to indicate what are the base units of your data.\r\n *\r\n * Available options: \"millisecond\", \"second\" (default), \"minute\", \"hour\",\r\n * \"day\", \"week\", \"month\", \"year\".\r\n *\r\n * @default \"second\"\r\n * @param timeUnit\r\n */\r\n set: function (timeUnit) {\r\n if (this._baseUnit != timeUnit) {\r\n this._baseUnit = timeUnit;\r\n this.durationFormatter.baseUnit = timeUnit;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all properties and related data from a different instance of Axis.\r\n *\r\n * @param source Source Axis\r\n */\r\n DurationAxis.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.baseUnit = source.baseUnit;\r\n };\r\n return DurationAxis;\r\n}(ValueAxis));\r\nexport { DurationAxis };\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//# sourceMappingURL=DurationAxis.js.map","/**\r\n * Line series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem } from \"./XYSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { DurationAxis } from \"../axes/DurationAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[LineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar LineSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(LineSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function LineSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"LineSeriesDataItem\";\r\n return _this;\r\n }\r\n return LineSeriesDataItem;\r\n}(XYSeriesDataItem));\r\nexport { LineSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar LineSeries = /** @class */ (function (_super) {\r\n __extends(LineSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function LineSeries() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Minimum distance in pixels between two adjacent points.\r\n *\r\n * If the distance is less than this setting, a point is skipped.\r\n *\r\n * This allows acceptable performance with huge amounts of data points.\r\n *\r\n * @default 0.5\r\n */\r\n _this.minDistance = 0.5;\r\n _this.segments = new ListTemplate(_this.createSegment());\r\n _this.segments.template.applyOnClones = true;\r\n _this._disposers.push(new ListDisposer(_this.segments));\r\n _this._disposers.push(_this.segments.template);\r\n _this._segmentsIterator = new $iter.ListIterator(_this.segments, function () { return _this.segments.create(); });\r\n _this._segmentsIterator.createNewItems = true;\r\n _this.className = \"LineSeries\";\r\n _this.strokeOpacity = 1;\r\n _this.fillOpacity = 0;\r\n _this.connect = true;\r\n _this.tensionX = 1;\r\n _this.tensionY = 1;\r\n _this.autoGapCount = 1.1;\r\n _this.smoothing = \"bezier\";\r\n _this.segmentsContainer = _this.mainContainer.createChild(Container);\r\n _this.segmentsContainer.isMeasured = false;\r\n // 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 // todo: we need list here, otherwise everything will be redrawn event on change of properties like tooltipX or similar.\r\n // this.addEventListener(SpriteEvent.PROPERTY_CHANGED, this.validateDataElements, false, this);\r\n _this.bulletsContainer.toFront();\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n LineSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Line Series\");\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n LineSeries.prototype.createSegment = function () {\r\n return new LineSeriesSegment();\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n LineSeries.prototype.createDataItem = function () {\r\n return new LineSeriesDataItem();\r\n };\r\n /**\r\n * Inits data item's working values.\r\n *\r\n * @param dataItem Data item\r\n * @param index Data item's index\r\n */\r\n LineSeries.prototype.setInitialWorkingValues = function (dataItem) {\r\n // this makes data items animate when added\r\n var yAxis = this._yAxis.get();\r\n var xAxis = this._xAxis.get();\r\n if (this.appeared && this.visible) {\r\n var previousDataItem = this.dataItems.getIndex(dataItem.index - 1);\r\n dataItem.component = this; // as these values are set before, we don't know component yet\r\n if (this.baseAxis == xAxis) {\r\n if (yAxis instanceof ValueAxis) {\r\n var initialY = yAxis.minZoomed;\r\n if (previousDataItem) {\r\n initialY = previousDataItem.values[\"valueY\"].workingValue;\r\n }\r\n // this makes line animate from previous point to newly added point\r\n dataItem.setWorkingValue(\"valueY\", initialY, 0);\r\n dataItem.setWorkingValue(\"valueY\", dataItem.values.valueY.value);\r\n if (xAxis instanceof DateAxis) {\r\n dataItem.setWorkingLocation(\"dateX\", dataItem.locations.dateX - 1, 0); // instantly move it to previous\r\n dataItem.setWorkingLocation(\"dateX\", dataItem.locations.dateX); // animate to it's location\r\n }\r\n else if (xAxis instanceof DurationAxis) {\r\n if (previousDataItem) {\r\n var value = dataItem.valueX;\r\n dataItem.setWorkingValue(\"valueX\", previousDataItem.valueX, 0); // instantly move it to previous\r\n dataItem.setWorkingValue(\"valueX\", value); // animate to new value\r\n }\r\n }\r\n }\r\n }\r\n if (this.baseAxis == yAxis) {\r\n if (xAxis instanceof ValueAxis) {\r\n var initialX = xAxis.minZoomed;\r\n if (previousDataItem) {\r\n initialX = previousDataItem.values[\"valueX\"].workingValue;\r\n }\r\n dataItem.setWorkingValue(\"valueX\", initialX, 0);\r\n dataItem.setWorkingValue(\"valueX\", dataItem.values.valueX.value);\r\n if (yAxis instanceof DateAxis) {\r\n dataItem.setWorkingLocation(\"dateY\", dataItem.locations.dateX - 1, 0); // instantly move it to previous\r\n dataItem.setWorkingLocation(\"dateY\", dataItem.locations.dateY); // animate to it's location\r\n }\r\n else if (yAxis instanceof DurationAxis) {\r\n if (previousDataItem) {\r\n var value = dataItem.valueY;\r\n dataItem.setWorkingValue(\"valueY\", previousDataItem.valueY, 0); // instantly move it to previous\r\n dataItem.setWorkingValue(\"valueY\", value); // animate to new value\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n if (this.baseAxis == xAxis) {\r\n if (yAxis instanceof ValueAxis) {\r\n if (xAxis instanceof DateAxis) {\r\n dataItem.setWorkingLocation(\"dateX\", dataItem.locations.dateX);\r\n }\r\n if (xAxis instanceof CategoryAxis) {\r\n dataItem.setWorkingLocation(\"categoryX\", dataItem.locations.categoryX);\r\n }\r\n }\r\n }\r\n if (this.baseAxis == yAxis) {\r\n if (xAxis instanceof ValueAxis) {\r\n if (yAxis instanceof DateAxis) {\r\n dataItem.setWorkingLocation(\"dateY\", dataItem.locations.dateY);\r\n }\r\n if (yAxis instanceof CategoryAxis) {\r\n dataItem.setWorkingLocation(\"categoryY\", dataItem.locations.categoryY);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Updates corresponding legend data item with current values.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n LineSeries.prototype.updateLegendValue = function (dataItem, notRange) {\r\n _super.prototype.updateLegendValue.call(this, dataItem, notRange);\r\n //This is hack to save some methos, used to set tooltip color source only\r\n if (dataItem && dataItem.segment) {\r\n this.tooltipColorSource = dataItem.segment;\r\n }\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n LineSeries.prototype.validate = function () {\r\n var _this = this;\r\n _super.prototype.validate.call(this);\r\n if (this.xAxis && this.yAxis) {\r\n this._segmentsIterator.reset();\r\n this.openSegmentWrapper(this._adjustedStartIndex);\r\n $iter.each(this.axisRanges.iterator(), function (range) {\r\n _this.openSegmentWrapper(_this._adjustedStartIndex, range);\r\n });\r\n $iter.each(this._segmentsIterator.iterator(), function (segment) {\r\n segment.__disabled = true;\r\n });\r\n }\r\n };\r\n /**\r\n * [sliceData description]\r\n *\r\n * @todo Description\r\n */\r\n LineSeries.prototype.sliceData = function () {\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n // 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 // find first to the left\r\n // TODO use iterator instead\r\n for (var i = this.startIndex - 1; i >= 0; i--) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n startIndex = i;\r\n break;\r\n }\r\n }\r\n this._adjustedStartIndex = this.findAdjustedIndex(startIndex, [\"stroke\", \"strokeWidth\", \"strokeDasharray\", \"strokeOpacity\", \"fill\", \"fillOpacity\", \"opacity\"]);\r\n // find first to the right\r\n // TODO use iterator instead\r\n for (var i = this.endIndex, len = this.dataItems.length; i < len; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n endIndex = i + 1;\r\n break;\r\n }\r\n }\r\n this._workingStartIndex = startIndex;\r\n this._workingEndIndex = endIndex;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n LineSeries.prototype.findAdjustedIndex = function (adjustedIndex, properties) {\r\n var _this = this;\r\n var propertyFields = this.propertyFields;\r\n var startIndex = adjustedIndex;\r\n $array.each(properties, function (property) {\r\n if ($type.hasValue(propertyFields[property])) {\r\n for (var i = startIndex; i >= 0; i--) {\r\n var dataItem = _this.dataItems.getIndex(i);\r\n if (dataItem) {\r\n if ($type.hasValue(dataItem.properties[property])) {\r\n if (adjustedIndex > i) {\r\n adjustedIndex = i;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n return adjustedIndex;\r\n };\r\n /**\r\n * Wraps openSegment call with iterative solution to prevent stack overflow\r\n *\r\n * @param openIndex Index\r\n * @param axisRange Range\r\n */\r\n LineSeries.prototype.openSegmentWrapper = function (openIndex, axisRange) {\r\n var params = {\r\n \"index\": openIndex,\r\n \"axisRange\": axisRange\r\n };\r\n do {\r\n params = this.openSegment(params.index, params.axisRange);\r\n } while (params);\r\n };\r\n LineSeries.prototype.getSegment = function () {\r\n var segment = this._segmentsIterator.getFirst();\r\n segment.series = this;\r\n if (segment.isDisposed()) {\r\n this.segments.removeValue(segment);\r\n return this.getSegment();\r\n }\r\n return segment;\r\n };\r\n /**\r\n * [openSegment description]\r\n *\r\n * @todo Description\r\n * @param openIndex [description]\r\n * @param axisRange [description]\r\n */\r\n LineSeries.prototype.openSegment = function (openIndex, axisRange) {\r\n var addToClose = false;\r\n var points = [];\r\n openIndex = Math.min(openIndex, this.dataItems.length);\r\n var endIndex = Math.min(this._workingEndIndex, this.dataItems.length);\r\n this._workingEndIndex = Math.min(this._workingEndIndex, this.dataItems.length);\r\n var closeIndex;\r\n var propertiesChanged = false;\r\n var segment = this.getSegment();\r\n segment.strokeDasharray = undefined;\r\n segment.__disabled = false;\r\n if (axisRange) {\r\n segment.parent = axisRange.contents;\r\n $object.copyProperties(axisRange.contents, segment, visualProperties);\r\n }\r\n else {\r\n $object.copyProperties(this, segment, visualProperties);\r\n segment.filters.clear();\r\n segment.parent = this.segmentsContainer;\r\n }\r\n this.group.node.removeAttribute(\"fill\");\r\n var connect = this.connect;\r\n var valuesFound = false; // some flag to avoid multiple closes if no values found\r\n for (var i = openIndex; i < endIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n dataItem.segment = segment;\r\n if (dataItem.hasProperties) {\r\n // if this is first item of segment\r\n if (i == openIndex) {\r\n this.updateSegmentProperties(dataItem.properties, segment);\r\n }\r\n else {\r\n // this time we only need to know if properties changed, so we don't pass segment\r\n propertiesChanged = this.updateSegmentProperties(dataItem.properties, segment, true);\r\n }\r\n }\r\n if (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n this.addPoints(points, dataItem, this.xField, this.yField);\r\n valuesFound = true;\r\n }\r\n else {\r\n // if no values in first data item, go to next\r\n if (i == openIndex) {\r\n continue;\r\n }\r\n else {\r\n // stop cycle\r\n if (!connect && valuesFound) {\r\n closeIndex = i;\r\n break;\r\n }\r\n }\r\n }\r\n closeIndex = i;\r\n if (this.baseAxis instanceof DateAxis) {\r\n var next = this.dataItems.getIndex(i + 1);\r\n if (next && this.baseAxis.makeGap(next, dataItem)) {\r\n addToClose = true;\r\n break;\r\n }\r\n }\r\n if (propertiesChanged) {\r\n break;\r\n }\r\n }\r\n return this.closeSegment(segment, points, openIndex, closeIndex, axisRange, addToClose);\r\n };\r\n /**\r\n * [addPoints description]\r\n *\r\n * @todo Description\r\n * @param points [description]\r\n * @param dataItem [description]\r\n * @param xField [description]\r\n * @param yField [description]\r\n * @param backwards [description]\r\n */\r\n LineSeries.prototype.addPoints = function (points, dataItem, xField, yField, backwards) {\r\n var point = this.getPoint(dataItem, xField, yField, dataItem.workingLocations[xField], dataItem.workingLocations[yField]);\r\n if (!backwards) {\r\n dataItem.point = point;\r\n }\r\n points.push(point);\r\n };\r\n /**\r\n * [closeSegment description]\r\n *\r\n * @todo Description\r\n * @param segment [description]\r\n * @param points [description]\r\n * @param openIndex [description]\r\n * @param closeIndex [description]\r\n * @param axisRange [description]\r\n */\r\n LineSeries.prototype.closeSegment = function (segment, points, openIndex, closeIndex, axisRange, add) {\r\n var closePoints = [];\r\n if (this.dataFields[this._xOpenField] ||\r\n this.dataFields[this._yOpenField] ||\r\n this.stacked) {\r\n for (var i = closeIndex; i >= openIndex; i--) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n if (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 this.addPoints(closePoints, dataItem, this.xOpenField, this.yOpenField, true);\r\n }\r\n }\r\n }\r\n else {\r\n var baseAxis = this.baseAxis;\r\n var count = points.length;\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (count > 0) {\r\n if (baseAxis == xAxis) {\r\n closePoints.push({ x: points[count - 1].x, y: yAxis.basePoint.y }); // last x\r\n closePoints.push({ x: points[0].x, y: yAxis.basePoint.y }); // first x\r\n }\r\n else {\r\n closePoints.push({ x: xAxis.basePoint.x, y: points[count - 1].y }); // last y\r\n closePoints.push({ x: xAxis.basePoint.x, y: points[0].y }); // first y\r\n }\r\n }\r\n }\r\n this.drawSegment(segment, points, closePoints);\r\n if (add) {\r\n closeIndex++;\r\n }\r\n if (closeIndex < this._workingEndIndex - 1) {\r\n return { \"index\": closeIndex, \"axisRange\": axisRange };\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n /**\r\n * Draws the line segment.\r\n *\r\n * @param segment Segment\r\n * @param points Segment points\r\n * @param closePoints Segment close points\r\n */\r\n LineSeries.prototype.drawSegment = function (segment, points, closePoints) {\r\n segment.drawSegment(points, closePoints, this.tensionX, this.tensionY);\r\n };\r\n /**\r\n * Segement will get its colors from `this.dataItem`, as thats how\r\n * `getPropertyValue()` method works.\r\n *\r\n * We pass `lineSeriesDataItem.properties` as item here each time when a flag\r\n * `hasProperties` is set to `true` on data item (this means it can contain\r\n * some properties set).\r\n *\r\n * @param itemProperties Item properties\r\n * @param segment Segment\r\n * @return Properties changed?\r\n */\r\n LineSeries.prototype.updateSegmentProperties = function (itemProperties, segment, checkOnly) {\r\n var changed = false;\r\n $object.each(itemProperties, function (propertyName, value) {\r\n // some value must be defined\r\n if ($type.hasValue(value)) {\r\n var currentValue = segment[propertyName];\r\n var currentValueStr = void 0;\r\n // current value can be Color, number, anything. So we check if it has toString, otherwise just do String().\r\n // 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 if (currentValue) {\r\n if (currentValue.toString) {\r\n currentValueStr = currentValue.toString();\r\n }\r\n else {\r\n currentValueStr = currentValue; // not doing String(currentValue) as this will make all Objects the same\r\n }\r\n }\r\n var valueStr = void 0;\r\n if (value) {\r\n if (value.toString) {\r\n valueStr = value.toString();\r\n }\r\n else {\r\n valueStr = value; // not doing String(currentValue) as this will make all Objects the same\r\n }\r\n }\r\n if (currentValue == value || (currentValueStr != undefined && valueStr != undefined && currentValueStr == valueStr)) {\r\n // void\r\n }\r\n else {\r\n if (!checkOnly) {\r\n segment[propertyName] = value;\r\n }\r\n changed = true;\r\n }\r\n }\r\n });\r\n return changed;\r\n };\r\n Object.defineProperty(LineSeries.prototype, \"connect\", {\r\n /**\r\n * @return Connect?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"connect\");\r\n },\r\n /**\r\n * Connect the lines over empty data points?\r\n *\r\n * If set to `true` the line will connect two adjacent data points by a\r\n * straight line. Even if there are data points with missing values\r\n * in-between.\r\n *\r\n * If you set this to `false`, the line will break when there are missing\r\n * values.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Line_series_with_gaps} for more information about this feature\r\n * @default true\r\n * @param value Connect?\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"connect\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LineSeries.prototype, \"tensionX\", {\r\n /**\r\n * @return Horizontal tension (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tensionX\");\r\n },\r\n /**\r\n * Horizontal tension setting of the line (0-1).\r\n *\r\n * Can be used to create smoothed lines. It works like this:\r\n *\r\n * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n * will mean that the \"tension\" is very high, so the line is maximally\r\n * attracted to the points it connects, hence the straight line.\r\n *\r\n * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n *\r\n * The smaller the tension setting, the more relaxed the line and the more\r\n * wide the curve.\r\n *\r\n * This setting is for horizontal tension, meaning the curve will bend in\r\n * such way that it never goes below or above connecting points. To enable\r\n * vertical bending as well, use `tensionY`.\r\n *\r\n * IMPORTANT: line smoothing works best when data items are placed at regular\r\n * intervals. For setups where data items are spaced erratically, enabling\r\n * smoothing might result in awkwardly looking lines.\r\n *\r\n * @default 1\r\n * @param value Horizontal tension (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tensionX\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LineSeries.prototype, \"tensionY\", {\r\n /**\r\n * @return Vertical tension (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tensionY\");\r\n },\r\n /**\r\n * Can be used to create smoothed lines. It works like this:\r\n *\r\n * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n * will mean that the \"tension\" is very high, so the line is maximally\r\n * attracted to the points it connects, hence the straight line.\r\n *\r\n * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n *\r\n * The smaller the tension setting, the more relaxed the line and the more\r\n * wide the curve.\r\n *\r\n * This setting is for vertical tension, meaning the curve might bend in\r\n * such way that it will go below or above connected points.\r\n *\r\n * Combine this setting with `tensionX` to create beautifully looking\r\n * smoothed line series.\r\n *\r\n * @default 1\r\n * @param value Vertical tension (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tensionY\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n LineSeries.prototype.createLegendMarker = function (marker) {\r\n var _this = this;\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.disposeChildren();\r\n var line = marker.createChild(Line);\r\n line.shouldClone = false;\r\n //line.copyFrom(this); coppies events which is not good\r\n $object.copyProperties(this, line, visualProperties);\r\n line.x2 = w;\r\n line.y = h / 2;\r\n line.y2 = 0.00001;\r\n line.visible = true;\r\n if (this.fillOpacity > 0) {\r\n var fill = marker.createChild(Rectangle);\r\n //fill.copyFrom(this); coppies events which is not good\r\n $object.copyProperties(this, fill, visualProperties);\r\n fill.width = w;\r\n fill.height = h;\r\n fill.y = 0;\r\n fill.strokeOpacity = 0;\r\n fill.visible = true;\r\n line.y = 0;\r\n }\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = this.stroke;\r\n legendDataItem.colorOrig = this.fill;\r\n $iter.eachContinue(this.bullets.iterator(), function (bullet) {\r\n if ((bullet instanceof Bullet) && !bullet.copyToLegendMarker) {\r\n return false;\r\n }\r\n var hasLabels = false;\r\n if (bullet instanceof Container) {\r\n // do not copy bullets with labels\r\n $iter.each(bullet.children.iterator(), function (child) {\r\n if (child instanceof Label) {\r\n hasLabels = true;\r\n return true;\r\n }\r\n });\r\n }\r\n if (!hasLabels) {\r\n var clone = bullet.clone();\r\n clone.parent = marker;\r\n clone.isMeasured = true;\r\n clone.tooltipText = undefined;\r\n clone.x = w / 2;\r\n if (_this.fillOpacity > 0) {\r\n clone.y = 0;\r\n }\r\n else {\r\n clone.y = h / 2;\r\n }\r\n clone.visible = true;\r\n // otherwise will not transit to color after hiding\r\n if (!$type.hasValue(clone.fill)) {\r\n clone.fill = _this.fill;\r\n }\r\n if (!$type.hasValue(clone.stroke)) {\r\n clone.stroke = _this.stroke;\r\n }\r\n return false;\r\n }\r\n });\r\n };\r\n /**\r\n * @ignore\r\n */\r\n LineSeries.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this.segments.clear();\r\n };\r\n Object.defineProperty(LineSeries.prototype, \"autoGapCount\", {\r\n /**\r\n * @return Gap count\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"autoGapCount\");\r\n },\r\n /**\r\n * If `connect = false` and distance between two data points is bigger\r\n * than `baseInterval * autoGapCount`, a line will break automatically.\r\n *\r\n * @since 4.2.4\r\n * @param value Gap count\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"autoGapCount\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(LineSeries.prototype, \"smoothing\", {\r\n /**\r\n * @return Smoothing algorithm\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"smoothing\");\r\n },\r\n /**\r\n * Smoothing algorithm to be used for lines.\r\n *\r\n * Available options: `\"bezier\"` (default), `\"monotoneX\"`, and `\"monotoneY\"`.\r\n *\r\n * Monotone options are best suited for data with irregular intervals. Use `\"monotoneX\"` for\r\n * horizontal lines, and `\"monotoneY\"` vertical ones.\r\n *\r\n * NOTE: Both \"monotone\" algorithms will ignore `tensionX` and `tensionY` settings.\r\n *\r\n * @since 4.10.0\r\n * @param value Smoothing algorithm\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"smoothing\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return LineSeries;\r\n}(XYSeries));\r\nexport { LineSeries };\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//# sourceMappingURL=LineSeries.js.map","/**\r\n * Radar series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem } from \"./LineSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n//import { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\n//import { Sprite } from \"../../core/Sprite\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[RadarSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar RadarSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(RadarSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarSeriesDataItem\";\r\n _this.setLocation(\"dateX\", 0, 0);\r\n _this.setLocation(\"dateY\", 0, 0);\r\n _this.setLocation(\"categoryX\", 0, 0);\r\n _this.setLocation(\"categoryY\", 0, 0);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return RadarSeriesDataItem;\r\n}(LineSeriesDataItem));\r\nexport { RadarSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar RadarSeries = /** @class */ (function (_super) {\r\n __extends(RadarSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarSeries\";\r\n _this.connectEnds = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RadarSeries.prototype.validate = function () {\r\n // so that radius would be updated\r\n if (this.chart.invalid) {\r\n this.chart.validate();\r\n }\r\n _super.prototype.validate.call(this);\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n RadarSeries.prototype.createDataItem = function () {\r\n return new RadarSeriesDataItem();\r\n };\r\n /**\r\n * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n *\r\n * @param dataItem Data item\r\n * @param xKey Name of X data field\r\n * @param yKey Name of Y data field\r\n * @param locationX X location\r\n * @param locationY Y location\r\n * @param stackKeyX ?\r\n * @param stackKeyY ?\r\n * @returns Coordinates\r\n */\r\n RadarSeries.prototype.getPoint = function (dataItem, xKey, yKey, locationX, locationY, stackKeyX, stackKeyY) {\r\n if (!stackKeyX) {\r\n stackKeyX = \"valueX\";\r\n }\r\n if (!stackKeyY) {\r\n stackKeyY = \"valueY\";\r\n }\r\n var x = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n var y = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n var radius = $math.getDistance({ x: x, y: y });\r\n // hack to be able to determine angle later\r\n if (radius == 0) {\r\n radius = 0.00001;\r\n }\r\n var angle = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n var startAngle = this.chart.startAngle;\r\n var endAngle = this.chart.endAngle;\r\n //\t\tangle = $math.fitToRange(angle, startAngle, endAngle);\r\n if (angle < startAngle || angle > endAngle) {\r\n return undefined;\r\n }\r\n else {\r\n return { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n }\r\n };\r\n /**\r\n * [addPoints description]\r\n *\r\n * @todo Description\r\n * @param points [description]\r\n * @param dataItem [description]\r\n * @param xField [description]\r\n * @param yField [description]\r\n * @param backwards [description]\r\n */\r\n RadarSeries.prototype.addPoints = function (points, dataItem, xField, yField, backwards) {\r\n var point = this.getPoint(dataItem, xField, yField, dataItem.locations[xField], dataItem.locations[yField]);\r\n if (point) {\r\n points.push(point);\r\n }\r\n };\r\n /**\r\n * Returns an SVG path to be used as a mask for the series.\r\n *\r\n * @return SVG path\r\n */\r\n RadarSeries.prototype.getMaskPath = function () {\r\n var renderer = this.yAxis.renderer;\r\n return $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n };\r\n /**\r\n * [drawSegment description]\r\n *\r\n * @todo Description\r\n * @param segment [description]\r\n * @param points [description]\r\n * @param closePoints [description]\r\n */\r\n RadarSeries.prototype.drawSegment = function (segment, points, closePoints) {\r\n var axis = this.yAxis;\r\n var renderer = axis.renderer;\r\n if (this.connectEnds && Math.abs(renderer.endAngle - renderer.startAngle) == 360) {\r\n // adds one point to the beginning of closePoints array, if needed\r\n if (this.dataFields[this._xOpenField] ||\r\n this.dataFields[this._yOpenField] ||\r\n this.stacked) {\r\n points.push(points[0]);\r\n if (closePoints.length > 0) {\r\n closePoints.unshift(closePoints[closePoints.length - 1]);\r\n }\r\n }\r\n }\r\n _super.prototype.drawSegment.call(this, segment, points, closePoints);\r\n };\r\n Object.defineProperty(RadarSeries.prototype, \"connectEnds\", {\r\n /**\r\n * @return Connect?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"connectEnds\");\r\n },\r\n /**\r\n * Should the last and and first data points be connected, forming a complete\r\n * closed circle?\r\n *\r\n * @default true\r\n * @param value Connect?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"connectEnds\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n RadarSeries.prototype.positionBulletReal = function (bullet, positionX, positionY) {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (positionX < xAxis.start || positionX > xAxis.end || positionY < yAxis.start || positionY > yAxis.end) {\r\n bullet.visible = false;\r\n }\r\n bullet.moveTo(this.xAxis.renderer.positionToPoint(positionX, positionY));\r\n };\r\n RadarSeries.prototype.setXAxis = function (axis) {\r\n _super.prototype.setXAxis.call(this, axis);\r\n this.updateRendererRefs();\r\n };\r\n RadarSeries.prototype.setYAxis = function (axis) {\r\n _super.prototype.setYAxis.call(this, axis);\r\n this.updateRendererRefs();\r\n };\r\n RadarSeries.prototype.updateRendererRefs = function () {\r\n var rendererX = this.xAxis.renderer;\r\n var rendererY = this.yAxis.renderer;\r\n rendererX.axisRendererY = rendererY;\r\n };\r\n return RadarSeries;\r\n}(LineSeries));\r\nexport { RadarSeries };\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//# sourceMappingURL=RadarSeries.js.map","import { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar AxisFillCircular = /** @class */ (function (_super) {\r\n __extends(AxisFillCircular, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Axis\r\n */\r\n function AxisFillCircular(axis) {\r\n var _this = _super.call(this, axis) || this;\r\n _this.className = \"AxisFillCircular\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.radius = percent(100);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the fill element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisFillCircular.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n if (this.__disabled || this.disabled) {\r\n return;\r\n }\r\n if (this.axis) {\r\n var renderer = this.axis.renderer;\r\n this.fillPath = renderer.getPositionRangePath(this.startPosition, this.endPosition, this.radius, $type.hasValue(this.innerRadius) ? this.innerRadius : renderer.innerRadius, this.cornerRadius);\r\n this.path = this.fillPath;\r\n }\r\n };\r\n Object.defineProperty(AxisFillCircular.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n *\r\n * @param value Inner radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisFillCircular.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisFillCircular.prototype, \"cornerRadius\", {\r\n /**\r\n * @return Corner radius (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cornerRadius\");\r\n },\r\n /**\r\n * Corner radius for the fill. In pixels.\r\n *\r\n * @param value Corner radius (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cornerRadius\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return AxisFillCircular;\r\n}(AxisFill));\r\nexport { AxisFillCircular };\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//# sourceMappingURL=AxisFillCircular.js.map","/**\r\n * A module defining functionality for circular axis grid elements.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Grid } from \"./Grid\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar GridCircular = /** @class */ (function (_super) {\r\n __extends(GridCircular, _super);\r\n /**\r\n * Constructor\r\n */\r\n function GridCircular() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"GridCircular\";\r\n _this.pixelPerfect = false;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(GridCircular.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the circular grid. (absolute or relative)\r\n *\r\n * @param value Inner radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GridCircular.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the circular grid. (absolute or relative)\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return GridCircular;\r\n}(Grid));\r\nexport { GridCircular };\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//# sourceMappingURL=GridCircular.js.map","/**\r\n * Axis Label module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisLabel } from \"./AxisLabel\";\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 $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar AxisLabelCircular = /** @class */ (function (_super) {\r\n __extends(AxisLabelCircular, _super);\r\n /**\r\n * Constructor\r\n */\r\n function AxisLabelCircular() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n *\r\n * @ignore\r\n */\r\n _this.fdx = 0;\r\n /**\r\n *\r\n * @ignore\r\n */\r\n _this.fdy = 0;\r\n _this.className = \"AxisLabelCircular\";\r\n _this.padding(0, 0, 0, 0);\r\n _this.location = 0.5;\r\n _this.locationOnPath = 0.5;\r\n _this.radius = 0;\r\n _this.isMeasured = false;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(AxisLabelCircular.prototype, \"relativeRotation\", {\r\n /**\r\n * @return Rotation angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"relativeRotation\");\r\n },\r\n /**\r\n * Relative rotation of the label.\r\n *\r\n * It is an angle to circle. In case 90, labels will be positioned like rays\r\n * of light, if 0 - positioned along the circle.\r\n *\r\n * @param value Rotation angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"relativeRotation\", value, true);\r\n if (!$type.hasValue(value)) {\r\n this.rotation = undefined;\r\n var dataItem = this.dataItem;\r\n if (dataItem && dataItem.component) {\r\n dataItem.component.invalidateDataItems();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisLabelCircular.prototype, \"radius\", {\r\n /**\r\n * @return Distance (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Distance from axis circle to label in pixels or percent.\r\n *\r\n * @param value Distance (px or percent)\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisLabelCircular.prototype, \"bent\", {\r\n /**\r\n * @return Bent?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"bent\");\r\n },\r\n /**\r\n * Specifies if label should be bent along the circle.\r\n *\r\n * IMPORTANT: Use this with caution, since it is quite CPU-greedy.\r\n *\r\n * @since 4.1.2\r\n * @default false\r\n * @param value Bent?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"bent\", value, true);\r\n this.setPropertyValue(\"wrap\", false);\r\n this.setPropertyValue(\"horizontalCenter\", \"none\");\r\n this.setPropertyValue(\"verticalCenter\", \"none\");\r\n if (value) {\r\n this.setPropertyValue(\"dx\", 0);\r\n this.setPropertyValue(\"dy\", 0);\r\n this.setPropertyValue(\"x\", 0);\r\n this.setPropertyValue(\"y\", 0);\r\n this.setPropertyValue(\"rotation\", 0);\r\n //this.setPropertyValue(\"relativeRotation\", undefined);\r\n this.fdx = 0;\r\n this.fdy = 0;\r\n this.textAlign = \"middle\";\r\n }\r\n else {\r\n if (this.textPathElement) {\r\n this.textPathElement.dispose();\r\n this.textPathElement = undefined;\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns label radius in pixels.\r\n *\r\n * @param axisRadius Radius\r\n * @return Pixel radius\r\n */\r\n AxisLabelCircular.prototype.pixelRadius = function (axisRadius) {\r\n var sign = 1;\r\n if (this.inside) {\r\n sign = -1;\r\n }\r\n return $utils.relativeToValue(this.radius, axisRadius) * sign;\r\n };\r\n /**\r\n * Returns label horizontal radius in pixels.\r\n *\r\n * @param axisRadius Radius\r\n * @param axisRadiusY Vertical radius\r\n * @return Radius\r\n */\r\n AxisLabelCircular.prototype.pixelRadiusY = function (axisRadius, axisRadiusY) {\r\n var sign = 1;\r\n if (this.inside) {\r\n sign = -1;\r\n }\r\n var radius = this.radius;\r\n if ($type.isNumber(radius)) {\r\n radius *= axisRadiusY / axisRadius;\r\n return $utils.relativeToValue(radius, axisRadius) * sign;\r\n }\r\n else {\r\n return $utils.relativeToValue(radius, axisRadiusY) * sign;\r\n }\r\n };\r\n /**\r\n * [fixPosition description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param point Label affixation point\r\n * @param axisRadius Distance from point (px)\r\n */\r\n AxisLabelCircular.prototype.fixPosition = function (angle, axisRadius, axisRadiusY, dx, dy) {\r\n if (!$type.isNumber(axisRadiusY)) {\r\n axisRadiusY = axisRadius;\r\n }\r\n if (!$type.isNumber(dx)) {\r\n dx = 0;\r\n }\r\n if (!$type.isNumber(dy)) {\r\n dy = 0;\r\n }\r\n var point = { x: axisRadius * $math.cos(angle), y: axisRadiusY * $math.sin(angle) };\r\n if (this.invalid) {\r\n this.validate(); //@todo\" check if we need this\r\n }\r\n var isNegative = false;\r\n var realRadius = this.radius;\r\n if (realRadius instanceof Percent && realRadius.value < 0) {\r\n isNegative = true;\r\n }\r\n else if (realRadius < 0) {\r\n isNegative = true;\r\n }\r\n var relativeRotation = this.relativeRotation;\r\n var labelRadius = this.pixelRadius(axisRadius);\r\n if (this.bent) {\r\n var point_1 = { x: (axisRadius + labelRadius) * $math.cos(angle + 180), y: (axisRadiusY + labelRadius * axisRadiusY / axisRadius) * $math.sin(angle + 180) };\r\n this.path = $path.moveTo(point_1) + $path.arcTo(angle + 180, 360, axisRadius + labelRadius, axisRadiusY + labelRadius * axisRadiusY / axisRadius);\r\n if (this.textPathElement) {\r\n this.textPathElement.attr({ \"startOffset\": (this.locationOnPath * 100) + \"%\" });\r\n }\r\n return;\r\n }\r\n // WHEN ROTATED\r\n if ($type.isNumber(relativeRotation)) {\r\n this.horizontalCenter = \"none\";\r\n this.verticalCenter = \"none\";\r\n angle = $math.fitAngleToRange(angle, -180, 180);\r\n var pixelWidth = this.bbox.width;\r\n var pixelHeight = this.bbox.height;\r\n var pixelPaddingBottom = this.pixelPaddingBottom;\r\n var pixelPaddingTop = this.pixelPaddingTop;\r\n var pixelPaddingLeft = this.pixelPaddingLeft;\r\n var pixelPaddingRight = this.pixelPaddingRight;\r\n if (angle > 90 || angle < -90) {\r\n if (relativeRotation == -90) {\r\n relativeRotation = 90;\r\n pixelWidth = 0;\r\n }\r\n }\r\n else {\r\n if (relativeRotation == -90) {\r\n pixelHeight = -pixelHeight;\r\n }\r\n if (relativeRotation == 90) {\r\n relativeRotation = -90;\r\n pixelWidth = -pixelPaddingLeft - pixelPaddingRight;\r\n pixelHeight = -pixelHeight - pixelPaddingTop - pixelPaddingBottom;\r\n }\r\n }\r\n this.rotation = relativeRotation + angle + 90;\r\n var dH = $math.sin(relativeRotation) / 2;\r\n var dW = $math.cos(relativeRotation) / 2;\r\n var rotation = this.rotation;\r\n this.dx = pixelHeight * dH * $math.sin(rotation) - pixelWidth * dW * $math.cos(rotation);\r\n this.dy = -pixelHeight * dH * $math.cos(rotation) - pixelWidth * dW * $math.sin(rotation);\r\n if (!this.inside) {\r\n labelRadius += (pixelHeight + pixelPaddingBottom + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelWidth + pixelPaddingLeft + pixelPaddingRight) * $math.sin(relativeRotation);\r\n }\r\n else {\r\n if (angle > 90 || angle < -90) {\r\n labelRadius -= (pixelPaddingBottom + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelPaddingLeft + pixelPaddingRight) * $math.sin(relativeRotation);\r\n }\r\n else {\r\n labelRadius += (pixelPaddingBottom + this.bbox.height + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelPaddingLeft + pixelPaddingRight + this.bbox.width) * $math.sin(relativeRotation);\r\n }\r\n }\r\n point.x += $math.cos(angle) * labelRadius;\r\n point.y += $math.sin(angle) * labelRadius * axisRadiusY / axisRadius;\r\n }\r\n else {\r\n // END OF ROTATED\r\n this.horizontalCenter = \"middle\";\r\n this.verticalCenter = \"middle\";\r\n if (isNegative) {\r\n this.dx = 0;\r\n this.dy = 0;\r\n point.x = (axisRadius + labelRadius) * $math.cos(angle);\r\n point.y = (axisRadiusY + labelRadius * axisRadiusY / axisRadius) * $math.sin(angle);\r\n }\r\n else {\r\n // 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 // 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 // @todo with this math doesn't work well with inside = true\r\n this.dy = this._measuredHeight / 2 * $math.sin(angle); //(1 - (point.y + axisRadiusY) / (2 * axisRadiusY));\r\n // simmilar with dx\r\n this.dx = this._measuredWidth / 2 * $math.cos(angle); //(1 - (point.x + axisRadius) / (2 * axisRadius));\r\n point.x += $math.cos(angle) * labelRadius;\r\n point.y += $math.sin(angle) * labelRadius * axisRadiusY / axisRadius;\r\n }\r\n }\r\n point.x += dx;\r\n point.y += dy;\r\n this.fdx = this.dx;\r\n this.fdy = this.dy;\r\n this.moveTo(point);\r\n };\r\n return AxisLabelCircular;\r\n}(AxisLabel));\r\nexport { AxisLabelCircular };\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//# sourceMappingURL=AxisLabelCircular.js.map","/**\r\n * Module, defining Axis Renderer for circular axes.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisFillCircular } from \"./AxisFillCircular\";\r\nimport { GridCircular } from \"./GridCircular\";\r\nimport { AxisLabelCircular } from \"./AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { AxisBullet } from \"./AxisBullet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A renderer for circular axis.\r\n */\r\nvar AxisRendererCircular = /** @class */ (function (_super) {\r\n __extends(AxisRendererCircular, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\r\n function AxisRendererCircular() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * @ignore\r\n */\r\n _this.pixelRadiusReal = 0;\r\n // axis.layout = \"none\"; // does not trigger redraw when size changes\r\n _this.layout = \"none\";\r\n _this.className = \"AxisRendererCircular\";\r\n _this.isMeasured = false;\r\n _this.startAngle = -90;\r\n _this.endAngle = 270;\r\n _this.useChartAngles = true;\r\n _this.radius = percent(100);\r\n _this.isMeasured = false;\r\n _this.grid.template.location = 0;\r\n _this.labels.template.location = 0;\r\n _this.labels.template.radius = 15;\r\n _this.ticks.template.location = 0;\r\n _this.ticks.template.pixelPerfect = false;\r\n _this.tooltipLocation = 0;\r\n _this.line.strokeOpacity = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n AxisRendererCircular.prototype.setAxis = function (axis) {\r\n var _this = this;\r\n _super.prototype.setAxis.call(this, axis);\r\n axis.isMeasured = false;\r\n // modify x and y so that tooltip would always be on circle\r\n var tooltip = axis.tooltip;\r\n tooltip.adapter.add(\"dx\", function (x, target) {\r\n var point = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, _this);\r\n return _this.pixelRadius * Math.cos(Math.atan2(point.y, point.x)) - point.x;\r\n });\r\n tooltip.adapter.add(\"dy\", function (y, target) {\r\n var point = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, _this);\r\n return _this.pixelRadius * Math.sin(Math.atan2(point.y, point.x)) - point.y;\r\n });\r\n };\r\n /**\r\n * Validates Axis renderer.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererCircular.prototype.validate = function () {\r\n // so that radius would be updated\r\n if (this.chart && this.chart.invalid) {\r\n this.chart.validate();\r\n }\r\n _super.prototype.validate.call(this);\r\n };\r\n Object.defineProperty(AxisRendererCircular.prototype, \"axisLength\", {\r\n /**\r\n * Returns actual length of the Axis, in pixels.\r\n *\r\n * @return Length (px)\r\n */\r\n get: function () {\r\n return 2 * Math.PI * this.pixelRadius;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererCircular.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the axis.\r\n *\r\n * Can be absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"radius\", value, false, false, 10, false)) {\r\n if (this.axis) {\r\n this.axis.invalidate();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererCircular.prototype, \"pixelRadius\", {\r\n /**\r\n * Outer radius in pixels.\r\n *\r\n * @return Outer radius (px)\r\n */\r\n get: function () {\r\n return $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererCircular.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n var chart = this.chart;\r\n var innerRadius = this.getPropertyValue(\"innerRadius\");\r\n if (chart) {\r\n if (!$type.hasValue(innerRadius)) {\r\n innerRadius = chart.innerRadius;\r\n if (innerRadius instanceof Percent && chart) {\r\n innerRadius = percent(innerRadius.value * chart.innerRadiusModifyer * 100);\r\n }\r\n }\r\n else {\r\n if (innerRadius instanceof Percent && chart) {\r\n var mr = chart.mr;\r\n var value = innerRadius.value;\r\n value = Math.max(mr * value, mr - Math.min(chart.plotContainer.innerHeight, chart.plotContainer.innerWidth)) / mr;\r\n innerRadius = percent(value * 100);\r\n }\r\n }\r\n return innerRadius;\r\n }\r\n },\r\n /**\r\n * Inner radius of the axis.\r\n *\r\n * Can be absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Inner radius\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"innerRadius\", value, false, false, 10, false)) {\r\n if (this.axis) {\r\n this.axis.invalidate();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererCircular.prototype, \"useChartAngles\", {\r\n /**\r\n * @return Use chart angles\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"useChartAngles\");\r\n },\r\n /**\r\n * Specifies if axis should use its own `startAngle` and `endAngle` or\r\n * inherit them from relative properties from chart.\r\n *\r\n * @default false\r\n * @param value Use chart's angles\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"useChartAngles\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererCircular.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * Inner radius in pixels.\r\n *\r\n * @return Inner radius (px)\r\n */\r\n get: function () {\r\n return $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position on axis to point coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @param position2 Position (0-1) Position on the second axis\r\n * @return Point\r\n */\r\n AxisRendererCircular.prototype.positionToPoint = function (position, position2) {\r\n if (!$type.isNumber(position2)) {\r\n position2 = 1;\r\n }\r\n var coordinate = this.positionToCoordinate(position);\r\n var angle = this.startAngle + (this.endAngle - this.startAngle) * coordinate / this.axisLength;\r\n var radius = this.pixelRadius;\r\n var innerRadius = this.pixelInnerRadius;\r\n if (this.axisRendererY) {\r\n var realRadius = $math.fitToRange(this.axisRendererY.positionToCoordinate(position2), 0, Infinity);\r\n if (realRadius == 0) {\r\n realRadius = 0.000001;\r\n }\r\n var point = { x: realRadius * $math.cos(angle), y: realRadius * $math.sin(angle) };\r\n return point;\r\n }\r\n return { x: $math.cos(angle) * innerRadius + (radius - innerRadius) * $math.cos(angle) * position2, y: $math.sin(angle) * innerRadius + (radius - innerRadius) * $math.sin(angle) * position2 };\r\n };\r\n /**\r\n * Converts relative position (0-1) on axis to angle in degrees (0-360).\r\n *\r\n * @param position Position (0-1)\r\n * @return Angle (0-360)\r\n */\r\n AxisRendererCircular.prototype.positionToAngle = function (position) {\r\n var axis = this.axis;\r\n var arc = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n var angle;\r\n if (axis.renderer.inversed) {\r\n angle = this.startAngle + (axis.end - position) * arc;\r\n }\r\n else {\r\n angle = this.startAngle + (position - axis.start) * arc;\r\n }\r\n return $math.round(angle, 3);\r\n };\r\n /**\r\n * Converts angle on axis to relative position(0-1).\r\n *\r\n * @param angle Angle in degrees\r\n * @return Position (0-1)\r\n */\r\n AxisRendererCircular.prototype.angleToPosition = function (angle) {\r\n var axis = this.axis;\r\n var arc = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n var position;\r\n if (axis.renderer.inversed) {\r\n position = axis.end - (angle - this.startAngle) / arc;\r\n }\r\n else {\r\n position = (angle - this.startAngle) / arc + axis.start;\r\n }\r\n return $math.round(position, 5);\r\n };\r\n /**\r\n * Updates and positions the axis line element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererCircular.prototype.updateAxisLine = function () {\r\n var radius = this.pixelRadius;\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var arc = $math.min(360, endAngle - startAngle);\r\n this.line.path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius, radius);\r\n };\r\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererCircular.prototype.updateGridElement = function (grid, position, endPosition) {\r\n position = position + (endPosition - position) * grid.location;\r\n var point = this.positionToPoint(position);\r\n if ($type.isNumber(point.x) && $type.isNumber(point.y) && grid.element) {\r\n var angle = $math.DEGREES * Math.atan2(point.y, point.x);\r\n var radius = $utils.relativeRadiusToValue($type.hasValue(grid.radius) ? grid.radius : percent(100), this.pixelRadius);\r\n var gridInnerRadius = $utils.relativeRadiusToValue(grid.innerRadius, this.pixelRadius);\r\n grid.zIndex = 0;\r\n var innerRadius = $utils.relativeRadiusToValue($type.isNumber(gridInnerRadius) ? gridInnerRadius : this.innerRadius, this.pixelRadiusReal, true);\r\n if (!$type.isNumber(innerRadius)) {\r\n innerRadius = 0;\r\n }\r\n grid.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 }\r\n this.toggleVisibility(grid, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions a tick element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param tick Tick element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererCircular.prototype.updateTickElement = function (tick, position, endPosition) {\r\n position = position + (endPosition - position) * tick.location;\r\n var point = this.positionToPoint(position);\r\n if (tick.element) {\r\n var radius = this.pixelRadius;\r\n var angle = $math.DEGREES * Math.atan2(point.y, point.x);\r\n var tickLength = tick.length;\r\n if (tick.inside) {\r\n tickLength = -tickLength;\r\n }\r\n tick.zIndex = 1;\r\n tick.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 }\r\n this.toggleVisibility(tick, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions axis bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet AxisBullet element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererCircular.prototype.updateBullet = function (bullet, position, endPosition) {\r\n var location = 0.5;\r\n if (bullet instanceof AxisBullet) {\r\n location = bullet.location;\r\n }\r\n position = position + (endPosition - position) * location;\r\n var point = this.positionToPoint(position);\r\n var radius = this.pixelRadius;\r\n var angle = $math.DEGREES * Math.atan2(point.y, point.x);\r\n point = { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n this.positionItem(bullet, point);\r\n this.toggleVisibility(bullet, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions a label element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param label Label element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\r\n AxisRendererCircular.prototype.updateLabelElement = function (label, position, endPosition, location) {\r\n if (!$type.hasValue(location)) {\r\n location = label.location;\r\n }\r\n position = position + (endPosition - position) * location;\r\n label.fixPosition(this.positionToAngle(position), this.pixelRadius);\r\n label.zIndex = 2;\r\n this.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n };\r\n /**\r\n * Checks if point is within bounds of a container.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point Point coordinates\r\n * @return Fits?\r\n */\r\n AxisRendererCircular.prototype.fitsToBounds = function (point) {\r\n return true;\r\n };\r\n Object.defineProperty(AxisRendererCircular.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Start angle of the axis in degrees (0-360).\r\n *\r\n * @param value Start angle\r\n */\r\n set: function (value) {\r\n // do not normalize angel here!\r\n if (this.setPropertyValue(\"startAngle\", value)) {\r\n this.invalidateAxisItems();\r\n if (this.axis) {\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererCircular.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * End angle of the axis in degrees (0-360).\r\n *\r\n * @param value End angle\r\n */\r\n set: function (value) {\r\n // do not normalize angel here!\r\n if (this.setPropertyValue(\"endAngle\", value)) {\r\n this.invalidateAxisItems();\r\n if (this.axis) {\r\n this.axis.invalidateSeries();\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition Starting position\r\n * @param endPosition End position\r\n * @return SVG path\r\n */\r\n AxisRendererCircular.prototype.getPositionRangePath = function (startPosition, endPosition, radius, innerRadius, cornerRadius) {\r\n var path = \"\";\r\n if ($type.isNumber(startPosition) && $type.isNumber(endPosition)) {\r\n if (!$type.hasValue(radius)) {\r\n radius = this.radius;\r\n }\r\n startPosition = $math.max(startPosition, this.axis.start);\r\n endPosition = $math.min(endPosition, this.axis.end);\r\n if (endPosition < startPosition) {\r\n endPosition = startPosition;\r\n }\r\n var pixelRadius = $utils.relativeRadiusToValue(radius, this.pixelRadius);\r\n var pixelInnerRadius = $utils.relativeRadiusToValue(innerRadius, this.pixelRadius, true);\r\n var startAngle = this.positionToAngle(startPosition);\r\n var endAngle = this.positionToAngle(endPosition);\r\n var arc = endAngle - startAngle;\r\n path = $path.arc(startAngle, arc, pixelRadius, pixelInnerRadius, pixelRadius, cornerRadius);\r\n }\r\n return path;\r\n };\r\n /**\r\n * Returns a new grid element, suitable for this Axis Renderer type.\r\n *\r\n * @return Grid element\r\n */\r\n AxisRendererCircular.prototype.createGrid = function () {\r\n return new GridCircular();\r\n };\r\n /**\r\n * Returns a new fill element, suitable for this Axis Renderer type.\r\n *\r\n * @return Fill element\r\n */\r\n AxisRendererCircular.prototype.createFill = function (axis) {\r\n return new AxisFillCircular(axis);\r\n };\r\n /**\r\n * Returns a new label element, suitable for this Axis Renderer type.\r\n *\r\n * @return Label element\r\n */\r\n AxisRendererCircular.prototype.createLabel = function () {\r\n return new AxisLabelCircular();\r\n };\r\n /**\r\n * Converts a point at specific coordinates to a relative position (0-1)\r\n * on the axis.\r\n *\r\n * @param point Point\r\n * @return Position (0-1)\r\n */\r\n AxisRendererCircular.prototype.pointToPosition = function (point) {\r\n var angle = $math.fitAngleToRange($math.getAngle(point), this.startAngle, this.endAngle);\r\n return this.coordinateToPosition((angle - this.startAngle) / 360 * this.axisLength);\r\n };\r\n return AxisRendererCircular;\r\n}(AxisRenderer));\r\nexport { AxisRendererCircular };\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//# sourceMappingURL=AxisRendererCircular.js.map","/**\r\n * Module, defining Axis Renderer for radial axes.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY } from \"./AxisRendererY\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { WavedCircle } from \"../../core/elements/WavedCircle\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { AxisBullet } from \"./AxisBullet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A renderer for radial axis.\r\n */\r\nvar AxisRendererRadial = /** @class */ (function (_super) {\r\n __extends(AxisRendererRadial, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\r\n function AxisRendererRadial() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A related chart.\r\n */\r\n _this._chart = new MutableValueDisposer();\r\n /**\r\n * @ignore\r\n */\r\n _this.pixelRadiusReal = 0;\r\n _this.className = \"AxisRendererRadial\";\r\n _this.isMeasured = false;\r\n _this.startAngle = -90;\r\n _this.endAngle = 270;\r\n _this.minGridDistance = 30;\r\n _this.gridType = \"circles\";\r\n _this.axisAngle = -90;\r\n _this.isMeasured = false;\r\n _this.layout = \"none\";\r\n _this.radius = percent(100);\r\n _this.line.strokeOpacity = 0;\r\n _this.labels.template.horizontalCenter = \"middle\";\r\n _this._disposers.push(_this._chart);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Validates Axis renderer.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererRadial.prototype.validate = function () {\r\n // so that radius would be updated\r\n if (this.chart && this.chart.invalid) {\r\n this.chart.validate();\r\n }\r\n _super.prototype.validate.call(this);\r\n };\r\n Object.defineProperty(AxisRendererRadial.prototype, \"axisLength\", {\r\n /**\r\n * Returns actual length of the Axis, in pixels.\r\n *\r\n * @return Length (px)\r\n */\r\n get: function () {\r\n return this.pixelRadius - this.pixelInnerRadius;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererRadial.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the axis.\r\n *\r\n * Can be absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererRadial.prototype, \"pixelRadius\", {\r\n /**\r\n * Outer radius in pixels.\r\n *\r\n * @return Outer radius (px)\r\n */\r\n get: function () {\r\n return $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererRadial.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n var chart = this.chart;\r\n var innerRadius = this.getPropertyValue(\"innerRadius\");\r\n if (chart) {\r\n if (!$type.hasValue(innerRadius)) {\r\n innerRadius = chart.innerRadius;\r\n if (innerRadius instanceof Percent && chart) {\r\n innerRadius = percent(innerRadius.value * chart.innerRadiusModifyer * 100);\r\n }\r\n }\r\n else {\r\n if (innerRadius instanceof Percent && chart) {\r\n var mr = chart.mr;\r\n var value = innerRadius.value;\r\n value = Math.max(mr * value, mr - Math.min(chart.plotContainer.innerHeight, chart.plotContainer.innerWidth)) / mr;\r\n innerRadius = percent(value * 100);\r\n }\r\n }\r\n }\r\n return innerRadius;\r\n },\r\n /**\r\n * Inner radius of the axis.\r\n *\r\n * Can be absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, false, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererRadial.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * Inner radius in pixels.\r\n *\r\n * @return Inner radius (px)\r\n */\r\n get: function () {\r\n return $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position on axis to point coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @param position2 Position (0-1) Position on the second axis\r\n * @return Point\r\n */\r\n AxisRendererRadial.prototype.positionToPoint = function (position, position2) {\r\n var radius = $math.fitToRange(this.positionToCoordinate(position), 0, Infinity);\r\n return { x: radius * $math.cos(this.axisAngle), y: radius * $math.sin(this.axisAngle) };\r\n };\r\n /**\r\n * Updates and positions the axis line element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererRadial.prototype.updateAxisLine = function () {\r\n this.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 var title = this.axis.title;\r\n title.valign = \"none\";\r\n title.horizontalCenter = \"middle\";\r\n title.verticalCenter = \"bottom\";\r\n title.y = -this.axisLength / 2;\r\n var rotation = 90;\r\n if (this.opposite) {\r\n if (!this.inside) {\r\n rotation = -90;\r\n }\r\n }\r\n else {\r\n if (this.inside) {\r\n rotation = -90;\r\n }\r\n }\r\n title.rotation = rotation;\r\n };\r\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererRadial.prototype.updateGridElement = function (grid, position, endPosition) {\r\n position = position + (endPosition - position) * grid.location;\r\n var point = this.positionToPoint(position);\r\n var path;\r\n var radius = $math.getDistance(point);\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var chart = this.chart;\r\n if ($type.isNumber(radius) && grid.element && chart) {\r\n var xAxis = chart.xAxes.getIndex(0);\r\n var count = 0;\r\n var series = chart.series.getIndex(0);\r\n if (series) {\r\n count = series.dataItems.length;\r\n }\r\n // polygons are only possible if x axis is present\r\n // @todo: review this\r\n if (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n var gridLocation = xAxis.renderer.grid.template.location;\r\n var angle = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n for (var i = 1; i < count; i++) {\r\n angle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n path += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n }\r\n angle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n path += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n }\r\n else {\r\n path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius, radius);\r\n }\r\n grid.path = path;\r\n }\r\n this.toggleVisibility(grid, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions a label element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param label Label element\r\n * @param position Starting position\r\n * @param endPosition Ending position\r\n */\r\n AxisRendererRadial.prototype.updateLabelElement = function (label, position, endPosition, location) {\r\n if (!$type.hasValue(location)) {\r\n location = label.location;\r\n }\r\n position = position + (endPosition - position) * location;\r\n var point = this.positionToPoint(position);\r\n this.positionItem(label, point);\r\n this.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n };\r\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererRadial.prototype.updateBaseGridElement = function () {\r\n // @todo? zero grid for radar chart, is it needed?\r\n };\r\n /**\r\n * Checks if point is within bounds of a container.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point Point coordinates\r\n * @return Fits?\r\n */\r\n AxisRendererRadial.prototype.fitsToBounds = function (point) {\r\n return true;\r\n };\r\n Object.defineProperty(AxisRendererRadial.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Start angle of the axis in degrees. (0-360)\r\n *\r\n * @param value Start angle\r\n */\r\n set: function (value) {\r\n // do not normalize angle here!\r\n if (this.setPropertyValue(\"startAngle\", value)) {\r\n this.invalidateAxisItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererRadial.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * End angle of the axis in degrees. (0-360)\r\n *\r\n * @param value End angle\r\n */\r\n set: function (value) {\r\n // do not normalize angel here!\r\n if (this.setPropertyValue(\"endAngle\", value)) {\r\n this.invalidateAxisItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererRadial.prototype, \"axisAngle\", {\r\n /**\r\n * @return Axis angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"axisAngle\");\r\n //return $math.fitToRange(this.getPropertyValue(\"axisAngle\"), this.startAngle, this.endAngle); // no good, as less flexible\r\n },\r\n /**\r\n * Angle of the radial axis in degrees. (0-360)\r\n *\r\n * @param value Axis angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"axisAngle\", $math.normalizeAngle(value));\r\n this.invalidateAxisItems();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(AxisRendererRadial.prototype, \"gridType\", {\r\n /**\r\n * Grid type\r\n */\r\n get: function () {\r\n var axis = this.chart.xAxes.getIndex(0);\r\n if (axis instanceof CategoryAxis) {\r\n return this.getPropertyValue(\"gridType\");\r\n }\r\n else {\r\n return \"circles\";\r\n }\r\n },\r\n // 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 * Grid type for radial axis.\r\n *\r\n * A grid on radia axis can either be perfect circles (\"circles\"), or\r\n * straight lines (\"polygons\").\r\n *\r\n * @default \"circles\"\r\n * @param value Grid type\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"gridType\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * [getPositionRangePath description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param startPosition Starting position\r\n * @param endPosition End position\r\n * @return SVG path\r\n */\r\n AxisRendererRadial.prototype.getPositionRangePath = function (startPosition, endPosition) {\r\n var pixelInnerRadius = this.pixelInnerRadius;\r\n var pixelRadius = this.axisLength + pixelInnerRadius;\r\n var innerRadius = $math.fitToRange(this.positionToCoordinate(startPosition), pixelInnerRadius, pixelRadius);\r\n var radius = $math.fitToRange(this.positionToCoordinate(endPosition), pixelInnerRadius, pixelRadius);\r\n //let angleCount: number = this.angleCount;\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var arc = endAngle - startAngle;\r\n var path;\r\n var chart = this.chart;\r\n var xAxis = chart.xAxes.getIndex(0);\r\n var series = chart.series.getIndex(0);\r\n var count = 0;\r\n if (series) {\r\n count = series.dataItems.length;\r\n }\r\n // polygons are only possible if x axis is present\r\n // @todo: review this\r\n if (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n var gridLocation = xAxis.renderer.grid.template.location;\r\n var angle = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n for (var i = 1; i < count; i++) {\r\n angle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n path += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n }\r\n angle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n path += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n path += $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) });\r\n for (var i = count - 1; i >= 0; i--) {\r\n angle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n path += $path.lineTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) });\r\n }\r\n }\r\n else {\r\n path = $path.arc(startAngle, arc, radius, innerRadius);\r\n }\r\n return path;\r\n };\r\n /**\r\n * Updates and positions an axis break element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Break element\r\n */\r\n AxisRendererRadial.prototype.updateBreakElement = function (axisBreak) {\r\n // @todo: someday we might need axis break when gridType is polygons\r\n var startLine = axisBreak.startLine;\r\n var endLine = axisBreak.endLine;\r\n var fillShape = axisBreak.fillShape;\r\n var startPoint = axisBreak.startPoint;\r\n var endPoint = axisBreak.endPoint;\r\n startLine.radius = Math.abs(startPoint.y);\r\n endLine.radius = Math.abs(endPoint.y);\r\n fillShape.radius = Math.abs(endPoint.y);\r\n fillShape.innerRadius = Math.abs(startPoint.y);\r\n };\r\n /**\r\n * Creates visual elements for and axis break.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axisBreak Axis break\r\n */\r\n AxisRendererRadial.prototype.createBreakSprites = function (axisBreak) {\r\n axisBreak.startLine = new WavedCircle();\r\n axisBreak.endLine = new WavedCircle();\r\n axisBreak.fillShape = new WavedCircle();\r\n };\r\n /**\r\n * Updates some of the Axis tooltip's visual properties, related to\r\n * rendering of the Axis.\r\n *\r\n * @todo Description (review)\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererRadial.prototype.updateTooltip = function () {\r\n var axis = this.axis;\r\n if (axis) {\r\n var bigNum = 4000;\r\n var bbx = -4000;\r\n var bby = -4000;\r\n var bbw = bigNum * 2;\r\n var bbh = bigNum * 2;\r\n var axisAngle = this.axisAngle;\r\n if (axisAngle < 0) {\r\n axisAngle += 360;\r\n }\r\n var tooltipOrientation = \"vertical\";\r\n if ((axisAngle > 45 && axisAngle < 135) || (axisAngle > 225 && axisAngle < 315)) {\r\n tooltipOrientation = \"horizontal\";\r\n }\r\n this.axis.updateTooltip(tooltipOrientation, { x: bbx, y: bby, width: bbw, height: bbh });\r\n }\r\n };\r\n /**\r\n * Updates and positions a tick element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param tick Tick element\r\n * @param position Position\r\n */\r\n AxisRendererRadial.prototype.updateTickElement = function (tick, position, endPosition) {\r\n position = position + (endPosition - position) * tick.location;\r\n var point = this.positionToPoint(position);\r\n if (tick.element) {\r\n var angle = $math.normalizeAngle(this.axisAngle + 90);\r\n if (angle / 90 != Math.round(angle / 90)) {\r\n tick.pixelPerfect = false;\r\n }\r\n else {\r\n tick.pixelPerfect = true;\r\n }\r\n var tickLength = -tick.length;\r\n if (tick.inside) {\r\n tickLength *= -1;\r\n }\r\n tick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: tickLength * $math.cos(angle), y: tickLength * $math.sin(angle) });\r\n }\r\n this.positionItem(tick, point);\r\n this.toggleVisibility(tick, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions axis bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet AxisBullet element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererRadial.prototype.updateBullet = function (bullet, position, endPosition) {\r\n var location = 0.5;\r\n if (bullet instanceof AxisBullet) {\r\n location = bullet.location;\r\n }\r\n position = position + (endPosition - position) * location;\r\n var point = this.positionToPoint(position);\r\n this.positionItem(bullet, point);\r\n this.toggleVisibility(bullet, position, 0, 1);\r\n };\r\n /**\r\n * Converts a position on the axis to a coordinate in pixels.\r\n *\r\n * @ignore Exclude from docs\r\n * @param position Position (0-1)\r\n * @return Coordinate (px)\r\n */\r\n AxisRendererRadial.prototype.positionToCoordinate = function (position) {\r\n var coordinate;\r\n var axis = this.axis;\r\n var axisFullLength = axis.axisFullLength;\r\n var innerRadius = this.pixelInnerRadius;\r\n if (axis.renderer.inversed) {\r\n coordinate = (axis.end - position) * axisFullLength + innerRadius;\r\n }\r\n else {\r\n coordinate = (position - axis.start) * axisFullLength + innerRadius;\r\n }\r\n return $math.round(coordinate, 1);\r\n };\r\n /**\r\n * Converts a point at specific coordinates to a relative position (0-1)\r\n * on the axis.\r\n *\r\n * @param point Point\r\n * @return Position (0-1)\r\n */\r\n AxisRendererRadial.prototype.pointToPosition = function (point) {\r\n var coordinate = ($math.getDistance(point) - this.pixelInnerRadius);\r\n return this.coordinateToPosition(coordinate);\r\n };\r\n Object.defineProperty(AxisRendererRadial.prototype, \"chart\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Chart\r\n */\r\n get: function () {\r\n return this._chart.get();\r\n },\r\n /**\r\n * A chart, associated with the Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Chart\r\n */\r\n set: function (value) {\r\n this._chart.set(value, null);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return AxisRendererRadial;\r\n}(AxisRendererY));\r\nexport { AxisRendererRadial };\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//# sourceMappingURL=AxisRendererRadial.js.map","/**\r\n * Radar chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, XYChartDataItem } from \"./XYChart\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { RadarSeries } from \"../series/RadarSeries\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\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 * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[RadarChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar RadarChartDataItem = /** @class */ (function (_super) {\r\n __extends(RadarChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return RadarChartDataItem;\r\n}(XYChartDataItem));\r\nexport { RadarChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar RadarChart = /** @class */ (function (_super) {\r\n __extends(RadarChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Defines X axis renderer type.\r\n */\r\n _this._axisRendererX = AxisRendererCircular;\r\n /**\r\n * Defines Y axis renderer type.\r\n */\r\n _this._axisRendererY = AxisRendererRadial;\r\n /**\r\n * used by cursor. We adjust innerradius if start and end angle are close to each other\r\n * @ignore Exclude from docs\r\n */\r\n _this.innerRadiusModifyer = 1;\r\n /**\r\n * @ignore\r\n */\r\n _this.mr = 1;\r\n _this.className = \"RadarChart\";\r\n _this.startAngle = -90;\r\n _this.endAngle = 270;\r\n _this.radius = percent(80);\r\n _this.innerRadius = 0;\r\n var radarContainer = _this.plotContainer.createChild(Container);\r\n radarContainer.shouldClone = false;\r\n radarContainer.layout = \"absolute\";\r\n radarContainer.align = \"center\";\r\n radarContainer.valign = \"middle\";\r\n _this.seriesContainer.parent = radarContainer;\r\n _this.radarContainer = radarContainer;\r\n _this.bulletsContainer.parent = radarContainer;\r\n _this.axisBulletsContainer = radarContainer;\r\n _this._cursorContainer = radarContainer;\r\n _this.chartContainer.events.on(\"maxsizechanged\", _this.invalidate, _this, false); // need this for the chart to change radius if legend is removed/disabled\r\n _this._bulletMask = radarContainer.createChild(Circle);\r\n _this._bulletMask.shouldClone = false;\r\n _this._bulletMask.element = _this.paper.add(\"path\");\r\n _this._bulletMask.opacity = 0;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n RadarChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Radar chart\");\r\n }\r\n };\r\n /**\r\n * Decorates Axis with required properties for this chart.\r\n *\r\n * @param axis Axis\r\n */\r\n RadarChart.prototype.processAxis = function (axis) {\r\n _super.prototype.processAxis.call(this, axis);\r\n var renderer = axis.renderer;\r\n renderer.gridContainer.parent = renderer;\r\n renderer.breakContainer.parent = renderer;\r\n axis.parent = this.radarContainer;\r\n renderer.toBack();\r\n };\r\n /**\r\n * Updates all X axes after range change event.\r\n */\r\n RadarChart.prototype.handleXAxisRangeChange = function () {\r\n _super.prototype.handleXAxisRangeChange.call(this);\r\n $iter.each(this.yAxes.iterator(), function (axis) {\r\n axis.invalidate();\r\n });\r\n };\r\n /**\r\n * Updates all Y axes after range change event.\r\n */\r\n RadarChart.prototype.handleYAxisRangeChange = function () {\r\n _super.prototype.handleYAxisRangeChange.call(this);\r\n $iter.each(this.xAxes.iterator(), function (axis) {\r\n axis.invalidate();\r\n });\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n RadarChart.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up cursor\r\n if ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n config.cursor.type = \"RadarCursor\";\r\n }\r\n // Set up series\r\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n for (var i = 0, len = config.series.length; i < len; i++) {\r\n config.series[i].type = config.series[i].type || \"RadarSeries\";\r\n }\r\n }\r\n // Set up axes\r\n /*if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n for (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n config.xAxes[i].type = config.xAxes[i].type || \"AxisRendererCircular\";\r\n }\r\n }\r\n if ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n for (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n config.yAxes[i].type = config.yAxes[i].type || \"AxisRendererRadial\";\r\n }\r\n }*/\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Does calculations before drawing the chart.\r\n */\r\n RadarChart.prototype.beforeDraw = function () {\r\n _super.prototype.beforeDraw.call(this);\r\n var plotContainer = this.plotContainer;\r\n var rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n var innerRect = { x: 0, y: 0, width: 0, height: 0 };\r\n var wr = plotContainer.innerWidth / rect.width;\r\n var hr = plotContainer.innerHeight / rect.height;\r\n var innerRadius = this.innerRadius;\r\n if (innerRadius instanceof Percent) {\r\n var value = innerRadius.value;\r\n var mr = Math.min(wr, hr);\r\n this.mr = mr;\r\n value = Math.max(mr * value, mr - Math.min(plotContainer.innerHeight, plotContainer.innerWidth)) / mr;\r\n innerRect = $math.getArcRect(this.startAngle, this.endAngle, value);\r\n this.innerRadiusModifyer = value / innerRadius.value;\r\n innerRadius = percent(value * 100);\r\n }\r\n // @todo handle this when innerRadius set in pixels (do it for pie also)\r\n rect = $math.getCommonRectangle([rect, innerRect]);\r\n var maxRadius = Math.min(plotContainer.innerWidth / rect.width, plotContainer.innerHeight / rect.height);\r\n var diameter = $utils.relativeRadiusToValue(this.radius, maxRadius) * 2 || 0;\r\n var radius = diameter / 2;\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n this._pixelInnerRadius = $utils.relativeRadiusToValue(innerRadius, radius);\r\n this._bulletMask.path = $path.arc(startAngle, endAngle - startAngle, radius, this._pixelInnerRadius);\r\n $iter.each(this.xAxes.iterator(), function (axis) {\r\n if (axis.renderer.useChartAngles) {\r\n axis.renderer.startAngle = startAngle;\r\n axis.renderer.endAngle = endAngle;\r\n }\r\n axis.width = diameter;\r\n axis.height = diameter;\r\n //axis.renderer.width = diameter;\r\n //axis.renderer.height = diameter;\r\n axis.renderer.pixelRadiusReal = radius;\r\n //axis.renderer.innerRadius = innerRadius;\r\n });\r\n $iter.each(this.yAxes.iterator(), function (axis) {\r\n axis.renderer.startAngle = startAngle;\r\n axis.renderer.endAngle = endAngle;\r\n axis.width = diameter;\r\n axis.height = diameter;\r\n //axis.renderer.width = diameter;\r\n //axis.renderer.height = diameter;\r\n axis.renderer.pixelRadiusReal = radius;\r\n //axis.renderer.innerRadius = innerRadius;\r\n });\r\n var cursor = this.cursor;\r\n if (cursor) {\r\n cursor.width = diameter;\r\n cursor.height = diameter;\r\n cursor.startAngle = startAngle;\r\n cursor.endAngle = endAngle;\r\n }\r\n this.radarContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n this.radarContainer.validatePosition();\r\n };\r\n /**\r\n * Creates and returns a new Series, suitable for RadarChart.\r\n *\r\n * @return New Series\r\n */\r\n RadarChart.prototype.createSeries = function () {\r\n return new RadarSeries();\r\n };\r\n Object.defineProperty(RadarChart.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Starting angle of the Radar face. (degrees)\r\n *\r\n * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n * top center. (at -90 degrees)\r\n *\r\n * You can use `startAngle` to change this setting.\r\n *\r\n * E.g. setting this to 0 will make the radial axis start horizontally to\r\n * the right, as opposed to vertical.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set those to lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n * looks like a quarter of a circle.\r\n *\r\n * @default -90\r\n * @param value Start angle (degrees)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarChart.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * Starting angle of the Radar face. (degrees)\r\n *\r\n * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n * where it has started, forming a full 360 circle. (at 270 degrees)\r\n *\r\n * You can use `endAngle` to end the circle somewhere else.\r\n *\r\n * E.g. setting this to 180 will make the radar face end at horizontal line\r\n * to the left off the center.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set those to lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n * looks like a quarter of a circle.\r\n *\r\n * @default -90\r\n * @param value End angle (degrees)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarChart.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the Radar face.\r\n *\r\n * This can either be in absolute pixel value, or relative [[Percent]].\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarChart.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * @return Inner radius in pixels\r\n */\r\n get: function () {\r\n return this._pixelInnerRadius;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarChart.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the radar face.\r\n *\r\n * This can either be in absolute pixel value, or relative [[Percent]].\r\n *\r\n * If set in Percent, it will be relative to `radius`. (outer radius)\r\n *\r\n * @param value Inner radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Triggers (re)rendering of the horizontal (X) axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n */\r\n RadarChart.prototype.updateXAxis = function (renderer) {\r\n //do not call super!\r\n if (renderer) {\r\n renderer.processRenderer();\r\n }\r\n };\r\n /**\r\n * Triggers (re)rendering of the vertical (Y) axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param axis Axis\r\n */\r\n RadarChart.prototype.updateYAxis = function (renderer) {\r\n // do not call super!\r\n if (renderer) {\r\n renderer.processRenderer();\r\n }\r\n };\r\n return RadarChart;\r\n}(XYChart));\r\nexport { RadarChart };\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//# sourceMappingURL=RadarChart.js.map","/**\r\n * Functionality for drawing simple ClockHands\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { Trapezoid } from \"../../core/elements/Trapezoid\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\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 * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ClockHand = /** @class */ (function (_super) {\r\n __extends(ClockHand, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ClockHand() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * An Axis hand is related to.\r\n */\r\n _this._axis = new MutableValueDisposer();\r\n _this.className = \"ClockHand\";\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n _this.stroke = _this.fill;\r\n var pin = new Circle();\r\n pin.radius = 5;\r\n _this.pin = pin;\r\n _this.isMeasured = false;\r\n _this.startWidth = 5;\r\n _this.endWidth = 1;\r\n _this.width = percent(100);\r\n _this.height = percent(100);\r\n _this.radius = percent(100);\r\n _this.innerRadius = percent(0);\r\n var hand = new Trapezoid();\r\n _this.hand = hand;\r\n _this._disposers.push(_this._axis);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Re(validates) the clock hand, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ClockHand.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n var hand = this.hand;\r\n hand.width = this.pixelWidth;\r\n var h = Math.max(this.startWidth, this.endWidth);\r\n hand.height = h;\r\n hand.leftSide = percent(this.startWidth / h * 100);\r\n hand.rightSide = percent(this.endWidth / h * 100);\r\n if (this.axis) {\r\n var renderer = this.axis.renderer;\r\n var x0 = $utils.relativeRadiusToValue(this.innerRadius, renderer.pixelRadius);\r\n var x1 = $utils.relativeRadiusToValue(this.radius, renderer.pixelRadius);\r\n hand.x = x0;\r\n hand.y = -h / 2;\r\n hand.width = x1 - x0;\r\n }\r\n };\r\n Object.defineProperty(ClockHand.prototype, \"pin\", {\r\n /**\r\n * @return Pin element\r\n */\r\n get: function () {\r\n return this._pin;\r\n },\r\n /**\r\n * A circle element used as hand's base. (pin)\r\n *\r\n * @param pin Pin element\r\n */\r\n set: function (pin) {\r\n if (this._pin) {\r\n this.removeDispose(this._pin);\r\n }\r\n if (pin) {\r\n this._pin = pin;\r\n pin.parent = this;\r\n this._disposers.push(pin);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClockHand.prototype, \"hand\", {\r\n /**\r\n * @return Hand element\r\n */\r\n get: function () {\r\n return this._hand;\r\n },\r\n /**\r\n * A trapezoid shape used for hand itself.\r\n *\r\n * The shape of the trapezoid is controlled by ClockHand's `startWidth` and\r\n * `endWidth` properties.\r\n *\r\n * Set `endWidth` to 1 (px) to make it pointy.\r\n *\r\n * @param hand Hand element\r\n */\r\n set: function (hand) {\r\n if (this._hand) {\r\n this.removeDispose(this._hand);\r\n }\r\n if (hand) {\r\n this._hand = hand;\r\n hand.parent = this;\r\n this._disposers.push(hand);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClockHand.prototype, \"radius\", {\r\n /**\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Radius of the hand's outer end. (tip)\r\n *\r\n * Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(0)\r\n * @param value Radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClockHand.prototype, \"innerRadius\", {\r\n /**\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Radius of the hand's inner end. (base)\r\n *\r\n * Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @default Percent(0)\r\n * @param value Radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClockHand.prototype, \"startWidth\", {\r\n /**\r\n * @return Width (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startWidth\");\r\n },\r\n /**\r\n * Width, in pixels, of the clock hand's inner end. (base)\r\n *\r\n * @default 5\r\n * @param value Width (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startWidth\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClockHand.prototype, \"endWidth\", {\r\n /**\r\n * @return Width (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endWidth\");\r\n },\r\n /**\r\n * Width, in pixels, of the clock hand's outer end. (tip)\r\n *\r\n * @default 1\r\n * @param value Width (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endWidth\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClockHand.prototype, \"rotationDirection\", {\r\n /**\r\n * @return rotationDirection\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"rotationDirection\");\r\n },\r\n /**\r\n * Rotation direction\r\n *\r\n * @default any\r\n * @param value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"rotationDirection\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Moves clock hand to particular value.\r\n *\r\n * If `duration` is set to a number in milliseconds, the hand will move\r\n * to the new position gracefully, rather than jumping rigth to it.\r\n *\r\n * Alternatively, you can also set `value` directly.\r\n *\r\n * @param value New value\r\n * @param duration Animation duration (ms)\r\n * @param easing Animation easing function\r\n */\r\n ClockHand.prototype.showValue = function (value, duration, easing) {\r\n this._value = value;\r\n if (value != undefined) {\r\n if (!$type.isNumber(duration)) {\r\n duration = 0;\r\n }\r\n if (this.axis) {\r\n var renderer = this.axis.renderer;\r\n var newAngle = renderer.positionToAngle(this.axis.anyToPosition(value));\r\n var currentAngle = this.rotation;\r\n if (this.rotationDirection == \"clockWise\") {\r\n if (newAngle < currentAngle) {\r\n this.rotation = currentAngle - 360;\r\n }\r\n }\r\n if (this.rotationDirection == \"counterClockWise\") {\r\n if (newAngle > currentAngle) {\r\n this.rotation = currentAngle + 360;\r\n }\r\n }\r\n this.animate({ property: \"rotation\", to: newAngle }, duration, easing);\r\n }\r\n }\r\n };\r\n Object.defineProperty(ClockHand.prototype, \"currentPosition\", {\r\n /**\r\n * Returns hand's relative position on axis\r\n */\r\n get: function () {\r\n if (this.axis) {\r\n var renderer = this.axis.renderer;\r\n return renderer.angleToPosition(this.rotation);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClockHand.prototype, \"value\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this._value;\r\n },\r\n /**\r\n * A current value clock hand is pointing to.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.showValue(value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClockHand.prototype, \"axis\", {\r\n /**\r\n * @return Axis\r\n */\r\n get: function () {\r\n return this._axis.get();\r\n },\r\n /**\r\n * An Axis clock hand is associated with.\r\n *\r\n * Hand's `value` relates to values on the Axis.\r\n *\r\n * @param axis Axis\r\n */\r\n set: function (axis) {\r\n if (this.axis != axis) {\r\n this._axis.set(axis, new MultiDisposer([\r\n axis.events.on(\"datavalidated\", this.updateValue, this, false),\r\n axis.events.on(\"datarangechanged\", this.updateValue, this, false),\r\n axis.events.on(\"dataitemsvalidated\", this.updateValue, this, false),\r\n axis.events.on(\"propertychanged\", this.invalidate, this, false)\r\n ]));\r\n }\r\n if (axis) {\r\n var chart = axis.chart;\r\n if (chart) {\r\n this.rotation = chart.startAngle;\r\n }\r\n }\r\n this.parent = axis.renderer;\r\n this.zIndex = 5;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Triggers `value` accessor, so that Hand animates to new position, in case\r\n * value has changed.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ClockHand.prototype.updateValue = function () {\r\n this.value = this.value;\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n ClockHand.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Connect clock hands with axes\r\n if ($type.hasValue(config.axis) && $type.isString(config.axis) && this.map.hasKey(config.axis)) {\r\n config.axis = this.map.getKey(config.axis);\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n return ClockHand;\r\n}(Container));\r\nexport { ClockHand };\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//# sourceMappingURL=ClockHand.js.map","/**\r\n * Module for building Gauge charts.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart, RadarChartDataItem } from \"./RadarChart\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { ClockHand } from \"../elements/ClockHand\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[GaugeChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar GaugeChartDataItem = /** @class */ (function (_super) {\r\n __extends(GaugeChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function GaugeChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"GaugeChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return GaugeChartDataItem;\r\n}(RadarChartDataItem));\r\nexport { GaugeChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar GaugeChart = /** @class */ (function (_super) {\r\n __extends(GaugeChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function GaugeChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"GaugeChart\";\r\n _this.startAngle = 180;\r\n _this.endAngle = 360;\r\n _this.hands = new ListTemplate(new ClockHand());\r\n _this.hands.events.on(\"inserted\", _this.processHand, _this, false);\r\n _this._disposers.push(new ListDisposer(_this.hands));\r\n _this._disposers.push(_this.hands.template);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n GaugeChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Gauge chart\");\r\n }\r\n };\r\n /**\r\n * Decorates a [[ClockHand]] when it is added to the chart.\r\n *\r\n * @param event Event\r\n */\r\n GaugeChart.prototype.processHand = function (event) {\r\n var hand = event.newValue;\r\n if (!hand.axis) {\r\n hand.axis = this.xAxes.getIndex(0);\r\n }\r\n };\r\n /**\r\n * This function is used to sort element's JSON config properties, so that\r\n * some properties that absolutely need to be processed last, can be put at\r\n * the end.\r\n *\r\n * @ignore Exclude from docs\r\n * @param a Element 1\r\n * @param b Element 2\r\n * @return Sorting number\r\n */\r\n GaugeChart.prototype.configOrder = function (a, b) {\r\n if (a == b) {\r\n return 0;\r\n }\r\n // Must come last\r\n else if (a == \"hands\") {\r\n return 1;\r\n }\r\n else if (b == \"hands\") {\r\n return -1;\r\n }\r\n else {\r\n return _super.prototype.configOrder.call(this, a, b);\r\n }\r\n };\r\n return GaugeChart;\r\n}(RadarChart));\r\nexport { GaugeChart };\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//# sourceMappingURL=GaugeChart.js.map","/**\r\n * Defines Percent Chart Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { Tick } from \"../elements/Tick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { registry } from \"../../core/Registry\";\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 { Disposer } from \"../../core/utils/Disposer\";\r\nimport { defaultRules, ResponsiveBreakpoints } from \"../../core/utils/Responsive\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[PercentSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PercentSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(PercentSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PercentSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PercentSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Adds an `id` attribute the the slice element and returns its id.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PercentSeriesDataItem.prototype.uidAttr = function () {\r\n return this.slice.uidAttr();\r\n };\r\n /**\r\n * Hide the data item (and corresponding visual elements).\r\n *\r\n * @param duration Duration (ms)\r\n * @param delay Delay hiding (ms)\r\n * @param toValue Target value for animation\r\n * @param fields Fields to animate while hiding\r\n */\r\n PercentSeriesDataItem.prototype.hide = function (duration, delay, toValue, fields) {\r\n if (!fields) {\r\n fields = [\"value\"];\r\n }\r\n return _super.prototype.hide.call(this, duration, delay, 0, fields);\r\n };\r\n /**\r\n * Sets visibility of the Data Item.\r\n *\r\n * @param value Data Item\r\n */\r\n PercentSeriesDataItem.prototype.setVisibility = function (value, noChangeValues) {\r\n if (!noChangeValues) {\r\n if (value) {\r\n this.setWorkingValue(\"value\", this.values[\"value\"].value, 0, 0);\r\n }\r\n else {\r\n this.setWorkingValue(\"value\", 0, 0, 0);\r\n }\r\n }\r\n _super.prototype.setVisibility.call(this, value, noChangeValues);\r\n };\r\n /**\r\n * Show hidden data item (and corresponding visual elements).\r\n *\r\n * @param duration Duration (ms)\r\n * @param delay Delay hiding (ms)\r\n * @param fields Fields to animate while hiding\r\n */\r\n PercentSeriesDataItem.prototype.show = function (duration, delay, fields) {\r\n if (!fields) {\r\n fields = [\"value\"];\r\n }\r\n return _super.prototype.show.call(this, duration, delay, fields);\r\n };\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"category\", {\r\n /**\r\n * @return Category\r\n */\r\n get: function () {\r\n return this.properties.category;\r\n },\r\n /**\r\n * Category.\r\n *\r\n * @param value Category\r\n */\r\n set: function (value) {\r\n this.setProperty(\"category\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates a marker used in the legend for this slice.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Marker container\r\n */\r\n PercentSeriesDataItem.prototype.createLegendMarker = function (marker) {\r\n this.component.createLegendMarker(marker, this);\r\n };\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"legendDataItem\", {\r\n /**\r\n * @return Legend data item\r\n */\r\n get: function () {\r\n return this._legendDataItem;\r\n },\r\n /**\r\n * A legend's data item, that corresponds to this data item.\r\n *\r\n * @param value Legend data item\r\n */\r\n set: function (value) {\r\n this._legendDataItem = value;\r\n if (value.label) {\r\n value.label.dataItem = this;\r\n }\r\n if (value.valueLabel) {\r\n value.valueLabel.dataItem = this;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"tick\", {\r\n /**\r\n * A Tick element, related to this data item. (slice)\r\n *\r\n * @readonly\r\n * @return Tick element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._tick) {\r\n var tick_1 = this.component.ticks.create();\r\n this._tick = tick_1;\r\n this.addSprite(tick_1);\r\n this._disposers.push(tick_1);\r\n tick_1.parent = this.component.ticksContainer;\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.ticks.removeValue(tick_1);\r\n }\r\n }));\r\n tick_1.visible = this.visible;\r\n }\r\n return this._tick;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"label\", {\r\n /**\r\n * A Label element, related to this data item. (slice)\r\n *\r\n * @readonly\r\n * @return Label element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._label) {\r\n var label_1 = this.component.labels.create();\r\n this.addSprite(label_1);\r\n this._label = label_1;\r\n this._disposers.push(label_1);\r\n label_1.parent = this.component.labelsContainer;\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.labels.removeValue(label_1);\r\n }\r\n }));\r\n label_1.visible = this.visible;\r\n }\r\n return this._label;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"slice\", {\r\n /**\r\n * An element, related to this data item. (slice)\r\n *\r\n * @readonly\r\n * @return Slice element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._slice) {\r\n var component_1 = this.component;\r\n var slice_1 = component_1.slices.create();\r\n this.addSprite(slice_1);\r\n this._slice = slice_1;\r\n this._disposers.push(slice_1);\r\n slice_1.parent = component_1.slicesContainer;\r\n this._disposers.push(new Disposer(function () {\r\n component_1.slices.removeValue(slice_1);\r\n }));\r\n slice_1.visible = this.visible;\r\n // Apply accessibility\r\n if (component_1.itemsFocusable()) {\r\n if (!$type.hasValue(this.component.role)) {\r\n this.component.role = \"menu\";\r\n }\r\n if (!$type.hasValue(slice_1.role)) {\r\n slice_1.role = \"menuitem\";\r\n }\r\n slice_1.focusable = true;\r\n }\r\n else {\r\n if (!$type.hasValue(this.component.role)) {\r\n this.component.role = \"list\";\r\n }\r\n if (!$type.hasValue(slice_1.role)) {\r\n slice_1.role = \"listitem\";\r\n }\r\n slice_1.focusable = false;\r\n }\r\n // Apply screen reader label\r\n if (slice_1.focusable) {\r\n slice_1.events.on(\"focus\", function (ev) {\r\n slice_1.readerTitle = component_1.populateString(component_1.itemReaderText, _this);\r\n }, undefined, false);\r\n slice_1.events.on(\"blur\", function (ev) {\r\n slice_1.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n if (slice_1.hoverable) {\r\n slice_1.events.on(\"over\", function (ev) {\r\n slice_1.readerTitle = component_1.populateString(component_1.itemReaderText, _this);\r\n }, undefined, false);\r\n slice_1.events.on(\"out\", function (ev) {\r\n slice_1.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n }\r\n return this._slice;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeriesDataItem.prototype, \"hiddenInLegend\", {\r\n /**\r\n * @return Disabled in legend?\r\n */\r\n get: function () {\r\n return this.properties.hiddenInLegend;\r\n },\r\n /**\r\n * Should dataItem (slice) be hidden in legend?\r\n *\r\n * @param value Visible in legend?\r\n */\r\n set: function (value) {\r\n this.setProperty(\"hiddenInLegend\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PercentSeriesDataItem;\r\n}(SeriesDataItem));\r\nexport { PercentSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[PercentSeries]] which is a base class for [[PieSeries]],\r\n * [[FunnelSeries]], and [[PyramidSeries]].\r\n *\r\n * @see {@link IPercentSeriesEvents} for a list of available Events\r\n * @see {@link IPercentSeriesAdapters} for a list of available Adapters\r\n */\r\nvar PercentSeries = /** @class */ (function (_super) {\r\n __extends(PercentSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PercentSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PercentSeries\";\r\n _this._addAllDataItems = false;\r\n _this.colors = new ColorSet();\r\n _this.colors.step = 1;\r\n _this.isMeasured = true;\r\n _this.calculatePercent = true;\r\n var slicesContainer = _this.createChild(Container);\r\n slicesContainer.shouldClone = false;\r\n slicesContainer.isMeasured = false;\r\n _this.slicesContainer = slicesContainer;\r\n var ticksContainer = _this.createChild(Container);\r\n ticksContainer.shouldClone = false;\r\n ticksContainer.isMeasured = false;\r\n ticksContainer.layout = \"none\";\r\n _this.ticksContainer = ticksContainer;\r\n var labelsContainer = _this.createChild(Container);\r\n labelsContainer.shouldClone = false;\r\n labelsContainer.isMeasured = false;\r\n labelsContainer.layout = \"none\";\r\n _this.labelsContainer = labelsContainer;\r\n _this.alignLabels = false;\r\n _this.bulletsContainer.toFront();\r\n // Make all slices focusable\r\n _this.skipFocusThreshold = 50;\r\n var defaultState = _this.defaultState;\r\n defaultState.transitionEasing = $ease.sinOut;\r\n // Accessibility\r\n _this.itemReaderText = \"{category}: {value.percent.formatNumber('#.#')}%\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creates a slice element.\r\n *\r\n * @return Slice\r\n */\r\n PercentSeries.prototype.createSlice = function () {\r\n return new Sprite();\r\n };\r\n /**\r\n * Creates a tick element.\r\n *\r\n * @return Tick\r\n */\r\n PercentSeries.prototype.createTick = function () {\r\n return new Tick();\r\n };\r\n /**\r\n * Sreates label element.\r\n *\r\n * @return label\r\n */\r\n PercentSeries.prototype.createLabel = function () {\r\n return new Label();\r\n };\r\n Object.defineProperty(PercentSeries.prototype, \"slices\", {\r\n /**\r\n * A list of slice elements for the series.\r\n *\r\n * Use its `template` to configure look and behavior of the slices. E.g.:\r\n *\r\n * ```TypeScript\r\n * series.slices.template.stroke = am4core.color(\"#fff\");\r\n * series.slices.template.strokeWidth = 2;\r\n * ```\r\n * ```JavaScript\r\n * series.slices.template.stroke = am4core.color(\"#fff\");\r\n * series.slices.template.strokeWidth = 2;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"slices\": {\r\n * \"stroke\": \"#fff\",\r\n * \"strokeWidth\": 2\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/list-templates/} for more information about list templates\r\n * @return Slices\r\n */\r\n get: function () {\r\n if (!this._slices) {\r\n var slice = this.createSlice();\r\n slice.applyOnClones = true;\r\n this._disposers.push(slice);\r\n this.initSlice(slice);\r\n this._slices = new ListTemplate(slice);\r\n this._disposers.push(new ListDisposer(this._slices));\r\n }\r\n return this._slices;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeries.prototype, \"ticks\", {\r\n /**\r\n * A list of tick elements for the series. Ticks connect slice to its label.\r\n *\r\n * Use its `template` to configure look and behavior of the ticks. E.g.:\r\n *\r\n * ```TypeScript\r\n * series.ticks.template.strokeWidth = 2;\r\n * ```\r\n * ```JavaScript\r\n * series.ticks.template.strokeWidth = 2;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"ticks\": {\r\n * \"strokeWidth\": 2\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/list-templates/} for more information about list templates\r\n * @return Ticks\r\n */\r\n get: function () {\r\n if (!this._ticks) {\r\n var tick = this.createTick();\r\n tick.applyOnClones = true;\r\n this._disposers.push(tick);\r\n this.initTick(tick);\r\n this._ticks = new ListTemplate(tick);\r\n this._disposers.push(new ListDisposer(this._ticks));\r\n }\r\n return this._ticks;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeries.prototype, \"labels\", {\r\n /**\r\n * A list of slice label elements for the series.\r\n *\r\n * Use its `template` to configure look and behavior of the labels. E.g.:\r\n *\r\n * ```TypeScript\r\n * series.labels.template.fill = am4core.color(\"#c00\");\r\n * series.labels.template.fontSize = 20;\r\n * ```\r\n * ```JavaScript\r\n * series.labels.template.fill = am4core.color(\"#c00\");\r\n * series.labels.template.fontSize = 20;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"labels\": {\r\n * \"stroke\": \"#c00\",\r\n * \"fontSize\": 20\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/list-templates/} for more information about list templates\r\n * @return Labels\r\n */\r\n get: function () {\r\n if (!this._labels) {\r\n var label = this.createLabel();\r\n label.applyOnClones = true;\r\n this._disposers.push(label);\r\n this.initLabel(label);\r\n this._labels = new ListTemplate(label);\r\n this._disposers.push(new ListDisposer(this._labels));\r\n }\r\n return this._labels;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n PercentSeries.prototype.createDataItem = function () {\r\n return new PercentSeriesDataItem();\r\n };\r\n /**\r\n * Creates and returns a new slice element.\r\n *\r\n * @param sliceType Type of the slice element\r\n * @return Slice\r\n */\r\n PercentSeries.prototype.initSlice = function (slice) {\r\n };\r\n PercentSeries.prototype.initLabel = function (label) {\r\n label.text = \"{category}: {value.percent.formatNumber('#.0')}%\";\r\n label.isMeasured = false;\r\n label.padding(5, 5, 5, 5);\r\n };\r\n PercentSeries.prototype.initTick = function (label) {\r\n };\r\n /**\r\n * Validates (processes) data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PercentSeries.prototype.validateDataItems = function () {\r\n this.colors.reset();\r\n if (this.patterns) {\r\n this.patterns.reset();\r\n }\r\n _super.prototype.validateDataItems.call(this);\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n PercentSeries.prototype.validateDataElement = function (dataItem) {\r\n var slice = dataItem.slice;\r\n if (slice) {\r\n if (slice.fill == undefined) {\r\n if (this.patterns) {\r\n if (!$type.hasValue(slice.stroke)) {\r\n slice.stroke = this.colors.next();\r\n }\r\n slice.fill = this.patterns.next();\r\n if ($type.hasValue(slice.fillOpacity)) {\r\n slice.fill.backgroundOpacity = slice.fillOpacity;\r\n }\r\n if (slice.stroke instanceof Color) {\r\n slice.fill.stroke = slice.stroke;\r\n slice.fill.fill = slice.stroke;\r\n }\r\n }\r\n else {\r\n slice.fill = this.colors.next();\r\n }\r\n }\r\n else {\r\n this.colors.currentStep += this.colors.step;\r\n }\r\n if (slice.stroke == undefined) {\r\n slice.stroke = slice.fill;\r\n }\r\n }\r\n // do this at the end, otherwise bullets won't be positioned properly\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n if (slice) {\r\n dataItem.bullets.each(function (key, bullet) {\r\n if (bullet.fill == undefined) {\r\n bullet.fill = slice.fill;\r\n }\r\n if (bullet.stroke == undefined) {\r\n bullet.stroke = slice.stroke;\r\n }\r\n });\r\n }\r\n this.updateLegendValue(dataItem);\r\n };\r\n /**\r\n * Validates (processes) data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PercentSeries.prototype.validateData = function () {\r\n _super.prototype.validateData.call(this);\r\n if (this.chart) {\r\n this.chart.feedLegend();\r\n }\r\n };\r\n /**\r\n * Arranges slice labels according to position settings.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItems Data items\r\n */\r\n PercentSeries.prototype.arrangeLabels = function (dataItems) {\r\n for (var i = 0, len = dataItems.length; i < len; i++) {\r\n var dataItem = dataItems[i];\r\n var label = dataItem.label;\r\n if (label) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n var lh = label.measuredHeight;\r\n if (!label.visible) {\r\n lh = 0;\r\n }\r\n if (label.pixelY - lh / 2 < -this.maxHeight / 2) {\r\n label.y = -this.maxHeight / 2 + lh / 2;\r\n }\r\n var nextLabel = this.getNextLabel(i + 1, dataItems);\r\n var bottom = label.pixelY + lh;\r\n if (nextLabel) {\r\n if (nextLabel.y < bottom) {\r\n nextLabel.y = bottom;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n PercentSeries.prototype.arrangeLabels2 = function (dataItems) {\r\n var previousTop = this.maxHeight / 2;\r\n for (var i = dataItems.length - 1; i >= 0; i--) {\r\n var dataItem = dataItems[i];\r\n var label = dataItem.label;\r\n if (label) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n var lh = label.measuredHeight;\r\n if (!label.visible) {\r\n lh = 0;\r\n }\r\n if (i == dataItems.length - 1) {\r\n previousTop += lh / 2;\r\n }\r\n if (label.pixelY + lh > previousTop) {\r\n label.y = previousTop - lh;\r\n previousTop = label.y;\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Returns the next label according to `index`.\r\n *\r\n * @param index Current index\r\n * @param dataItems Data items\r\n * @return Label element\r\n */\r\n PercentSeries.prototype.getNextLabel = function (index, dataItems) {\r\n if (dataItems.length >= index) {\r\n var nextDataItem = dataItems[index];\r\n if (nextDataItem) {\r\n if (nextDataItem.label) {\r\n if (nextDataItem.visible) {\r\n return nextDataItem.label;\r\n }\r\n else {\r\n return this.getNextLabel(index + 1, dataItems);\r\n }\r\n }\r\n else {\r\n return this.getNextLabel(index + 1, dataItems);\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(PercentSeries.prototype, \"colors\", {\r\n /**\r\n * @return Color set\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"colors\");\r\n },\r\n /**\r\n * A color set to be used for slices.\r\n *\r\n * For each new subsequent slice, the chart will assign the next color in\r\n * this set.\r\n *\r\n * @param value Color set\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"colors\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PercentSeries.prototype, \"patterns\", {\r\n /**\r\n * @return Pattern set\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"patterns\");\r\n },\r\n /**\r\n * A [[PatternSet]] to use when creating patterned fills for slices.\r\n *\r\n * @since 4.7.5\r\n * @param value Pattern set\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"patterns\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Binds related legend data item's visual settings to this series' visual\r\n * settings.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Container\r\n * @param dataItem Data item\r\n */\r\n PercentSeries.prototype.createLegendMarker = function (marker, dataItem) {\r\n $iter.each(marker.children.iterator(), function (child) {\r\n var slice = dataItem.slice;\r\n child.defaultState.properties.fill = slice.fill;\r\n child.defaultState.properties.stroke = slice.stroke;\r\n child.defaultState.properties.fillOpacity = slice.fillOpacity;\r\n child.defaultState.properties.strokeOpacity = slice.strokeOpacity;\r\n child.fill = slice.fill;\r\n child.stroke = slice.stroke;\r\n child.fillOpacity = slice.fillOpacity;\r\n child.strokeOpacity = slice.strokeOpacity;\r\n if (child.fill == undefined) {\r\n child.__disabled = true;\r\n }\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = slice.fill;\r\n legendDataItem.colorOrig = slice.fill;\r\n child.addDisposer(slice.events.on(\"propertychanged\", function (ev) {\r\n if (ev.property == \"fill\") {\r\n child.__disabled = false;\r\n if (!child.isActive) {\r\n child.fill = slice.fill;\r\n }\r\n child.defaultState.properties.fill = slice.fill;\r\n legendDataItem.color = slice.fill;\r\n legendDataItem.colorOrig = slice.fill;\r\n }\r\n if (ev.property == \"stroke\") {\r\n if (!child.isActive) {\r\n child.stroke = slice.stroke;\r\n }\r\n child.defaultState.properties.stroke = slice.stroke;\r\n }\r\n }, undefined, false));\r\n });\r\n };\r\n /**\r\n * Repositions bullets when slice's size changes.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n PercentSeries.prototype.handleSliceScale = function (event) {\r\n var _this = this;\r\n var slice = event.target;\r\n var dataItem = slice.dataItem;\r\n if (dataItem && dataItem.bullets) {\r\n $iter.each(dataItem.bullets.iterator(), function (a) {\r\n var value = a[1];\r\n _this.positionBullet(value);\r\n });\r\n }\r\n };\r\n /**\r\n * Repositions bullet and labels when slice moves.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n PercentSeries.prototype.handleSliceMove = function (event) {\r\n };\r\n /**\r\n * Copies all properties from another instance of [[PercentSeries]].\r\n *\r\n * @param source Source series\r\n */\r\n PercentSeries.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.slices.template.copyFrom(source.slices.template);\r\n this.labels.template.copyFrom(source.labels.template);\r\n this.ticks.template.copyFrom(source.ticks.template);\r\n this.colors = source.colors.clone();\r\n };\r\n Object.defineProperty(PercentSeries.prototype, \"alignLabels\", {\r\n /**\r\n * @return Align labels?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"alignLabels\");\r\n },\r\n /**\r\n * Align labels into nice vertical columns?\r\n *\r\n * This will ensure that labels never overlap with each other.\r\n *\r\n * Arranging labels into columns makes them more readble, and better user\r\n * experience.\r\n *\r\n * If set to `false` labels will be positioned at `label.radius` distance,\r\n * and may, in some cases, overlap.\r\n *\r\n * @default true\r\n * @param value Align labels?\r\n */\r\n set: function (value) {\r\n this.setAlignLabels(value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n PercentSeries.prototype.setAlignLabels = function (value) {\r\n this.setPropertyValue(\"alignLabels\", value, true);\r\n };\r\n Object.defineProperty(PercentSeries.prototype, \"ignoreZeroValues\", {\r\n /**\r\n * @return Ignore zero values\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"ignoreZeroValues\");\r\n },\r\n /**\r\n * If set to `true` the chart will not show slices with zero values.\r\n *\r\n * @default false\r\n * @since 4.7.9\r\n * @param value Ignore zero values\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"ignoreZeroValues\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates corresponding legend data item with current values.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n PercentSeries.prototype.updateLegendValue = function (dataItem) {\r\n if (dataItem) {\r\n var legendDataItem = dataItem.legendDataItem;\r\n var legendSettings = dataItem.legendSettings;\r\n if (legendDataItem && legendSettings) {\r\n if (legendSettings) {\r\n if (legendSettings.labelText) {\r\n legendDataItem.label.text = legendSettings.labelText;\r\n }\r\n if (legendSettings.itemLabelText) {\r\n legendDataItem.label.text = legendSettings.itemLabelText;\r\n }\r\n if (legendSettings.valueText) {\r\n legendDataItem.valueLabel.text = legendSettings.valueText;\r\n }\r\n if (legendSettings.itemValueText) {\r\n legendDataItem.valueLabel.text = legendSettings.itemValueText;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n return PercentSeries;\r\n}(Series));\r\nexport { PercentSeries };\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[\"PercentSeries\"] = PercentSeries;\r\nregistry.registeredClasses[\"PercentSeriesDataItem\"] = PercentSeriesDataItem;\r\n/**\r\n * Add default responsive rules\r\n */\r\n/**\r\n * Disable labels and ticks.\r\n */\r\ndefaultRules.push({\r\n relevant: ResponsiveBreakpoints.maybeXS,\r\n state: function (target, stateId) {\r\n if (target instanceof PercentSeries) {\r\n var state = target.states.create(stateId);\r\n var labelState = target.labels.template.states.create(stateId);\r\n labelState.properties.disabled = true;\r\n var tickState = target.ticks.template.states.create(stateId);\r\n tickState.properties.disabled = true;\r\n return state;\r\n }\r\n return null;\r\n }\r\n});\r\n//# sourceMappingURL=PercentSeries.js.map","/**\r\n * Percent chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, SerialChartDataItem } from \"./SerialChart\";\r\nimport { PercentSeries } from \"../series/PercentSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[PercentChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PercentChartDataItem = /** @class */ (function (_super) {\r\n __extends(PercentChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PercentChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PercentChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PercentChartDataItem;\r\n}(SerialChartDataItem));\r\nexport { PercentChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar PercentChart = /** @class */ (function (_super) {\r\n __extends(PercentChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PercentChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"PercentChart\";\r\n _this.align = \"none\";\r\n _this.valign = \"none\";\r\n // so that the chart is always drawn, even the legend wants all the space\r\n _this.chartContainer.minHeight = 50;\r\n _this.chartContainer.minWidth = 50;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates chart data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PercentChart.prototype.validateData = function () {\r\n _super.prototype.validateData.call(this);\r\n this.feedLegend();\r\n };\r\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\r\n PercentChart.prototype.feedLegend = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n var legendData_1 = [];\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (!series.hiddenInLegend) {\r\n $iter.each(series.dataItems.iterator(), function (dataItem) {\r\n if (!dataItem.hiddenInLegend) {\r\n legendData_1.push(dataItem);\r\n if (!dataItem.legendSettings) {\r\n dataItem.legendSettings = series.legendSettings;\r\n }\r\n }\r\n });\r\n }\r\n });\r\n legend.data = legendData_1;\r\n legend.dataFields.name = \"category\";\r\n }\r\n };\r\n /**\r\n * Creates a new [[PercentSeries]].\r\n *\r\n * @return New series\r\n */\r\n PercentChart.prototype.createSeries = function () {\r\n return new PercentSeries();\r\n };\r\n /**\r\n * @ignore\r\n */\r\n PercentChart.prototype.setLegend = function (legend) {\r\n _super.prototype.setLegend.call(this, legend);\r\n if (legend) {\r\n legend.labels.template.text = \"{category}\";\r\n legend.valueLabels.template.text = \"{value.percent.formatNumber('#.0')}%\";\r\n legend.itemContainers.template.events.on(\"over\", function (event) {\r\n var percentSeriesDataItem = event.target.dataItem.dataContext;\r\n if (percentSeriesDataItem.visible && !percentSeriesDataItem.isHiding) {\r\n var slice = percentSeriesDataItem.slice;\r\n slice.dispatchImmediately(\"over\");\r\n slice.isHover = true;\r\n slice.interactions.isRealHover = true;\r\n }\r\n });\r\n legend.itemContainers.template.events.on(\"out\", function (event) {\r\n var percentSeriesDataItem = event.target.dataItem.dataContext;\r\n var slice = percentSeriesDataItem.slice;\r\n slice.dispatchImmediately(\"out\");\r\n slice.isHover = false;\r\n });\r\n }\r\n };\r\n return PercentChart;\r\n}(SerialChart));\r\nexport { PercentChart };\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;\r\n//# sourceMappingURL=PercentChart.js.map","/**\r\n * Pie tick module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Tick } from \"../elements/Tick\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar PieTick = /** @class */ (function (_super) {\r\n __extends(PieTick, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieTick() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A label element this tick is attached to.\r\n */\r\n _this._label = new MutableValueDisposer();\r\n /**\r\n * A slice element this tick is attached to.\r\n */\r\n _this._slice = new MutableValueDisposer();\r\n _this.className = \"PieTick\";\r\n _this.element = _this.paper.add(\"polyline\");\r\n _this._disposers.push(_this._label);\r\n _this._disposers.push(_this._slice);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the tick element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieTick.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var slice = this.slice;\r\n var label = this.label;\r\n var series = slice.dataItem.component;\r\n if (slice && slice.radius > 0 && label && label.text) {\r\n var x0 = slice.dx + slice.slice.dx + slice.pixelX + slice.ix * slice.radius * slice.scale;\r\n var y0 = slice.dy + slice.slice.dy + slice.pixelY + slice.iy * slice.radiusY * slice.scale;\r\n var x1 = void 0;\r\n var y1 = void 0;\r\n var x2 = void 0;\r\n var y2 = void 0;\r\n if (series.alignLabels) {\r\n x1 = label.pixelX - this.length;\r\n y1 = label.pixelY;\r\n x2 = label.pixelX;\r\n y2 = y1;\r\n if (label.horizontalCenter == \"right\") {\r\n x1 += 2 * this.length;\r\n x2 = x1 - this.length;\r\n }\r\n }\r\n else {\r\n var r = label.pixelRadius(slice.radius);\r\n x1 = x0 + r * slice.ix;\r\n y1 = y0 + r * slice.iy;\r\n x2 = x1;\r\n y2 = y1;\r\n }\r\n this.element.attr({ \"points\": [x0, y0, x1, y1, x2, y2] });\r\n }\r\n };\r\n Object.defineProperty(PieTick.prototype, \"slice\", {\r\n /**\r\n * @return Slice\r\n */\r\n get: function () {\r\n return this._slice.get();\r\n },\r\n /**\r\n * Slice element tick is attached to.\r\n *\r\n * @param slice Slice\r\n */\r\n set: function (slice) {\r\n this._slice.set(slice, new MultiDisposer([\r\n slice.events.on(\"transformed\", this.invalidate, this),\r\n slice.events.on(\"validated\", this.invalidate, this)\r\n ]));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieTick.prototype, \"label\", {\r\n /**\r\n * @return Label\r\n */\r\n get: function () {\r\n return this._label.get();\r\n },\r\n /**\r\n * Label element tick is attached to.\r\n *\r\n * @param label Label\r\n */\r\n set: function (label) {\r\n this._label.set(label, label.events.on(\"transformed\", this.invalidate, this, false));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PieTick;\r\n}(Tick));\r\nexport { PieTick };\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//# sourceMappingURL=PieTick.js.map","/**\r\n * Defines Pie Chart Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentSeries, PercentSeriesDataItem } from \"./PercentSeries\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\n//import { Slice3D } from \"../../core/elements/3D/Slice3D\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { PieTick } from \"../elements/PieTick\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[PieSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PieSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(PieSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieSeriesDataItem\";\r\n _this.values.radiusValue = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(PieSeriesDataItem.prototype, \"radiusValue\", {\r\n /**\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.values.radiusValue.value;\r\n },\r\n /**\r\n * Slice's radius, if other than default.\r\n *\r\n * @param value Radius\r\n */\r\n set: function (value) {\r\n this.setValue(\"radiusValue\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Hide the data item (and corresponding visual elements).\r\n *\r\n * @param duration Duration (ms)\r\n * @param delay Delay hiding (ms)\r\n * @param toValue Target value for animation\r\n * @param fields Fields to animate while hiding\r\n */\r\n PieSeriesDataItem.prototype.hide = function (duration, delay, toValue, fields) {\r\n return _super.prototype.hide.call(this, duration, delay, 0, [\"value\", \"radiusValue\"]);\r\n };\r\n /**\r\n * Show hidden data item (and corresponding visual elements).\r\n *\r\n * @param duration Duration (ms)\r\n * @param delay Delay hiding (ms)\r\n * @param fields Fields to animate while hiding\r\n */\r\n PieSeriesDataItem.prototype.show = function (duration, delay, fields) {\r\n return _super.prototype.show.call(this, duration, delay, [\"value\", \"radiusValue\"]);\r\n };\r\n return PieSeriesDataItem;\r\n}(PercentSeriesDataItem));\r\nexport { PieSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar PieSeries = /** @class */ (function (_super) {\r\n __extends(PieSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieSeries\";\r\n _this.alignLabels = true;\r\n //this.startAngle = -90;\r\n //this.endAngle = 270;\r\n _this.layout = \"none\";\r\n _this.labels.template.radius = percent(5);\r\n _this.addDisposer(_this.labels.template.events.on(\"enabled\", _this.invalidate, _this, false));\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * creates slice\r\n */\r\n PieSeries.prototype.createSlice = function () {\r\n return new Slice();\r\n };\r\n /**\r\n * creates tick\r\n */\r\n PieSeries.prototype.createTick = function () {\r\n return new PieTick();\r\n };\r\n /**\r\n * creates label\r\n */\r\n PieSeries.prototype.createLabel = function () {\r\n return new AxisLabelCircular();\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n PieSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Pie Slice Series\");\r\n }\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n PieSeries.prototype.createDataItem = function () {\r\n return new PieSeriesDataItem();\r\n };\r\n /**\r\n * Inits slice.\r\n *\r\n * @param slice to init\r\n */\r\n PieSeries.prototype.initSlice = function (slice) {\r\n slice.isMeasured = false;\r\n slice.defaultState.properties.scale = 1;\r\n slice.observe(\"scale\", this.handleSliceScale, this);\r\n slice.observe([\"dx\", \"dy\", \"x\", \"y\", \"shiftRadius\"], this.handleSliceMove, this);\r\n slice.tooltipText = \"{category}: {value.percent.formatNumber('#.#')}% ({value.value})\";\r\n var hoverState = slice.states.create(\"hover\");\r\n hoverState.properties.scale = 1.05;\r\n var defaultState = slice.defaultState;\r\n defaultState.properties.shiftRadius = 0;\r\n slice.togglable = true;\r\n slice.events.on(\"toggled\", function (event) {\r\n event.target.hideTooltip();\r\n // The following takes care of removing hover on subsequent click of\r\n // a slice\r\n if (event.target.interactions.lastHitPointer\r\n && event.target.interactions.lastHitPointer.touch\r\n && !event.target.isActive) {\r\n event.target.isHover = false;\r\n }\r\n });\r\n var activeState = slice.states.create(\"active\");\r\n activeState.properties.shiftRadius = 0.10;\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieSeries.prototype.validate = function () {\r\n this._leftItems = [];\r\n this._rightItems = [];\r\n this._currentStartAngle = this.startAngle;\r\n this._arcRect = $math.getArcRect(this.startAngle, this.endAngle);\r\n this._maxRadiusPercent = 0;\r\n for (var i = this.startIndex; i < this.endIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n var radiusValuePercent = dataItem.values.radiusValue.percent;\r\n if (radiusValuePercent > this._maxRadiusPercent) {\r\n this._maxRadiusPercent = radiusValuePercent;\r\n }\r\n }\r\n _super.prototype.validate.call(this);\r\n if (this.alignLabels) {\r\n if (this.startAngle > this.endAngle) {\r\n this._rightItems.reverse();\r\n }\r\n else {\r\n this._leftItems.reverse();\r\n }\r\n this._rightItems.sort(function (a, b) {\r\n var aAngle = (a.slice.middleAngle + 360) % 360;\r\n var bAngle = (b.slice.middleAngle + 360) % 360;\r\n if (aAngle > 270) {\r\n aAngle -= 360;\r\n }\r\n if (bAngle > 270) {\r\n bAngle -= 360;\r\n }\r\n if (aAngle < bAngle) {\r\n return -1;\r\n }\r\n else if (aAngle > bAngle) {\r\n return 1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n this._leftItems.sort(function (a, b) {\r\n var aAngle = (a.slice.middleAngle + 360) % 360;\r\n var bAngle = (b.slice.middleAngle + 360) % 360;\r\n if (aAngle < bAngle) {\r\n return 1;\r\n }\r\n else if (aAngle > bAngle) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n this.arrangeLabels(this._rightItems);\r\n this.arrangeLabels2(this._rightItems);\r\n this.arrangeLabels(this._leftItems);\r\n this.arrangeLabels2(this._leftItems);\r\n }\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n PieSeries.prototype.validateDataElement = function (dataItem) {\r\n if (this.pixelRadius > 0) {\r\n if (this.ignoreZeroValues && (dataItem.value == 0 || dataItem.value == null)) {\r\n dataItem.__disabled = true;\r\n }\r\n else {\r\n dataItem.__disabled = false;\r\n }\r\n // SLICE\r\n var slice = dataItem.slice;\r\n slice.radius = this.pixelRadius;\r\n if ($type.isNumber(dataItem.radiusValue)) {\r\n slice.radius = this.pixelInnerRadius + (this.pixelRadius - this.pixelInnerRadius) * dataItem.values.radiusValue.percent / this._maxRadiusPercent;\r\n }\r\n if (!(slice.innerRadius instanceof Percent)) {\r\n slice.innerRadius = this.pixelInnerRadius;\r\n }\r\n slice.startAngle = this._currentStartAngle;\r\n slice.arc = Math.abs(dataItem.values.value.percent) * (this.endAngle - this.startAngle) / 100;\r\n // LABEL\r\n if (!this.labels.template.disabled) {\r\n var label = dataItem.label;\r\n var tick = dataItem.tick;\r\n tick.slice = slice;\r\n tick.label = label;\r\n var normalizedMiddleAngle = (slice.middleAngle + 360) % 360; // force angle to be 0 - 360;\r\n var point = void 0;\r\n if (this.alignLabels) {\r\n var labelRadius = label.pixelRadius(slice.radius);\r\n var x = tick.length + labelRadius;\r\n label.dx = 0;\r\n label.dy = 0;\r\n label.verticalCenter = \"middle\";\r\n var arcRect = this._arcRect;\r\n // right half\r\n if (normalizedMiddleAngle > 270 || normalizedMiddleAngle <= 90) {\r\n x += (arcRect.width + arcRect.x) * this.pixelRadius;\r\n label.horizontalCenter = \"left\";\r\n this._rightItems.push(dataItem);\r\n }\r\n // left half\r\n else {\r\n x -= arcRect.x * this.pixelRadius;\r\n label.horizontalCenter = \"right\";\r\n this._leftItems.push(dataItem);\r\n x *= -1;\r\n }\r\n var distance = slice.radius + tick.length + labelRadius;\r\n point = { x: x, y: slice.iy * distance };\r\n label.moveTo(point);\r\n }\r\n else {\r\n var depth = slice[\"depth\"];\r\n if (!$type.isNumber(depth)) {\r\n depth = 0;\r\n }\r\n label.fixPosition(slice.middleAngle, slice.radius, slice.radiusY, 0, -depth);\r\n }\r\n }\r\n this._currentStartAngle += slice.arc;\r\n // do this at the end, otherwise bullets won't be positioned properly\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n }\r\n };\r\n Object.defineProperty(PieSeries.prototype, \"radius\", {\r\n /**\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius for the series' slices in pixels or [[Percent]].\r\n *\r\n * @param value Radius\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"radius\", value, true, false, 10, false)) {\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"pixelRadius\", {\r\n /**\r\n * @return Radius\r\n * @ignore\r\n */\r\n get: function () {\r\n return this._pixelRadius;\r\n },\r\n /**\r\n * @ignore\r\n */\r\n set: function (value) {\r\n if (this._pixelRadius != value) {\r\n this._pixelRadius = value;\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * @return Pixel inner radius\r\n * @ignore\r\n */\r\n get: function () {\r\n return this._pixelInnerRadius;\r\n },\r\n /**\r\n * @ignore\r\n */\r\n set: function (value) {\r\n if (this._pixelInnerRadius != value) {\r\n this._pixelInnerRadius = value;\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"innerRadius\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius for the series' slices in pixels.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Redo so that users can set it\r\n * @param value Radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"startAngle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n var startAngle = this.getPropertyValue(\"startAngle\");\r\n if ($type.isNumber(startAngle)) {\r\n return startAngle;\r\n }\r\n else {\r\n return this._startAngleInternal;\r\n }\r\n },\r\n /**\r\n * Start angle for the series' slices in degrees. (0-360)\r\n *\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", $math.normalizeAngle(value), true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries.prototype, \"endAngle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n var endAngle = this.getPropertyValue(\"endAngle\");\r\n if ($type.isNumber(endAngle)) {\r\n return endAngle;\r\n }\r\n else {\r\n return this._endAngleInternal;\r\n }\r\n },\r\n /**\r\n * End angle for the series' slices in degrees. (0-360)\r\n *\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Positions series bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet Bullet\r\n */\r\n PieSeries.prototype.positionBullet = function (bullet) {\r\n _super.prototype.positionBullet.call(this, bullet);\r\n var dataItem = bullet.dataItem;\r\n var slice = dataItem.slice;\r\n var locationX = bullet.locationX;\r\n if (!$type.isNumber(locationX)) {\r\n locationX = 0.5;\r\n }\r\n var locationY = bullet.locationY;\r\n if (!$type.isNumber(locationY)) {\r\n locationY = 1;\r\n }\r\n var angle = slice.startAngle + slice.arc * locationX;\r\n bullet.x = locationY * slice.radius * $math.cos(angle);\r\n bullet.y = locationY * slice.radiusY * $math.sin(angle);\r\n };\r\n /**\r\n * Repositions bullet and labels when slice moves.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n PieSeries.prototype.handleSliceMove = function (event) {\r\n if (!this.alignLabels) {\r\n var slice = event.target;\r\n var dataItem = slice.dataItem;\r\n // moving textelement, as label dx and dy are already employed for aligning\r\n //@labeltodo\r\n if (dataItem) {\r\n var label = dataItem.label;\r\n if (label) {\r\n label.dx = label.fdx + slice.dx + slice.pixelX;\r\n label.dy = label.fdy + slice.dy + slice.pixelY;\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(PieSeries.prototype, \"bbox\", {\r\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n if (this.definedBBox) {\r\n return this.definedBBox;\r\n }\r\n var chart = this.chart;\r\n if (chart) {\r\n return $math.getArcRect(chart.startAngle, chart.endAngle, this.pixelRadius);\r\n }\r\n return $math.getArcRect(this.startAngle, this.endAngle, this.pixelRadius);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PieSeries;\r\n}(PercentSeries));\r\nexport { PieSeries };\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//# sourceMappingURL=PieSeries.js.map","/**\r\n * Pie chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, PercentChartDataItem } from \"./PercentChart\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { PieSeries } from \"../series/PieSeries\";\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 * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PieChartDataItem = /** @class */ (function (_super) {\r\n __extends(PieChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PieChartDataItem;\r\n}(PercentChartDataItem));\r\nexport { PieChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.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\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.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\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"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\nvar PieChart = /** @class */ (function (_super) {\r\n __extends(PieChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"PieChart\";\r\n // Set defaults\r\n _this.innerRadius = 0;\r\n _this.radius = percent(80);\r\n _this.align = \"none\";\r\n _this.valign = \"none\";\r\n _this.startAngle = -90;\r\n _this.endAngle = 270;\r\n var seriesContainer = _this.seriesContainer;\r\n seriesContainer.isMeasured = true;\r\n seriesContainer.valign = \"middle\";\r\n seriesContainer.align = \"center\";\r\n seriesContainer.layout = \"absolute\";\r\n seriesContainer.width = undefined;\r\n seriesContainer.height = undefined;\r\n // so that the pie is always drawn, even the legend wants all the space\r\n _this.chartContainer.minHeight = 50;\r\n _this.chartContainer.minWidth = 50;\r\n _this.chartContainer.events.on(\"maxsizechanged\", _this.updateRadius, _this, false); // need this for the chart to change radius if legend is removed/disabled\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n PieChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Pie chart\");\r\n }\r\n };\r\n /**\r\n * (Re)validates the chart, causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieChart.prototype.validateLayout = function () {\r\n _super.prototype.validateLayout.call(this);\r\n this.updateRadius();\r\n };\r\n /**\r\n * Decorates a new [[Series]] object with required parameters when it is\r\n * added to the chart.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n PieChart.prototype.handleSeriesAdded = function (event) {\r\n _super.prototype.handleSeriesAdded.call(this, event);\r\n this._chartPixelRadius = undefined;\r\n this.updateSeriesAngles();\r\n };\r\n PieChart.prototype.updateSeriesAngles = function () {\r\n var _this = this;\r\n this.series.each(function (series) {\r\n series._startAngleInternal = _this.startAngle;\r\n series._endAngleInternal = _this.endAngle;\r\n //series.defaultState.properties.startAngle = this.startAngle;\r\n //series.defaultState.properties.endAngle = this.endAngle;\r\n });\r\n };\r\n /**\r\n * Recalculates pie's radius, based on a number of criteria.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieChart.prototype.updateRadius = function () {\r\n var chartCont = this.chartContainer;\r\n var rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n var innerRect = { x: 0, y: 0, width: 0, height: 0 };\r\n var innerRadius = this.innerRadius;\r\n if (innerRadius instanceof Percent) {\r\n innerRect = $math.getArcRect(this.startAngle, this.endAngle, innerRadius.value);\r\n }\r\n // @todo handle this when innerRadius set in pixels (do it for radar also)\r\n rect = $math.getCommonRectangle([rect, innerRect]);\r\n var maxRadius = Math.min(chartCont.innerWidth / rect.width, chartCont.innerHeight / rect.height);\r\n if (!$type.isNumber(maxRadius)) {\r\n maxRadius = 0;\r\n }\r\n var chartRadius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n var chartPixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, maxRadius);\r\n var seriesRadius = (chartRadius - chartPixelInnerRadius) / this.series.length;\r\n if (chartRadius != this._chartPixelRadius || chartPixelInnerRadius != this._chartPixelInnerRadius) {\r\n this._chartPixelRadius = chartRadius;\r\n this._chartPixelInnerRadius = chartPixelInnerRadius;\r\n //@todo: make it possible to set series radius in percent\r\n $iter.each($iter.indexed(this.series.iterator()), function (a) {\r\n var i = a[0];\r\n var series = a[1];\r\n var radius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.radius, chartRadius - chartPixelInnerRadius);\r\n var innerRadius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.innerRadius, chartRadius - chartPixelInnerRadius);\r\n if (!$type.isNumber(radius)) {\r\n radius = chartPixelInnerRadius + seriesRadius * (i + 1);\r\n }\r\n if (!$type.isNumber(innerRadius)) {\r\n innerRadius = chartPixelInnerRadius + seriesRadius * i;\r\n }\r\n series.pixelRadius = radius;\r\n series.pixelInnerRadius = innerRadius;\r\n });\r\n this.seriesContainer.definedBBox = { x: chartRadius * rect.x, y: chartRadius * rect.y, width: chartRadius * rect.width, height: chartRadius * rect.height };\r\n this.seriesContainer.invalidateLayout();\r\n this.bulletsContainer.x = this.seriesContainer.x;\r\n this.bulletsContainer.y = this.seriesContainer.y;\r\n }\r\n };\r\n Object.defineProperty(PieChart.prototype, \"radius\", {\r\n /**\r\n * @return Radius (px or relative)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Sets radius of the pie chart.\r\n *\r\n * Setting to a number will mean a fixed pixel radius.\r\n *\r\n * Setting to an instance of [[Percent]] will mean a relative radius to\r\n * available space.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * // Set pie chart to be at 50% of the available space\r\n * pieChart.radius = am4core.percent(50);\r\n * ```\r\n * ```JavaScript\r\n * // Set pie chart to be at 50% of the available space\r\n * pieChart.radius = am4core.percent(50);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // Set pie chart to be at 50% of the available space\r\n * \"radius\": \"50%\"\r\n * }\r\n * ```\r\n *\r\n * @default 80%\r\n * @param value Radius (px or relative)\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"radius\", value, true, false, 10, false)) {\r\n this.invalidateLayout();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieChart.prototype, \"innerRadius\", {\r\n /**\r\n * @return Relative inner radius (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Sets relative inner radius (to create a donut chart).\r\n *\r\n * Setting to a number will mean a fixed pixel radius.\r\n *\r\n * Setting to an instance of [[Percent]] will mean a relative radius to\r\n * available space.\r\n *\r\n * NOTE: it's not related to `radius`.\r\n *\r\n * E.g.:\r\n *\r\n * ```TypeScript\r\n * // Set pie chart to be at 50% of the available space\r\n * pieChart.innerRadius = am4core.percent(50);\r\n * ```\r\n * ```JavaScript\r\n * // Set pie chart to be at 50% of the available space\r\n * pieChart.innerRadius = am4core.percent(50);\r\n * ```\r\n * ```JSON\r\n * {\r\n * // Set pie chart to be at 50% of the available space\r\n * \"innerRadius\": \"50%\"\r\n * }\r\n * ```\r\n *\r\n * @default 0\r\n * @param value Relative inner radius (0-1)\r\n * @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 */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates a new [[PieSeries]].\r\n *\r\n * @return New series\r\n */\r\n PieChart.prototype.createSeries = function () {\r\n return new PieSeries();\r\n };\r\n Object.defineProperty(PieChart.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Starting angle of the Pie circle. (degrees)\r\n *\r\n * Normally, a pie chart begins (the left side of the first slice is drawn)\r\n * at the top center. (at -90 degrees)\r\n *\r\n * You can use `startAngle` to change this setting.\r\n *\r\n * E.g. setting this to 0 will make the first slice be drawn to the right.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set to those lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a Pie chart that\r\n * looks like a quarter of a circle.\r\n *\r\n * NOTE: This setting is not supported in a 3D pie chart.\r\n *\r\n * @default -90\r\n * @param value Start angle (degrees)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startAngle\", value)) {\r\n this.updateRadius();\r\n this.updateSeriesAngles();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieChart.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * End angle of the Pie circle. (degrees)\r\n *\r\n * Normally, a pie chart ends (the right side of the last slice is drawn)\r\n * at the top center. (at 270 degrees)\r\n *\r\n * You can use `endAngle` to change this setting.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set to those lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a Pie chart that\r\n * looks like a quarter of a circle.\r\n *\r\n * NOTE: This setting is not supported in a 3D pie chart.\r\n *\r\n * @default 270\r\n * @param value End angle (degrees)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endAngle\", value)) {\r\n this.updateRadius();\r\n this.updateSeriesAngles();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PieChart;\r\n}(PercentChart));\r\nexport { PieChart };\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//# sourceMappingURL=PieChart.js.map","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { __extends } from \"tslib\";\r\nimport { PieSeries, PieSeriesDataItem } from \"../series/PieSeries\";\r\nimport { Slice3D } from \"../../core/elements/3d/Slice3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[PieSeries3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PieSeries3DDataItem = /** @class */ (function (_super) {\r\n __extends(PieSeries3DDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieSeries3DDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieSeries3DDataItem\";\r\n _this.values.depthValue = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(PieSeries3DDataItem.prototype, \"depthValue\", {\r\n /**\r\n * @return Depth\r\n */\r\n get: function () {\r\n return this.values[\"depthValue\"].value;\r\n },\r\n /**\r\n * Slice depth (height).\r\n *\r\n * @param value Depth\r\n */\r\n set: function (value) {\r\n this.setValue(\"depthValue\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PieSeries3DDataItem;\r\n}(PieSeriesDataItem));\r\nexport { PieSeries3DDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar PieSeries3D = /** @class */ (function (_super) {\r\n __extends(PieSeries3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieSeries3D() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieSeries3D\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n PieSeries3D.prototype.createDataItem = function () {\r\n return new PieSeries3DDataItem();\r\n };\r\n /**\r\n * creates slice\r\n */\r\n PieSeries3D.prototype.createSlice = function () {\r\n return new Slice3D();\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n PieSeries3D.prototype.validateDataElement = function (dataItem) {\r\n var slice = dataItem.slice;\r\n var depth = this.depth;\r\n if (!$type.isNumber(depth)) {\r\n depth = this.chart.depth;\r\n }\r\n var depthPercent = dataItem.values.depthValue.percent;\r\n if (!$type.isNumber(depthPercent)) {\r\n depthPercent = 100;\r\n }\r\n slice.depth = depthPercent * depth / 100;\r\n var angle = this.angle;\r\n if (!$type.isNumber(angle)) {\r\n angle = this.chart.angle;\r\n }\r\n slice.angle = angle;\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PieSeries3D.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n for (var i = this._workingStartIndex; i < this._workingEndIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n var slice = dataItem.slice;\r\n var startAngle = slice.startAngle;\r\n // find quarter\r\n //q0 || q1\r\n if ((startAngle >= -90 && startAngle < 90)) {\r\n slice.toFront();\r\n }\r\n //q2 || q3\r\n else if ((startAngle >= 90)) {\r\n slice.toBack();\r\n }\r\n }\r\n };\r\n Object.defineProperty(PieSeries3D.prototype, \"depth\", {\r\n /**\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth (height) of the pie slice in pixels.\r\n *\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"depth\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieSeries3D.prototype, \"angle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * Angle of the view point of the 3D pie. (0-360)\r\n *\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Positions series bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet Bullet\r\n */\r\n PieSeries3D.prototype.positionBullet = function (bullet) {\r\n _super.prototype.positionBullet.call(this, bullet);\r\n var dataItem = bullet.dataItem;\r\n var slice = dataItem.slice;\r\n bullet.y = bullet.pixelY - slice.depth;\r\n };\r\n return PieSeries3D;\r\n}(PieSeries));\r\nexport { PieSeries3D };\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//# sourceMappingURL=PieSeries3D.js.map","/**\r\n * 3D Pie chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PieChart, PieChartDataItem } from \"./PieChart\";\r\nimport { PieSeries3D } from \"../series/PieSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PieChart3DDataItem = /** @class */ (function (_super) {\r\n __extends(PieChart3DDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieChart3DDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PieChart3DDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PieChart3DDataItem;\r\n}(PieChartDataItem));\r\nexport { PieChart3DDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a 3D Pie chart.\r\n *\r\n * * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"Pie3DChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"Pie3DSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"Pie3DChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChart3DEvents} for a list of available Events\r\n * @see {@link IPieChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nvar PieChart3D = /** @class */ (function (_super) {\r\n __extends(PieChart3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PieChart3D() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"PieChart3D\";\r\n _this.depth = 20;\r\n _this.angle = 10;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(PieChart3D.prototype, \"depth\", {\r\n /**\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth of the 3D pie in pixels.\r\n *\r\n * This will determine \"height\" of the pie.\r\n *\r\n * @default 20\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"depth\", value)) {\r\n this.invalidateDataUsers();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PieChart3D.prototype, \"angle\", {\r\n /**\r\n * @return Angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * An angle of a \"point of view\" in degrees. Possible range 0 - 90.\r\n *\r\n * @default 10\r\n * @param value Angle (degrees)\r\n */\r\n set: function (value) {\r\n value = $math.fitToRange(value, 0, 90);\r\n if (this.setPropertyValue(\"angle\", value)) {\r\n this.invalidateDataUsers();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a new Series.\r\n *\r\n * @return New series\r\n */\r\n PieChart3D.prototype.createSeries = function () {\r\n return new PieSeries3D();\r\n };\r\n return PieChart3D;\r\n}(PieChart));\r\nexport { PieChart3D };\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//# sourceMappingURL=PieChart3D.js.map","/**\r\n * Sliced chart module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, PercentChartDataItem } from \"./PercentChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[SlicedChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar SlicedChartDataItem = /** @class */ (function (_super) {\r\n __extends(SlicedChartDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SlicedChartDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"SlicedChartDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return SlicedChartDataItem;\r\n}(PercentChartDataItem));\r\nexport { SlicedChartDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar SlicedChart = /** @class */ (function (_super) {\r\n __extends(SlicedChart, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SlicedChart() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"SlicedChart\";\r\n _this.seriesContainer.layout = \"horizontal\";\r\n _this.padding(15, 15, 15, 15);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n SlicedChart.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Sliced chart\");\r\n }\r\n };\r\n /**\r\n * (Re)validates the chart, causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SlicedChart.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n };\r\n return SlicedChart;\r\n}(PercentChart));\r\nexport { SlicedChart };\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//# sourceMappingURL=SlicedChart.js.map","/**\r\n * FlowDiagramNode module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $string from \"../../core/utils/String\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport { LegendSettings } from \"../Legend\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a node in a Flow Diagram.\r\n *\r\n * A Flow node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[FlowLink]] elements.\r\n *\r\n * @see {@link IFlowDiagramNodeEvents} for a list of available events\r\n * @see {@link IFlowDiagramNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar FlowDiagramNode = /** @class */ (function (_super) {\r\n __extends(FlowDiagramNode, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FlowDiagramNode() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Settings for the appearance of the related legend items.\r\n */\r\n _this.legendSettings = new LegendSettings();\r\n _this.className = \"FlowDiagramNode\";\r\n _this.isMeasured = false;\r\n // TODO can this be removed ?\r\n new InterfaceColorSet();\r\n _this.draggable = true;\r\n _this.inert = true;\r\n _this.setStateOnChildren = true;\r\n _this.events.on(\"positionchanged\", _this.invalidateLinks, _this, false);\r\n _this.events.on(\"sizechanged\", _this.invalidateLinks, _this, false);\r\n return _this;\r\n //this.events.on(\"hit\", this.handleHit, this, false);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n FlowDiagramNode.prototype.handleHit = function (event) {\r\n if (this.isHidden || this.isHiding) {\r\n this.show();\r\n }\r\n else {\r\n this.hide();\r\n }\r\n };\r\n /**\r\n * Shows hidden node.\r\n *\r\n * @param duration Duration of reveal animation (ms)\r\n * @return Animation\r\n */\r\n FlowDiagramNode.prototype.show = function (duration) {\r\n var animation = _super.prototype.show.call(this, duration);\r\n this.outgoingDataItems.each(function (dataItem) {\r\n if (!dataItem.toNode || (dataItem.toNode && !dataItem.toNode.isHidden)) {\r\n dataItem.setWorkingValue(\"value\", dataItem.getValue(\"value\"), duration);\r\n dataItem.link.show();\r\n }\r\n });\r\n this.incomingDataItems.each(function (dataItem) {\r\n if (!dataItem.fromNode || (dataItem.fromNode && !dataItem.fromNode.isHidden)) {\r\n dataItem.setWorkingValue(\"value\", dataItem.getValue(\"value\"), duration);\r\n dataItem.link.show();\r\n }\r\n });\r\n return animation;\r\n };\r\n /**\r\n * Hides node.\r\n *\r\n * @param duration Duration of hiding animation (ms)\r\n * @return Animation\r\n */\r\n FlowDiagramNode.prototype.hide = function (duration) {\r\n var animation = _super.prototype.hide.call(this, duration);\r\n this.outgoingDataItems.each(function (dataItem) {\r\n dataItem.setWorkingValue(\"value\", 0, duration);\r\n dataItem.link.hide();\r\n });\r\n this.incomingDataItems.each(function (dataItem) {\r\n dataItem.setWorkingValue(\"value\", 0, duration);\r\n dataItem.link.hide();\r\n });\r\n return animation;\r\n };\r\n /**\r\n * Marks node as invalid, for redrawal in the next update cycle.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FlowDiagramNode.prototype.validate = function () {\r\n if (!this.isDisposed()) {\r\n _super.prototype.validate.call(this);\r\n this.invalidateLinks();\r\n }\r\n };\r\n /**\r\n * Invalidates all links, attached to this node.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FlowDiagramNode.prototype.invalidateLinks = function () {\r\n var _this = this;\r\n this.outgoingDataItems.each(function (dataItem) {\r\n var link = dataItem.link;\r\n if (link.colorMode == \"fromNode\") {\r\n link.fill = link.dataItem.fromNode.color;\r\n }\r\n if (link.colorMode == \"gradient\") {\r\n link.fill = link.gradient;\r\n link.stroke = link.gradient;\r\n var stop_1 = link.gradient.stops.getIndex(0);\r\n if (stop_1) {\r\n stop_1.color = _this.color;\r\n link.gradient.validate();\r\n }\r\n }\r\n });\r\n this.incomingDataItems.each(function (dataItem) {\r\n var link = dataItem.link;\r\n if (link.colorMode == \"toNode\") {\r\n link.fill = link.dataItem.toNode.color;\r\n }\r\n if (link.colorMode == \"gradient\") {\r\n link.fill = link.gradient;\r\n link.stroke = link.gradient;\r\n var stop_2 = link.gradient.stops.getIndex(1);\r\n if (stop_2) {\r\n stop_2.color = _this.color;\r\n link.gradient.validate();\r\n }\r\n }\r\n });\r\n };\r\n Object.defineProperty(FlowDiagramNode.prototype, \"incomingDataItems\", {\r\n /**\r\n * List of incoming items (links).\r\n *\r\n * @readonly\r\n * @return Incoming items\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._incomingDataItems) {\r\n var incomingDataItems = new List();\r\n incomingDataItems.events.on(\"inserted\", function () {\r\n if (_this.chart.sortBy == \"name\") {\r\n _this._incomingSorted = $iter.sort(_this._incomingDataItems.iterator(), function (x, y) { return $string.order(x.fromName, y.fromName); });\r\n }\r\n else if (_this.chart.sortBy == \"value\") {\r\n _this._incomingSorted = $iter.sort(_this._incomingDataItems.iterator(), function (x, y) { return $order.reverse($number.order(x.value, y.value)); });\r\n }\r\n else {\r\n _this._incomingSorted = _this._incomingDataItems.iterator();\r\n }\r\n }, undefined, false);\r\n this._incomingDataItems = incomingDataItems;\r\n }\r\n return this._incomingDataItems;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramNode.prototype, \"outgoingDataItems\", {\r\n /**\r\n * List of outgoing items (links).\r\n *\r\n * @readonly\r\n * @return Outgoing items\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._outgoingDataItems) {\r\n var outgoingDataItems = new List();\r\n outgoingDataItems.events.on(\"inserted\", function () {\r\n if (_this.chart.sortBy == \"name\") {\r\n _this._outgoingSorted = $iter.sort(_this._outgoingDataItems.iterator(), function (x, y) { return $string.order(x.fromName, y.fromName); });\r\n }\r\n else if (_this.chart.sortBy == \"value\") {\r\n _this._outgoingSorted = $iter.sort(_this._outgoingDataItems.iterator(), function (x, y) { return $order.reverse($number.order(x.value, y.value)); });\r\n }\r\n else {\r\n _this._outgoingSorted = _this._outgoingDataItems.iterator();\r\n }\r\n }, undefined, false);\r\n this._outgoingDataItems = outgoingDataItems;\r\n }\r\n return this._outgoingDataItems;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramNode.prototype, \"name\", {\r\n /**\r\n * @return Name\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"name\");\r\n },\r\n /**\r\n * A name of the node.\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"name\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramNode.prototype, \"total\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"total\");\r\n },\r\n /**\r\n * Sum of all incoming+outgoing link values\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"total\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramNode.prototype, \"totalIncoming\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"totalIncoming\");\r\n },\r\n /**\r\n * Sum of all incomming link values.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"totalIncoming\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramNode.prototype, \"totalOutgoing\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"totalOutgoing\");\r\n },\r\n /**\r\n * Sum of all outgoing link values.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"totalOutgoing\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramNode.prototype, \"color\", {\r\n /**\r\n * @return Color\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"color\");\r\n },\r\n /**\r\n * Node's color.\r\n *\r\n * @param value Color\r\n */\r\n set: function (value) {\r\n this.setColorProperty(\"color\", value);\r\n if (this._background) {\r\n this._background.fill = value;\r\n }\r\n this.fill = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n FlowDiagramNode.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(RoundedRectangle);\r\n column.shouldClone = false;\r\n $object.copyProperties(this, column, visualProperties);\r\n column.stroke = this.fill;\r\n column.copyFrom(this);\r\n column.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n column.width = w;\r\n column.height = h;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = column.fill;\r\n legendDataItem.colorOrig = column.fill;\r\n };\r\n Object.defineProperty(FlowDiagramNode.prototype, \"legendDataItem\", {\r\n /**\r\n * @return Data item\r\n */\r\n get: function () {\r\n return this._legendDataItem;\r\n },\r\n /**\r\n * Legend data item that corresponds to this series.\r\n *\r\n * @param value Data item\r\n */\r\n set: function (value) {\r\n this._legendDataItem = value;\r\n this._legendDataItem.itemContainer.deepInvalidate();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FlowDiagramNode;\r\n}(Container));\r\nexport { FlowDiagramNode };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FlowDiagramNode\"] = FlowDiagramNode;\r\n//# sourceMappingURL=FlowDiagramNode.js.map","/**\r\n * FlowDiagramLink module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Polyline } from \"../../core/elements/Polyline\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Flow Diagram.\r\n *\r\n * @see {@link IFlowDiagramLinkEvents} for a list of available events\r\n * @see {@link IFlowDiagramLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar FlowDiagramLink = /** @class */ (function (_super) {\r\n __extends(FlowDiagramLink, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FlowDiagramLink() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"FlowDiagramLink\";\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.maskBullets = false;\r\n _this.colorMode = \"fromNode\";\r\n _this.layout = \"none\";\r\n _this.isMeasured = false;\r\n _this.startAngle = 0;\r\n _this.endAngle = 0;\r\n _this.strokeOpacity = 0;\r\n // this is very important, otherwise the container will be shifted\r\n _this.verticalCenter = \"none\";\r\n _this.horizontalCenter = \"none\";\r\n _this.tooltipText = \"{fromName}→{toName}:{value.value}\";\r\n _this.tooltipLocation = 0.5;\r\n _this.link = _this.createChild(Sprite);\r\n _this.link.shouldClone = false;\r\n _this.link.setElement(_this.paper.add(\"path\"));\r\n _this.link.isMeasured = false;\r\n _this.fillOpacity = 0.2;\r\n _this.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Positions bullets\r\n * @ignore\r\n */\r\n FlowDiagramLink.prototype.positionBullets = function () {\r\n var _this = this;\r\n $iter.each(this.bullets.iterator(), function (bullet) {\r\n bullet.parent = _this.bulletsContainer;\r\n bullet.maxWidth = _this.maxWidth;\r\n bullet.maxHeight = _this.maxHeight;\r\n _this.positionBullet(bullet);\r\n });\r\n };\r\n Object.defineProperty(FlowDiagramLink.prototype, \"bulletsContainer\", {\r\n /**\r\n * Bullets container\r\n */\r\n get: function () {\r\n if (!this._bulletsContainer) {\r\n var bulletsContainer = this.createChild(Container);\r\n bulletsContainer.shouldClone = false;\r\n bulletsContainer.layout = \"none\";\r\n this._bulletsContainer = bulletsContainer;\r\n }\r\n return this._bulletsContainer;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramLink.prototype, \"bulletsMask\", {\r\n /**\r\n * Bullets mask sprite\r\n */\r\n get: function () {\r\n if (!this._bulletsMask) {\r\n var bulletsMask = this.createChild(Sprite);\r\n bulletsMask.shouldClone = false;\r\n bulletsMask.setElement(this.paper.add(\"path\"));\r\n bulletsMask.isMeasured = false;\r\n this._bulletsMask = bulletsMask;\r\n }\r\n return this._bulletsMask;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Positions bullets at relative bullet.locationX position on the link.\r\n * @ignore\r\n */\r\n FlowDiagramLink.prototype.positionBullet = function (bullet) {\r\n var location = bullet.locationX;\r\n if (!$type.isNumber(location)) {\r\n location = bullet.locationY;\r\n }\r\n if (!$type.isNumber(location)) {\r\n location = 0.5;\r\n }\r\n var point = this.middleLine.positionToPoint(location);\r\n bullet.moveTo(point);\r\n var rotationField = bullet.propertyFields.rotation;\r\n var angle;\r\n if (bullet.dataItem) {\r\n var dataContext = bullet.dataItem.dataContext;\r\n angle = dataContext[rotationField];\r\n }\r\n if (!$type.isNumber(angle)) {\r\n angle = point.angle;\r\n }\r\n bullet.rotation = angle;\r\n };\r\n Object.defineProperty(FlowDiagramLink.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * [startAngle description]\r\n *\r\n * @todo Description\r\n * @param value Start angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramLink.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * [endAngle description]\r\n *\r\n * @todo Description\r\n * @param value End angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramLink.prototype, \"colorMode\", {\r\n /**\r\n * Fill mode\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"colorMode\");\r\n },\r\n /**\r\n * Should link be filled with a solid color, color of from node, color of toNode or gradient between node colors.\r\n * Some of the links, like ChordLink does not support gradiens well.\r\n *\r\n * @param value Fill mode\r\n */\r\n set: function (value) {\r\n if (value == \"gradient\") {\r\n var color = this.fill;\r\n this.gradient.stops.clear();\r\n if (color instanceof Color) {\r\n this.gradient.addColor(color);\r\n this.gradient.addColor(color);\r\n }\r\n this.fill = this.gradient;\r\n this.stroke = this.gradient;\r\n }\r\n this.setPropertyValue(\"colorMode\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramLink.prototype, \"maskBullets\", {\r\n /**\r\n * @return mask bullets value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maskBullets\");\r\n },\r\n /**\r\n * Should link bullets be masked or not\r\n *\r\n * @param value\r\n * @default false\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maskBullets\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramLink.prototype, \"tooltipLocation\", {\r\n /**\r\n * Tooltip location value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tooltipLocation\");\r\n },\r\n /**\r\n * Relative location of a tooltip.\r\n * @default 0.5\r\n *\r\n * @param value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tooltipLocation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Adds color steps in the link gradient.\r\n *\r\n * @param value Fill option\r\n */\r\n FlowDiagramLink.prototype.setFill = function (value) {\r\n _super.prototype.setFill.call(this, value);\r\n var gradient = this._gradient;\r\n if (gradient && value instanceof Color) {\r\n gradient.stops.clear();\r\n gradient.addColor(value);\r\n gradient.addColor(value);\r\n }\r\n };\r\n /**\r\n * Updates bounding box based on element dimension settings.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FlowDiagramLink.prototype.measureElement = function () {\r\n };\r\n Object.defineProperty(FlowDiagramLink.prototype, \"bullets\", {\r\n /**\r\n * List of bullets\r\n *\r\n * @return [description]\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._bullets) {\r\n this._bullets = new ListTemplate(new Bullet());\r\n this._disposers.push(new ListDisposer(this._bullets));\r\n this._disposers.push(this._bullets.template);\r\n this._bullets.events.on(\"inserted\", function (event) {\r\n event.newValue.events.on(\"propertychanged\", function (event) {\r\n if (event.property == \"locationX\" || event.property == \"locationY\") {\r\n _this.positionBullet(event.target);\r\n }\r\n }, undefined, false);\r\n }, undefined, false);\r\n }\r\n return this._bullets;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies properties from another [[FlowDiagramLink]].\r\n *\r\n * @param source Source link\r\n */\r\n FlowDiagramLink.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.bullets.copyFrom(source.bullets);\r\n var middleLine = this.middleLine;\r\n if (middleLine) {\r\n if (middleLine instanceof Line && source.middleLine instanceof Line) {\r\n middleLine.copyFrom(source.middleLine);\r\n }\r\n if (middleLine instanceof Polyline && source.middleLine instanceof Polyline) {\r\n middleLine.copyFrom(source.middleLine);\r\n }\r\n }\r\n this.link.copyFrom(source.link);\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Tooltip X (px)\r\n */\r\n FlowDiagramLink.prototype.getTooltipX = function () {\r\n if (this.middleLine) {\r\n return this.middleLine.positionToPoint(this.tooltipLocation).x;\r\n }\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Tooltip Y (px)\r\n */\r\n FlowDiagramLink.prototype.getTooltipY = function () {\r\n if (this.middleLine) {\r\n return this.middleLine.positionToPoint(this.tooltipLocation).y;\r\n }\r\n };\r\n Object.defineProperty(FlowDiagramLink.prototype, \"gradient\", {\r\n /**\r\n * A gradiend instance that is used to provided colored gradient fills for\r\n * the Flow link.\r\n */\r\n get: function () {\r\n if (!this._gradient) {\r\n this._gradient = new LinearGradient();\r\n }\r\n return this._gradient;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FlowDiagramLink;\r\n}(Container));\r\nexport { FlowDiagramLink };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FlowDiagramLink\"] = FlowDiagramLink;\r\n//# sourceMappingURL=FlowDiagramLink.js.map","/**\r\n * FlowDiagram module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, ChartDataItem } from \"../Chart\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { FlowDiagramNode } from \"../elements/FlowDiagramNode\";\r\nimport { FlowDiagramLink } from \"../elements/FlowDiagramLink\";\r\nimport { LinearGradientModifier } from \"../../core/rendering/fills/LinearGradientModifier\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { toColor, Color } from \"../../core/utils/Color\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo rearange notes after dragged\r\n/**\r\n * Defines a [[DataItem]] for [[FlowDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar FlowDiagramDataItem = /** @class */ (function (_super) {\r\n __extends(FlowDiagramDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FlowDiagramDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"FlowDiagramDataItem\";\r\n _this.values.value = {};\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"fromName\", {\r\n /**\r\n * @return name\r\n */\r\n get: function () {\r\n return this.properties.fromName;\r\n },\r\n /**\r\n * Source node's name.\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setProperty(\"fromName\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"toName\", {\r\n /**\r\n * @return name\r\n */\r\n get: function () {\r\n return this.properties.toName;\r\n },\r\n /**\r\n * Destination node's name.\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setProperty(\"toName\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"color\", {\r\n /**\r\n * @return color\r\n */\r\n get: function () {\r\n return this.properties.color;\r\n },\r\n /**\r\n * Node color\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setProperty(\"color\", toColor(value));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"value\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.value.value;\r\n },\r\n /**\r\n * Link's value.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"value\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagramDataItem.prototype, \"link\", {\r\n /**\r\n * A visual element, representing link between the source and target nodes.\r\n *\r\n * Link's actual thickness will be determined by `value` of this link and\r\n * `value` of the source node.\r\n *\r\n * @readonly\r\n * @return Link element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._link) {\r\n var link_1 = this.component.links.create();\r\n this._link = link_1;\r\n this.addSprite(link_1);\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.links.removeValue(link_1);\r\n }\r\n }));\r\n }\r\n return this._link;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FlowDiagramDataItem;\r\n}(ChartDataItem));\r\nexport { FlowDiagramDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Pie chart\r\n * @see {@link IFlowDiagramEvents} for a list of available Events\r\n * @see {@link IFlowDiagramAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar FlowDiagram = /** @class */ (function (_super) {\r\n __extends(FlowDiagram, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FlowDiagram() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * A Color Set to use when applying/generating colors for each subsequent\r\n * node.\r\n */\r\n _this.colors = new ColorSet();\r\n _this.className = \"FlowDiagram\";\r\n _this.nodePadding = 20;\r\n _this.sortBy = \"none\";\r\n _this.sequencedInterpolation = true;\r\n _this.colors.step = 2;\r\n _this.minNodeSize = 0.02;\r\n var linksContainer = _this.chartContainer.createChild(Container);\r\n linksContainer.shouldClone = false;\r\n linksContainer.layout = \"none\";\r\n linksContainer.isMeasured = false;\r\n _this.linksContainer = linksContainer;\r\n var nodesContainer = _this.chartContainer.createChild(Container);\r\n nodesContainer.shouldClone = false;\r\n nodesContainer.layout = \"none\";\r\n nodesContainer.isMeasured = false;\r\n _this.nodesContainer = nodesContainer;\r\n // this data item holds sums, averages, etc\r\n _this.dataItem = _this.createDataItem();\r\n _this.dataItem.component = _this;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n FlowDiagram.prototype.dispose = function () {\r\n _super.prototype.dispose.call(this);\r\n this.dataItem.dispose();\r\n };\r\n /**\r\n * (Re)validates chart's data, effectively causing the chart to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FlowDiagram.prototype.validateData = function () {\r\n var _this = this;\r\n if (this._parseDataFrom == 0) {\r\n this.nodes.clear();\r\n }\r\n this.sortNodes();\r\n this.colors.reset();\r\n _super.prototype.validateData.call(this);\r\n var sum = 0;\r\n var count = 0;\r\n var low;\r\n var high;\r\n // build blocks\r\n $iter.each(this.dataItems.iterator(), function (dataItem) {\r\n var fromName = dataItem.fromName;\r\n if (fromName) {\r\n var node = _this.nodes.getKey(fromName);\r\n if (!node) {\r\n node = _this.nodes.create(fromName);\r\n node.name = fromName;\r\n node.chart = _this;\r\n node.dataItem = dataItem;\r\n }\r\n dataItem.fromNode = node;\r\n dataItem.fromNode.outgoingDataItems.push(dataItem);\r\n }\r\n var toName = dataItem.toName;\r\n if (toName) {\r\n var node = _this.nodes.getKey(toName);\r\n if (!node) {\r\n node = _this.nodes.create(toName);\r\n node.name = toName;\r\n node.chart = _this;\r\n node.dataItem = dataItem;\r\n }\r\n dataItem.toNode = node;\r\n dataItem.toNode.incomingDataItems.push(dataItem);\r\n }\r\n if (!dataItem.fromNode) {\r\n var strokeModifier = new LinearGradientModifier();\r\n strokeModifier.opacities = [0, 1];\r\n dataItem.link.strokeModifier = strokeModifier;\r\n }\r\n if (!dataItem.toNode) {\r\n var fillModifier = new LinearGradientModifier();\r\n fillModifier.opacities = [1, 0];\r\n dataItem.link.strokeModifier = fillModifier;\r\n }\r\n var value = dataItem.value;\r\n if ($type.isNumber(value)) {\r\n sum += value;\r\n count++;\r\n if (low > value || !$type.isNumber(low)) {\r\n low = value;\r\n }\r\n if (high < value || !$type.isNumber(high)) {\r\n high = value;\r\n }\r\n }\r\n });\r\n var key = \"value\";\r\n this.dataItem.setCalculatedValue(key, high, \"high\");\r\n this.dataItem.setCalculatedValue(key, low, \"low\");\r\n this.dataItem.setCalculatedValue(key, sum, \"sum\");\r\n this.dataItem.setCalculatedValue(key, sum / count, \"average\");\r\n this.dataItem.setCalculatedValue(key, count, \"count\");\r\n $iter.each(this.nodes.iterator(), function (strNode) {\r\n var node = strNode[1];\r\n if (node.fill instanceof Color) {\r\n node.color = node.fill;\r\n }\r\n if (node.color == undefined) {\r\n node.color = _this.colors.next();\r\n }\r\n if (node.dataItem.color != undefined) {\r\n node.color = node.dataItem.color;\r\n }\r\n if (!node.dataItem.visible) {\r\n node.hide(0);\r\n }\r\n _this.getNodeValue(node);\r\n });\r\n this.sortNodes();\r\n this.feedLegend();\r\n };\r\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FlowDiagram.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {\r\n this.invalidate();\r\n };\r\n /**\r\n * Sorts nodes by either their values or names, based on `sortBy` setting.\r\n */\r\n FlowDiagram.prototype.sortNodes = function () {\r\n if (this.sortBy == \"name\") {\r\n this._sorted = this.nodes.sortedIterator();\r\n }\r\n else if (this.sortBy == \"value\") {\r\n this._sorted = $iter.sort(this.nodes.iterator(), function (x, y) { return $order.reverse($number.order(x[1].total, y[1].total)); });\r\n }\r\n else {\r\n this._sorted = this.nodes.iterator();\r\n }\r\n };\r\n /**\r\n * Updates a cummulative value of the node.\r\n *\r\n * A node's value is determined by summing values of all of the incoming\r\n * links or all of the outgoing links, whichever results in bigger number.\r\n *\r\n * @param node Node value\r\n */\r\n FlowDiagram.prototype.getNodeValue = function (node) {\r\n // todo: totalIncomming totalOutgoing, total\r\n var incomingTotal = 0;\r\n var outgoingTotal = 0;\r\n $iter.each(node.incomingDataItems.iterator(), function (dataItem) {\r\n var value = dataItem.getWorkingValue(\"value\");\r\n if ($type.isNumber(value)) {\r\n incomingTotal += value;\r\n }\r\n });\r\n $iter.each(node.outgoingDataItems.iterator(), function (dataItem) {\r\n var value = dataItem.getWorkingValue(\"value\");\r\n if ($type.isNumber(value)) {\r\n outgoingTotal += value;\r\n }\r\n });\r\n node.total = incomingTotal + outgoingTotal;\r\n node.totalIncoming = incomingTotal;\r\n node.totalOutgoing = outgoingTotal;\r\n };\r\n ;\r\n /**\r\n * Changes the sort type of the nodes.\r\n *\r\n * This will actually reshuffle nodes using nice animation.\r\n */\r\n FlowDiagram.prototype.changeSorting = function () {\r\n this.sortNodes();\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n FlowDiagram.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Flow diagram\");\r\n }\r\n };\r\n /**\r\n * Creates and returns a new data item.\r\n *\r\n * @return Data item\r\n */\r\n FlowDiagram.prototype.createDataItem = function () {\r\n return new FlowDiagramDataItem();\r\n };\r\n Object.defineProperty(FlowDiagram.prototype, \"nodePadding\", {\r\n /**\r\n * @return Padding (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"nodePadding\");\r\n },\r\n /**\r\n * Padding for node square in pixels.\r\n *\r\n * Padding will add extra space around node's name label.\r\n *\r\n * @param value Padding (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"nodePadding\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagram.prototype, \"sortBy\", {\r\n /**\r\n * @returns Node sorting\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"sortBy\");\r\n },\r\n /**\r\n * Sort nodes by \"name\" or \"value\" or do not sort at all. If not sorted, nodes will appear in the same order as they are in the data.\r\n * @default \"none\"\r\n * @param value Node sorting\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"sortBy\", value);\r\n this.changeSorting();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagram.prototype, \"minNodeSize\", {\r\n /**\r\n * @returns min node size\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"minNodeSize\");\r\n },\r\n /**\r\n * Sometimes nodes can get very small if their value is little. With this setting you\r\n * can set min size of a node (this is relative value from the total size of all nodes)\r\n * @default 0.02\r\n * @param value Node sorting\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"minNodeSize\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FlowDiagram.prototype, \"nodes\", {\r\n /**\r\n * A list of chart's nodes.\r\n *\r\n * @param {DictionaryTemplate}\r\n */\r\n get: function () {\r\n if (!this._nodes) {\r\n var template = this.createNode();\r\n template.events.on(\"hit\", function (event) {\r\n event.target.handleHit(event);\r\n });\r\n this._nodes = new DictionaryTemplate(template);\r\n this._disposers.push(new DictionaryDisposer(this._nodes));\r\n }\r\n return this._nodes;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n FlowDiagram.prototype.createNode = function () {\r\n var node = new FlowDiagramNode();\r\n this._disposers.push(node);\r\n return node;\r\n };\r\n Object.defineProperty(FlowDiagram.prototype, \"links\", {\r\n /**\r\n * A list of chart's links.\r\n *\r\n * @param {ListTemplate}\r\n */\r\n get: function () {\r\n if (!this._links) {\r\n this._links = new ListTemplate(this.createLink());\r\n this._disposers.push(new ListDisposer(this._links));\r\n }\r\n return this._links;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n FlowDiagram.prototype.createLink = function () {\r\n var link = new FlowDiagramLink();\r\n this._disposers.push(link);\r\n return link;\r\n };\r\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\r\n FlowDiagram.prototype.feedLegend = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n var legendData_1 = [];\r\n this.nodes.each(function (key, node) {\r\n legendData_1.push(node);\r\n });\r\n legend.data = legendData_1;\r\n legend.dataFields.name = \"name\";\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n FlowDiagram.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this.nodes.clear();\r\n };\r\n return FlowDiagram;\r\n}(Chart));\r\nexport { FlowDiagram };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FlowDiagram\"] = FlowDiagram;\r\n//# sourceMappingURL=FlowDiagram.js.map","/**\r\n * Bullet module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet } from \"./Bullet\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar LabelBullet = /** @class */ (function (_super) {\r\n __extends(LabelBullet, _super);\r\n /**\r\n * Constructor\r\n */\r\n function LabelBullet() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"LabelBullet\";\r\n var label = _this.createChild(Label);\r\n label.shouldClone = false;\r\n label.verticalCenter = \"middle\";\r\n label.horizontalCenter = \"middle\";\r\n label.truncate = true;\r\n label.hideOversized = false;\r\n label.maxWidth = 500;\r\n label.maxHeight = 500;\r\n label.stroke = color();\r\n label.strokeOpacity = 0;\r\n label.fill = new InterfaceColorSet().getFor(\"text\");\r\n _this.events.on(\"maxsizechanged\", _this.handleMaxSize, _this, false);\r\n _this.label = label;\r\n // not good, as lineSeries will have labels somewhere in the middle.\r\n //this.locationX = 0.5;\r\n //this.locationY = 0.5;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n LabelBullet.prototype.handleMaxSize = function () {\r\n this.label.maxWidth = this.maxWidth;\r\n this.label.maxHeight = this.maxHeight;\r\n };\r\n /**\r\n * Copies all proprities and related stuff from another instance of\r\n * [[LabelBullet]].\r\n *\r\n * @param source Source element\r\n */\r\n LabelBullet.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.label.copyFrom(source.label);\r\n };\r\n return LabelBullet;\r\n}(Bullet));\r\nexport { LabelBullet };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LabelBullet\"] = LabelBullet;\r\n//# sourceMappingURL=LabelBullet.js.map","/**\r\n * SankeyNode module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagramNode } from \"./FlowDiagramNode\";\r\nimport { LabelBullet } from \"./LabelBullet\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a node in a Sankey Diagram.\r\n *\r\n * A Sankey node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[SankeyLink]] elements.\r\n *\r\n * @see {@link ISankeyNodeEvents} for a list of available events\r\n * @see {@link ISankeyNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar SankeyNode = /** @class */ (function (_super) {\r\n __extends(SankeyNode, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SankeyNode() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * [nextInCoord description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n _this.nextInCoord = 0;\r\n /**\r\n * [nextOutCoord description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n _this.nextOutCoord = 0;\r\n _this.className = \"SankeyNode\";\r\n _this.width = 10;\r\n _this.height = 10;\r\n var nameLabel = _this.createChild(LabelBullet);\r\n nameLabel.shouldClone = false;\r\n //@should we auto update these locations if position is changed?\r\n nameLabel.locationX = 1;\r\n nameLabel.locationY = 0.5;\r\n nameLabel.label.text = \"{name}\";\r\n //nameLabel.label.textElement.hideOversized = false;\r\n nameLabel.width = 150;\r\n nameLabel.height = 150;\r\n nameLabel.label.horizontalCenter = \"left\";\r\n nameLabel.label.padding(0, 5, 0, 5);\r\n _this.nameLabel = nameLabel;\r\n var valueLabel = _this.createChild(LabelBullet);\r\n valueLabel.shouldClone = false;\r\n valueLabel.label.hideOversized = false;\r\n valueLabel.locationX = 0.5;\r\n valueLabel.locationY = 0.5;\r\n valueLabel.width = 150;\r\n valueLabel.height = 150;\r\n //valueLabel.label.text = \"{value}\";\r\n valueLabel.label.horizontalCenter = \"middle\";\r\n _this.valueLabel = valueLabel;\r\n var hiddenState = _this.hiddenState;\r\n hiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n hiddenState.properties.opacity = 0.5;\r\n hiddenState.properties.visible = true;\r\n _this.background.hiddenState.copyFrom(hiddenState);\r\n return _this;\r\n }\r\n /**\r\n * Invalidates all links, attached to this node.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SankeyNode.prototype.invalidateLinks = function () {\r\n var _this = this;\r\n _super.prototype.invalidateLinks.call(this);\r\n this.nextInCoord = 0;\r\n this.nextOutCoord = 0;\r\n var chart = this.chart;\r\n if (chart) {\r\n var orientation_1 = chart.orientation;\r\n if (this._incomingSorted) {\r\n $iter.each(this._incomingSorted, function (dataItem) {\r\n var link = dataItem.link;\r\n var value = dataItem.getWorkingValue(\"value\");\r\n if ($type.isNumber(value)) {\r\n link.parent = _this.chart.linksContainer;\r\n var x = void 0;\r\n var y = void 0;\r\n var angle = void 0;\r\n if (orientation_1 == \"horizontal\") {\r\n x = _this.pixelX + _this.dx;\r\n y = _this.nextInCoord + _this.pixelY + _this.dy;\r\n angle = 0;\r\n }\r\n else {\r\n y = _this.pixelY + _this.dy;\r\n x = _this.nextInCoord + _this.pixelX + _this.dx;\r\n angle = 90;\r\n }\r\n link.endX = x;\r\n link.endY = y;\r\n link.startAngle = angle;\r\n link.endAngle = angle;\r\n link.gradient.rotation = angle;\r\n link.linkWidth = value * chart.valueHeight;\r\n if (!dataItem.fromNode) {\r\n if (orientation_1 == \"horizontal\") {\r\n link.maxWidth = 200;\r\n link.startX = _this.pixelX + _this.dx - link.maxWidth;\r\n link.startY = link.endY;\r\n }\r\n else {\r\n link.maxHeight = 200;\r\n link.startX = link.endX;\r\n link.startY = _this.pixelY + _this.dy - link.maxHeight;\r\n }\r\n // TODO is this needed ?\r\n $utils.used(link.gradient);\r\n link.fill = dataItem.toNode.color;\r\n var stop_1 = link.gradient.stops.getIndex(0);\r\n if (stop_1) {\r\n if (link.colorMode == \"gradient\") {\r\n stop_1.color = _this.color;\r\n }\r\n stop_1.opacity = 0;\r\n link.fill = link.gradient;\r\n link.stroke = link.gradient;\r\n link.gradient.validate();\r\n }\r\n }\r\n //link.validate();\r\n _this.nextInCoord += link.linkWidth;\r\n }\r\n });\r\n }\r\n if (this._outgoingSorted) {\r\n $iter.each(this._outgoingSorted, function (dataItem) {\r\n var link = dataItem.link;\r\n link.parent = _this.chart.linksContainer;\r\n var value = dataItem.getWorkingValue(\"value\");\r\n if ($type.isNumber(value)) {\r\n var x = void 0;\r\n var y = void 0;\r\n var angle = void 0;\r\n if (orientation_1 == \"horizontal\") {\r\n angle = 0;\r\n x = _this.pixelX + _this.pixelWidth + _this.dx - 1;\r\n y = _this.nextOutCoord + _this.pixelY + _this.dy;\r\n }\r\n else {\r\n angle = 90;\r\n x = _this.nextOutCoord + _this.pixelX + _this.dx;\r\n y = _this.pixelY + _this.pixelHeight + _this.dy - 1;\r\n }\r\n link.startX = x;\r\n link.startY = y;\r\n link.startAngle = angle;\r\n link.endAngle = angle;\r\n link.gradient.rotation = angle;\r\n link.linkWidth = value * _this.chart.valueHeight;\r\n if (!dataItem.toNode) {\r\n if (orientation_1 == \"horizontal\") {\r\n link.maxWidth = 200;\r\n link.endX = _this.pixelX + link.maxWidth + _this.dx;\r\n link.endY = link.startY;\r\n }\r\n else {\r\n link.maxHeight = 200;\r\n link.endX = link.startX;\r\n link.endY = _this.pixelY + link.maxHeight + _this.dy;\r\n }\r\n link.opacity = _this.opacity;\r\n var stop_2 = link.gradient.stops.getIndex(1);\r\n if (stop_2) {\r\n if (link.colorMode == \"gradient\") {\r\n stop_2.color = _this.color;\r\n }\r\n stop_2.opacity = 0;\r\n link.fill = link.gradient;\r\n link.stroke = link.gradient;\r\n link.gradient.validate();\r\n }\r\n }\r\n //link.validate();\r\n _this.nextOutCoord += link.linkWidth;\r\n }\r\n });\r\n }\r\n }\r\n this.positionBullet(this.nameLabel);\r\n this.positionBullet(this.valueLabel);\r\n };\r\n /**\r\n * Positions the bullet so it is centered within the node element.\r\n *\r\n * @param bullet Target bullet\r\n */\r\n SankeyNode.prototype.positionBullet = function (bullet) {\r\n if (bullet) {\r\n bullet.x = this.measuredWidth * bullet.locationX;\r\n bullet.y = this.measuredHeight * bullet.locationY;\r\n }\r\n };\r\n Object.defineProperty(SankeyNode.prototype, \"level\", {\r\n /**\r\n * @return Level\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"level\");\r\n },\r\n /**\r\n * A level node is displayed at. (0 - ...)\r\n *\r\n * Levels are measured from left to right.\r\n *\r\n * The nodes in the left-most column will have `level = 0`.\r\n *\r\n * Nodes in second column - `level = 1`, etc.\r\n *\r\n * @param value Level\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"level\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies properties and labels from another [[SankeyNode]].\r\n *\r\n * @param source Source node\r\n */\r\n SankeyNode.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.nameLabel.copyFrom(source.nameLabel);\r\n this.valueLabel.copyFrom(source.valueLabel);\r\n };\r\n return SankeyNode;\r\n}(FlowDiagramNode));\r\nexport { SankeyNode };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SankeyNode\"] = SankeyNode;\r\n//# sourceMappingURL=SankeyNode.js.map","/**\r\n * SankeyLink module\r\n */\r\nimport { __extends, __read } from \"tslib\";\r\nimport { FlowDiagramLink } from \"./FlowDiagramLink\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Polyspline } from \"../../core/elements/Polyspline\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Sankey Diagram.\r\n *\r\n * @see {@link ISankeyLinkEvents} for a list of available events\r\n * @see {@link ISankeyLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nvar SankeyLink = /** @class */ (function (_super) {\r\n __extends(SankeyLink, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SankeyLink() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"SankeyLink\";\r\n // TODO can this be removed ?\r\n new InterfaceColorSet();\r\n _this.tension = 0.8;\r\n _this.controlPointDistance = 0.2;\r\n _this.startAngle = 0;\r\n _this.endAngle = 0;\r\n _this.linkWidth = 0;\r\n _this.startX = 0;\r\n _this.endX = 0;\r\n _this.startY = 0;\r\n _this.endY = 0;\r\n _this.middleLine = _this.createChild(Polyspline);\r\n _this.middleLine.shouldClone = false;\r\n _this.middleLine.strokeOpacity = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n SankeyLink.prototype.makeBackwards = function () {\r\n if (this.states.getKey(\"backwards\") != undefined) {\r\n this.setState(\"backwards\");\r\n }\r\n };\r\n /**\r\n * (Re)validates (redraws) the link.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SankeyLink.prototype.validate = function () {\r\n var _a, _b, _c, _d;\r\n _super.prototype.validate.call(this);\r\n if (!this.isTemplate) {\r\n var x0 = this.startX;\r\n var y0 = this.startY;\r\n var x1 = this.endX;\r\n var y1 = this.endY;\r\n if (this.states.getKey(\"backwards\")) {\r\n this.setState(\"default\");\r\n }\r\n if (this.dataItem) {\r\n var chart = this.dataItem.component;\r\n if (chart) {\r\n if (chart.orientation == \"horizontal\") {\r\n if (x1 < x0) {\r\n _a = __read([x1, x0], 2), x0 = _a[0], x1 = _a[1];\r\n _b = __read([y1, y0], 2), y0 = _b[0], y1 = _b[1];\r\n this.makeBackwards();\r\n }\r\n }\r\n else {\r\n if (y1 < y0) {\r\n _c = __read([y1, y0], 2), y0 = _c[0], y1 = _c[1];\r\n _d = __read([x1, x0], 2), x0 = _d[0], x1 = _d[1];\r\n this.makeBackwards();\r\n }\r\n }\r\n }\r\n }\r\n if (!$type.isNumber(x1)) {\r\n x1 = x0;\r\n }\r\n if (!$type.isNumber(y1)) {\r\n y1 = y0;\r\n }\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var w = this.linkWidth;\r\n var path = \"\";\r\n var xt0 = x0;\r\n var yt0 = y0;\r\n var xt1 = x1;\r\n var yt1 = y1;\r\n var xb0 = x0 + w * $math.sin(startAngle);\r\n var xb1 = x1 + w * $math.sin(endAngle);\r\n var yb0 = y0 + w * $math.cos(startAngle);\r\n var yb1 = y1 + w * $math.cos(endAngle);\r\n var xm0 = x0 + w / 2 * $math.sin(startAngle);\r\n var xm1 = x1 + w / 2 * $math.sin(endAngle);\r\n var ym0 = y0 + w / 2 * $math.cos(startAngle);\r\n var ym1 = y1 + w / 2 * $math.cos(endAngle);\r\n this.zIndex = this.zIndex || this.dataItem.index;\r\n var tensionX = this.tension + (1 - this.tension) * $math.sin(startAngle);\r\n var tensionY = this.tension + (1 - this.tension) * $math.cos(startAngle);\r\n this.middleLine.tensionX = tensionX;\r\n this.middleLine.tensionY = tensionY;\r\n if ($type.isNumber(w) && ($type.isNumber(x0) && $type.isNumber(x1) && $type.isNumber(y0) && $type.isNumber(y1))) {\r\n // solves issues with gradient fill of straight lines\r\n if ($math.round(xt0, 3) == $math.round(xt1, 3)) {\r\n xt1 += 0.01;\r\n }\r\n if ($math.round(yt0, 3) == $math.round(yt1, 3)) {\r\n yt1 += 0.01;\r\n }\r\n if ($math.round(xb0, 3) == $math.round(xb1, 3)) {\r\n xb1 += 0.01;\r\n }\r\n if ($math.round(yb0, 3) == $math.round(yb1, 3)) {\r\n yb1 += 0.01;\r\n }\r\n var minX = Math.min(xb0, xb1, xt0, xt1);\r\n var minY = Math.min(yb0, yb1, yt0, yt1);\r\n var maxX = Math.max(xb0, xb1, xt0, xt1);\r\n var maxY = Math.max(yb0, yb1, yt0, yt1);\r\n this._bbox = {\r\n x: minX,\r\n y: minY,\r\n width: maxX - minX,\r\n height: maxY - minY\r\n };\r\n var cpd = this.controlPointDistance;\r\n var kxt0 = xt0 + (xt1 - xt0) * cpd * $math.cos(startAngle);\r\n var kyt0 = yt0 + (yt1 - yt0) * cpd * $math.sin(startAngle);\r\n var kxt1 = xt1 - (xt1 - xt0) * cpd * $math.cos(endAngle);\r\n var kyt1 = yt1 - (yt1 - yt0) * cpd * $math.sin(endAngle);\r\n var kxm0 = xm0 + (xm1 - xm0) * cpd * $math.cos(startAngle);\r\n var kym0 = ym0 + (ym1 - ym0) * cpd * $math.sin(startAngle);\r\n var kxm1 = xm1 - (xm1 - xm0) * cpd * $math.cos(endAngle);\r\n var kym1 = ym1 - (ym1 - ym0) * cpd * $math.sin(endAngle);\r\n var angle = $math.getAngle({ x: kxt0, y: kyt0 }, { x: kxt1, y: kyt1 });\r\n var dx = (w / $math.cos(angle) - w) / $math.tan(angle) * $math.cos(startAngle);\r\n var dy = (w / $math.sin(angle) - w) * $math.tan(angle) * $math.sin(startAngle);\r\n var kxb0 = -dx / 2 + xb0 + (xb1 - xb0) * cpd * $math.cos(startAngle);\r\n var kyb0 = -dy / 2 + yb0 + (yb1 - yb0) * cpd * $math.sin(startAngle);\r\n var kxb1 = -dx / 2 + xb1 - (xb1 - xb0) * cpd * $math.cos(endAngle);\r\n var kyb1 = -dy / 2 + yb1 - (yb1 - yb0) * cpd * $math.sin(endAngle);\r\n this.middleLine.segments = [[{ x: xm0, y: ym0 }, { x: kxm0, y: kym0 }, { x: kxm1, y: kym1 }, { x: xm1, y: ym1 }]];\r\n kxt0 += dx / 2;\r\n kyt0 += dy / 2;\r\n kxt1 += dx / 2;\r\n kyt1 += dy / 2;\r\n path += $path.moveTo({ x: xt0, y: yt0 });\r\n path += new $smoothing.Tension(tensionX, tensionY).smooth([{ x: xt0, y: yt0 }, { x: kxt0, y: kyt0 }, { x: kxt1, y: kyt1 }, { x: xt1, y: yt1 }]);\r\n path += $path.lineTo({ x: xb1, y: yb1 });\r\n path += new $smoothing.Tension(tensionX, tensionY).smooth([{ x: xb1, y: yb1 }, { x: kxb1, y: kyb1 }, { x: kxb0, y: kyb0 }, { x: xb0, y: yb0 }]);\r\n path += $path.closePath();\r\n }\r\n this.link.path = path;\r\n if (this.maskBullets) {\r\n this.bulletsMask.path = path;\r\n this.bulletsContainer.mask = this.bulletsMask;\r\n }\r\n this.positionBullets();\r\n }\r\n };\r\n Object.defineProperty(SankeyLink.prototype, \"startX\", {\r\n /**\r\n * @return Start X\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startX\");\r\n },\r\n /**\r\n * [startX description]\r\n *\r\n * @todo Description\r\n * @param value Start X\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startX\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SankeyLink.prototype, \"endX\", {\r\n /**\r\n * @return End X\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endX\");\r\n },\r\n /**\r\n * [endX description]\r\n *\r\n * @todo Description\r\n * @param value End X\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endX\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SankeyLink.prototype, \"startY\", {\r\n /**\r\n * @return Start Y\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startY\");\r\n },\r\n /**\r\n * [startY description]\r\n *\r\n * @todo Description\r\n * @param value Start Y\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startY\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SankeyLink.prototype, \"endY\", {\r\n /**\r\n * @return End Y\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endY\");\r\n },\r\n /**\r\n * [endY description]\r\n *\r\n * @todo Description\r\n * @param value End Y\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endY\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SankeyLink.prototype, \"linkWidth\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"linkWidth\");\r\n },\r\n /**\r\n * [linkWidth description]\r\n *\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"linkWidth\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SankeyLink.prototype, \"controlPointDistance\", {\r\n /**\r\n * @return relative control point distance\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"controlPointDistance\");\r\n },\r\n /**\r\n * Distance of control point of a link, defines relative distance from a node at which linke should bend\r\n * @default 0.2\r\n * @param value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"controlPointDistance\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SankeyLink.prototype, \"tension\", {\r\n /**\r\n * @return tension value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tension\");\r\n },\r\n /**\r\n * Tension of a spline, 1 would make the link to have sharp edges\r\n * @default 0.8\r\n * @param value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tension\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return SankeyLink;\r\n}(FlowDiagramLink));\r\nexport { SankeyLink };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SankeyLink\"] = SankeyLink;\r\n//# sourceMappingURL=SankeyLink.js.map","/**\r\n * Sankey diagram module.\r\n */\r\nimport { __extends, __read, __spread } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagram, FlowDiagramDataItem } from \"./FlowDiagram\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { SankeyNode } from \"../elements/SankeyNode\";\r\nimport { SankeyLink } from \"../elements/SankeyLink\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo rearange notes after dragged\r\n/**\r\n * Defines a [[DataItem]] for [[SankeyDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar SankeyDiagramDataItem = /** @class */ (function (_super) {\r\n __extends(SankeyDiagramDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SankeyDiagramDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"SankeyDiagramDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return SankeyDiagramDataItem;\r\n}(FlowDiagramDataItem));\r\nexport { SankeyDiagramDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Creates a Sankey Diagram chart.\r\n *\r\n * @see {@link ISankeyDiagramEvents} for a list of available Events\r\n * @see {@link ISankeyDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sankey-diagram/} for documentation\r\n * @important\r\n */\r\nvar SankeyDiagram = /** @class */ (function (_super) {\r\n __extends(SankeyDiagram, _super);\r\n /**\r\n * Constructor\r\n */\r\n function SankeyDiagram() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"SankeyDiagram\";\r\n _this.orientation = \"horizontal\";\r\n _this.nodeAlign = \"middle\";\r\n _this.nodesContainer.width = percent(100);\r\n _this.nodesContainer.height = percent(100);\r\n _this.linksContainer.width = percent(100);\r\n _this.linksContainer.height = percent(100);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates chart's data, effectively causing the chart to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SankeyDiagram.prototype.validateData = function () {\r\n var _this = this;\r\n this._valueHeight = undefined;\r\n _super.prototype.validateData.call(this);\r\n this._levelCount = 0;\r\n this.nodes.each(function (key, node) {\r\n node.level = undefined;\r\n });\r\n this.nodes.each(function (key, node) {\r\n node.level = _this.getNodeLevel(node, 0);\r\n _this._levelCount = $math.max(_this._levelCount, node.level);\r\n });\r\n };\r\n /**\r\n * Returns node's highest level.\r\n *\r\n * @param node Node\r\n * @param level Current level\r\n * @return New level\r\n */\r\n SankeyDiagram.prototype.getNodeLevel = function (node, level) {\r\n var _this = this;\r\n var levels = [level];\r\n $iter.each(node.incomingDataItems.iterator(), function (link) {\r\n if (link.fromNode) {\r\n if ($type.isNumber(link.fromNode.level)) {\r\n levels.push(link.fromNode.level + 1);\r\n }\r\n else {\r\n _this._counter = 0;\r\n _this.checkLoop(link.fromNode);\r\n if (_this._counter < _this.dataItems.length) {\r\n levels.push(_this.getNodeLevel(link.fromNode, level + 1));\r\n }\r\n }\r\n }\r\n });\r\n return Math.max.apply(Math, __spread(levels));\r\n };\r\n /**\r\n * Checks if there's no loop in the ancestor chain.\r\n *\r\n * @param node Node\r\n */\r\n SankeyDiagram.prototype.checkLoop = function (node) {\r\n var _this = this;\r\n this._counter++;\r\n if (this._counter > this.dataItems.length) {\r\n return;\r\n }\r\n $iter.each(node.incomingDataItems.iterator(), function (link) {\r\n _this.checkLoop(link.fromNode);\r\n });\r\n };\r\n /**\r\n * Calculates relation between pixel height and total value.\r\n *\r\n * In Sankey the actual thickness of links and height of nodes will depend\r\n * on their values.\r\n */\r\n SankeyDiagram.prototype.calculateValueHeight = function () {\r\n var _this = this;\r\n // calculate sums of each level\r\n this._levelSum = {};\r\n this._levelNodesCount = {};\r\n this.maxSum = 0;\r\n var total = this.dataItem.values.value.sum;\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n _this.getNodeValue(node);\r\n });\r\n this.nodes.each(function (key, node) {\r\n var level = node.level;\r\n var value = Math.max(node.totalIncoming, node.totalOutgoing);\r\n if (value / total < _this.minNodeSize) {\r\n value = total * _this.minNodeSize;\r\n }\r\n if ($type.isNumber(_this._levelSum[level])) {\r\n _this._levelSum[level] += value;\r\n }\r\n else {\r\n _this._levelSum[level] = value;\r\n }\r\n if ($type.isNumber(_this._levelNodesCount[level])) {\r\n _this._levelNodesCount[level]++;\r\n }\r\n else {\r\n _this._levelNodesCount[level] = 1;\r\n }\r\n });\r\n var availableHeight;\r\n if (this.orientation == \"horizontal\") {\r\n availableHeight = this.chartContainer.maxHeight - 1;\r\n }\r\n else {\r\n availableHeight = this.chartContainer.maxWidth - 1;\r\n }\r\n var maxSumLevel;\r\n var minHeight;\r\n $object.each(this._levelSum, function (key, value) {\r\n var realValue = value;\r\n var levelNodeCount = _this._levelNodesCount[key];\r\n var valueHeight = (availableHeight - (levelNodeCount - 1) * _this.nodePadding) / realValue;\r\n if (valueHeight == Infinity) {\r\n valueHeight = 0;\r\n }\r\n if (minHeight > valueHeight || !$type.isNumber(minHeight)) {\r\n minHeight = valueHeight;\r\n _this.maxSum = realValue;\r\n maxSumLevel = $type.toNumber(key);\r\n }\r\n });\r\n this._maxSumLevel = maxSumLevel;\r\n var maxSumLevelNodeCount = this._levelNodesCount[this._maxSumLevel];\r\n var valueHeight = (availableHeight - (maxSumLevelNodeCount - 1) * this.nodePadding) / this.maxSum;\r\n if (valueHeight == Infinity) {\r\n valueHeight = 0;\r\n }\r\n if (!$type.isNumber(this.valueHeight)) {\r\n this.valueHeight = valueHeight;\r\n }\r\n else {\r\n var finalHeight = void 0;\r\n try {\r\n finalHeight = this._heightAnimation.animationOptions[0].to;\r\n }\r\n catch (err) {\r\n }\r\n // without animations it will be non-smooth as maxValue jumps from one column to another\r\n if (finalHeight != valueHeight) {\r\n var duration = this.interpolationDuration;\r\n try {\r\n duration = this.nodes.template.states.getKey(\"active\").transitionDuration;\r\n }\r\n catch (err) {\r\n }\r\n this._heightAnimation = new Animation(this, { property: \"valueHeight\", from: this.valueHeight, to: valueHeight }, duration, this.interpolationEasing).start();\r\n this._disposers.push(this._heightAnimation);\r\n }\r\n }\r\n };\r\n /**\r\n * Redraws the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n SankeyDiagram.prototype.validate = function () {\r\n var _this = this;\r\n _super.prototype.validate.call(this);\r\n this.calculateValueHeight();\r\n var container = this.nodesContainer;\r\n var nextCoordinate = {};\r\n var maxSumLevelNodeCount = this._levelNodesCount[this._maxSumLevel];\r\n var total = this.dataItem.values.value.sum;\r\n var availableHeight;\r\n if (this.orientation == \"horizontal\") {\r\n availableHeight = this.chartContainer.maxHeight - 1;\r\n }\r\n else {\r\n availableHeight = this.chartContainer.maxWidth - 1;\r\n }\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n var level = node.level;\r\n var levelCoordinate = 0;\r\n var nodeCount = _this._levelNodesCount[level];\r\n switch (_this.nodeAlign) {\r\n case \"bottom\":\r\n levelCoordinate = (_this.maxSum - _this._levelSum[level]) * _this.valueHeight - (nodeCount - maxSumLevelNodeCount) * _this.nodePadding;\r\n break;\r\n case \"middle\":\r\n levelCoordinate = (_this.maxSum - _this._levelSum[level]) * _this.valueHeight / 2 - (nodeCount - maxSumLevelNodeCount) * _this.nodePadding / 2;\r\n break;\r\n }\r\n if (_this.maxSum == 0) {\r\n switch (_this.nodeAlign) {\r\n case \"bottom\":\r\n levelCoordinate = availableHeight - nodeCount * (_this.minNodeSize * availableHeight + _this.nodePadding);\r\n break;\r\n case \"middle\":\r\n levelCoordinate = availableHeight / 2 - nodeCount / 2 * (_this.minNodeSize * availableHeight + _this.nodePadding);\r\n break;\r\n }\r\n }\r\n node.parent = container;\r\n var delta;\r\n var x;\r\n var y;\r\n var value = Math.max(node.totalIncoming, node.totalOutgoing);\r\n if (value / total < _this.minNodeSize) {\r\n value = total * _this.minNodeSize;\r\n }\r\n if (_this.orientation == \"horizontal\") {\r\n delta = (_this.innerWidth - node.pixelWidth) / _this._levelCount;\r\n x = delta * node.level;\r\n y = nextCoordinate[level] || levelCoordinate;\r\n var h = value * _this.valueHeight;\r\n if (total == 0 && h == 0) {\r\n h = _this.minNodeSize * availableHeight;\r\n }\r\n node.height = h;\r\n node.minX = x;\r\n node.maxX = x;\r\n nextCoordinate[level] = y + h + _this.nodePadding;\r\n }\r\n else {\r\n delta = (_this.innerHeight - node.pixelHeight) / _this._levelCount;\r\n x = nextCoordinate[level] || levelCoordinate;\r\n y = delta * node.level;\r\n var w = value * _this.valueHeight;\r\n if (total == 0 && w == 0) {\r\n w = _this.minNodeSize * availableHeight;\r\n }\r\n node.width = w;\r\n node.minY = y;\r\n node.maxY = y;\r\n nextCoordinate[level] = x + w + _this.nodePadding;\r\n }\r\n node.x = x;\r\n node.y = y;\r\n });\r\n };\r\n /**\r\n * Performs actual operations to reveal this element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param duration Fade in duration (ms)\r\n * @return Fade in duration (ms)\r\n */\r\n SankeyDiagram.prototype.showReal = function (duration) {\r\n var _this = this;\r\n if (this.preventShow) {\r\n return;\r\n }\r\n if (this.interpolationDuration > 0) {\r\n var container_1 = this.nodesContainer;\r\n var i_1 = 0;\r\n $iter.each(this.links.iterator(), function (link) {\r\n link.hide(0);\r\n });\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n var property;\r\n if (_this.orientation == \"horizontal\") {\r\n node.dx = -(container_1.pixelWidth - node.pixelWidth) / Math.max(_this._levelCount, 1);\r\n property = \"dx\";\r\n }\r\n else {\r\n node.dy = -(container_1.pixelHeight - node.pixelHeight) / Math.max(_this._levelCount, 1);\r\n property = \"dy\";\r\n }\r\n var delay = 0;\r\n var duration = _this.interpolationDuration;\r\n if (_this.sequencedInterpolation) {\r\n delay = _this.sequencedInterpolationDelay * i_1 + duration * i_1 / $iter.length(_this.nodes.iterator());\r\n }\r\n node.opacity = 0;\r\n node.invalidateLinks();\r\n node.animate([{ property: \"opacity\", from: 0, to: 1 }, { property: property, to: 0 }], _this.interpolationDuration, _this.interpolationEasing).delay(delay);\r\n $iter.each(node.outgoingDataItems.iterator(), function (dataItem) {\r\n var animation = dataItem.link.show(_this.interpolationDuration);\r\n if (animation && !animation.isFinished()) {\r\n animation.delay(delay);\r\n }\r\n });\r\n $iter.each(node.incomingDataItems.iterator(), function (dataItem) {\r\n if (!dataItem.fromNode) {\r\n var animation = dataItem.link.show(_this.interpolationDuration);\r\n if (animation && !animation.isFinished()) {\r\n animation.delay(delay);\r\n }\r\n }\r\n });\r\n i_1++;\r\n });\r\n }\r\n return _super.prototype.showReal.call(this);\r\n };\r\n /**\r\n * Changes the sort type of the nodes.\r\n *\r\n * This will actually reshuffle nodes using nice animation.\r\n */\r\n SankeyDiagram.prototype.changeSorting = function () {\r\n var _this = this;\r\n this.sortNodes();\r\n var nextCoordinate = {};\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n var level = node.level;\r\n var levelCoordinate = (_this.maxSum - _this._levelSum[level]) * _this.valueHeight / 2;\r\n var property;\r\n var nodeHeight;\r\n if (_this.orientation == \"horizontal\") {\r\n property = \"y\";\r\n nodeHeight = node.pixelHeight;\r\n }\r\n else {\r\n property = \"x\";\r\n nodeHeight = node.pixelWidth;\r\n }\r\n node.animate({ property: property, to: nextCoordinate[level] || levelCoordinate }, _this.interpolationDuration, _this.interpolationEasing);\r\n nextCoordinate[level] = (nextCoordinate[level] || levelCoordinate) + nodeHeight + _this.nodePadding;\r\n node.invalidateLinks();\r\n });\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n SankeyDiagram.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Sankey diagram\");\r\n }\r\n };\r\n /**\r\n * Creates and returns a new data item.\r\n *\r\n * @return Data item\r\n */\r\n SankeyDiagram.prototype.createDataItem = function () {\r\n return new SankeyDiagramDataItem();\r\n };\r\n Object.defineProperty(SankeyDiagram.prototype, \"nodeAlign\", {\r\n /**\r\n * @returns Returns nodeAlign value\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"nodeAlign\");\r\n },\r\n /**\r\n * How to align nodes. In case layout is vertical, top means left and bottom means right\r\n *\r\n * @param value Node sorting\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"nodeAlign\", value);\r\n this.changeSorting();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(SankeyDiagram.prototype, \"orientation\", {\r\n /**\r\n * @return Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"orientation\");\r\n },\r\n /**\r\n * Orientation of the chart: \"horizontal\" or \"vertical\";\r\n *\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"orientation\", value, true);\r\n var nameLabel = this.nodes.template.nameLabel;\r\n if (value == \"vertical\") {\r\n this.nodes.template.width = undefined;\r\n nameLabel.label.horizontalCenter = \"middle\";\r\n nameLabel.locationX = 0.5;\r\n }\r\n else {\r\n this.nodes.template.height = undefined;\r\n nameLabel.label.horizontalCenter = \"left\";\r\n nameLabel.locationX = 1;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n SankeyDiagram.prototype.createNode = function () {\r\n var node = new SankeyNode();\r\n this._disposers.push(node);\r\n return node;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n SankeyDiagram.prototype.createLink = function () {\r\n var link = new SankeyLink();\r\n this._disposers.push(link);\r\n return link;\r\n };\r\n Object.defineProperty(SankeyDiagram.prototype, \"valueHeight\", {\r\n /**\r\n * @ignore\r\n */\r\n get: function () {\r\n return this._valueHeight;\r\n },\r\n /**\r\n * @ignore\r\n */\r\n set: function (value) {\r\n if (value != this._valueHeight) {\r\n this._valueHeight = value;\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n SankeyDiagram.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this._sorted = this.nodes.iterator();\r\n };\r\n return SankeyDiagram;\r\n}(FlowDiagram));\r\nexport { SankeyDiagram };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SankeyDiagram\"] = SankeyDiagram;\r\n//# sourceMappingURL=SankeyDiagram.js.map","/**\r\n * ChordNode module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagramNode } from \"./FlowDiagramNode\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ChordNode = /** @class */ (function (_super) {\r\n __extends(ChordNode, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ChordNode() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ChordNode\";\r\n var label = _this.createChild(AxisLabelCircular);\r\n label.location = 0.5;\r\n label.radius = 5;\r\n label.text = \"{name}\";\r\n label.zIndex = 1;\r\n label.shouldClone = false;\r\n _this.label = label;\r\n _this.layout = \"none\";\r\n _this.events.on(\"positionchanged\", _this.updateRotation, _this, false);\r\n _this.isMeasured = false;\r\n _this.slice = _this.createChild(Slice);\r\n _this.slice.isMeasured = false;\r\n var hiddenState = _this.hiddenState;\r\n hiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n hiddenState.properties.opacity = 0.5;\r\n hiddenState.properties.visible = true;\r\n _this.setStateOnChildren = false;\r\n _this.slice.hiddenState.properties.visible = true;\r\n _this.adapter.add(\"tooltipX\", function (tooltipX, target) {\r\n return target.slice.ix * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n });\r\n _this.adapter.add(\"tooltipY\", function (tooltipY, target) {\r\n return target.slice.iy * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n });\r\n return _this;\r\n }\r\n /**\r\n * Invalidates all links, attached to this node.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ChordNode.prototype.invalidateLinks = function () {\r\n var _this = this;\r\n _super.prototype.invalidateLinks.call(this);\r\n var label = this.label;\r\n var slice = this.slice;\r\n var chart = this.chart;\r\n if (chart && slice) {\r\n var sum = this.total;\r\n var arc_1 = slice.arc;\r\n var sliceStartAngle_1 = slice.startAngle;\r\n this.children.each(function (child) {\r\n if (child instanceof Bullet) {\r\n var locationX = child.locationX;\r\n if (!$type.isNumber(locationX)) {\r\n locationX = 0.5;\r\n }\r\n var locationY = child.locationY;\r\n if (!$type.isNumber(locationY)) {\r\n locationY = 1;\r\n }\r\n var childAngle = sliceStartAngle_1 + arc_1 * locationX;\r\n var childRadius = locationY * slice.radius;\r\n child.x = childRadius * $math.cos(childAngle);\r\n child.y = childRadius * $math.sin(childAngle);\r\n }\r\n });\r\n var labelAngle = sliceStartAngle_1 + arc_1 * label.location;\r\n var startAngle = sliceStartAngle_1 + (1 - sum / this.adjustedTotal) * arc_1 * 0.5; // if value of a node is > then sum of the links, add to center link\r\n if ($type.isNaN(startAngle)) {\r\n startAngle = sliceStartAngle_1;\r\n }\r\n label.fixPosition(labelAngle, slice.radius);\r\n this.nextAngle = startAngle;\r\n if (this._outgoingSorted) {\r\n $iter.each(this._outgoingSorted, function (dataItem) {\r\n var link = dataItem.link;\r\n link.parent = _this.chart.linksContainer;\r\n var value = dataItem.getWorkingValue(\"value\");\r\n if ($type.isNumber(value)) {\r\n if (chart.nonRibbon) {\r\n var percentWidth = link.percentWidth;\r\n if (!$type.isNumber(percentWidth)) {\r\n percentWidth = 5;\r\n }\r\n percentWidth = percentWidth / 100;\r\n link.startAngle = sliceStartAngle_1 + arc_1 / 2 - arc_1 / 2 * percentWidth;\r\n link.arc = arc_1 * percentWidth;\r\n }\r\n else {\r\n link.arc = value * chart.valueAngle;\r\n link.startAngle = _this.nextAngle;\r\n _this.nextAngle += link.arc;\r\n }\r\n if (!dataItem.toNode) {\r\n link.endAngle = link.startAngle;\r\n }\r\n link.radius = slice.pixelInnerRadius;\r\n }\r\n //link.validate();\r\n });\r\n }\r\n if (this._incomingSorted) {\r\n $iter.each(this._incomingSorted, function (dataItem) {\r\n var link = dataItem.link;\r\n link.radius = slice.pixelInnerRadius;\r\n if (chart.nonRibbon) {\r\n var percentWidth = link.percentWidth;\r\n if (!$type.isNumber(percentWidth)) {\r\n percentWidth = 5;\r\n }\r\n percentWidth = percentWidth / 100;\r\n link.endAngle = sliceStartAngle_1 + arc_1 / 2 - arc_1 / 2 * percentWidth;\r\n link.arc = arc_1 * percentWidth;\r\n }\r\n else {\r\n link.endAngle = _this.nextAngle;\r\n var value = dataItem.getWorkingValue(\"value\");\r\n if ($type.isNumber(value)) {\r\n link.arc = value * chart.valueAngle; // yes, this is needed\r\n _this.nextAngle += link.arc;\r\n }\r\n }\r\n if (!dataItem.fromNode) {\r\n link.startAngle = link.endAngle;\r\n }\r\n //link.validate();\r\n });\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n * updates slice start angle so that when we drag a node it would face the center\r\n */\r\n ChordNode.prototype.updateRotation = function () {\r\n var slice = this.slice;\r\n var mAngle = this.trueStartAngle + slice.arc / 2;\r\n var radius = slice.radius;\r\n var tx = radius * $math.cos(mAngle);\r\n var ty = radius * $math.sin(mAngle);\r\n var angle = $math.getAngle({ x: tx + this.pixelX, y: ty + this.pixelY });\r\n slice.startAngle = this.trueStartAngle + (angle - mAngle);\r\n this.dx = -this.pixelX;\r\n this.dy = -this.pixelY;\r\n };\r\n /**\r\n * Copies properties and labels from another [[ChordNode]].\r\n *\r\n * @param source Source node\r\n */\r\n ChordNode.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.label.copyFrom(source.label);\r\n this.slice.copyFrom(source.slice);\r\n };\r\n return ChordNode;\r\n}(FlowDiagramNode));\r\nexport { ChordNode };\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//# sourceMappingURL=ChordNode.js.map","/**\r\n * Functionality for drawing quadratic curves.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Line } from \"./Line\";\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 * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar QuadraticCurve = /** @class */ (function (_super) {\r\n __extends(QuadraticCurve, _super);\r\n /**\r\n * Constructor\r\n */\r\n function QuadraticCurve() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"QuadraticCurve\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this.pixelPerfect = false;\r\n _this.fill = color();\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the waved line.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n QuadraticCurve.prototype.draw = function () {\r\n //super.draw();\r\n if ($type.isNumber(this.x1 + this.x2 + this.y1 + this.y2 + this.cpx + this.cpy)) {\r\n var p1 = { x: this.x1, y: this.y1 };\r\n var p2 = { x: this.x2, y: this.y2 };\r\n var cp = { x: this.cpx, y: this.cpy };\r\n var d = $path.moveTo(p1) + $path.quadraticCurveTo(p2, cp);\r\n this.path = d;\r\n }\r\n };\r\n Object.defineProperty(QuadraticCurve.prototype, \"cpx\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cpx\");\r\n },\r\n /**\r\n * X coordinate of control point.\r\n *\r\n * @param value X\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cpx\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(QuadraticCurve.prototype, \"cpy\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"cpy\");\r\n },\r\n /**\r\n * Y coordinate of control point.\r\n *\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"cpy\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Converts relative position along the line (0-1) into pixel coordinates.\r\n *\r\n * @param position Position (0-1)\r\n * @return Coordinates\r\n */\r\n QuadraticCurve.prototype.positionToPoint = function (position) {\r\n var p1 = { x: this.x1, y: this.y1 };\r\n var cp = { x: this.cpx, y: this.cpy };\r\n var p2 = { x: this.x2, y: this.y2 };\r\n var point1 = $math.getPointOnQuadraticCurve(p1, p2, cp, position);\r\n var point2 = $math.getPointOnQuadraticCurve(p1, p2, cp, position + 0.001);\r\n return { x: point1.x, y: point1.y, angle: $math.getAngle(point1, point2) };\r\n };\r\n return QuadraticCurve;\r\n}(Line));\r\nexport { QuadraticCurve };\r\n//# sourceMappingURL=QuadraticCurve.js.map","/**\r\n * ChordLink module\r\n */\r\nimport { __extends } from \"tslib\";\r\nimport { FlowDiagramLink } from \"./FlowDiagramLink\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { QuadraticCurve } from \"../../core/elements/QuadraticCurve\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ChordLink = /** @class */ (function (_super) {\r\n __extends(ChordLink, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ChordLink() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ChordLink\";\r\n _this.middleLine = _this.createChild(QuadraticCurve);\r\n _this.middleLine.shouldClone = false;\r\n _this.middleLine.strokeOpacity = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * (Re)validates (redraws) the link.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ChordLink.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n if (!this.isTemplate) {\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var arc = this.arc;\r\n var radius = this.radius;\r\n var fromNode = this.dataItem.fromNode;\r\n var toNode = this.dataItem.toNode;\r\n var fromX = 0;\r\n var fromY = 0;\r\n if (fromNode) {\r\n fromX = fromNode.pixelX + fromNode.dx;\r\n fromY = fromNode.pixelY + fromNode.dy;\r\n }\r\n var toX = 0;\r\n var toY = 0;\r\n if (toNode) {\r\n toX = toNode.pixelX + toNode.dx;\r\n toY = toNode.pixelY + toNode.dy;\r\n }\r\n if (radius > 0) {\r\n var x1 = radius * $math.cos(startAngle) + fromX;\r\n var y1 = radius * $math.sin(startAngle) + fromY;\r\n var x2 = radius * $math.cos(endAngle) + toX;\r\n var y2 = radius * $math.sin(endAngle) + toY;\r\n //let cpAngle = startAngle + arc + (endAngle - startAngle - arc) / 2;\r\n //let arcWidth = $math.getDistance({x:x1, y:y1}, {x:x4, y:y4});\r\n //let cpx = (arcWidth) * $math.cos(cpAngle);\r\n //let cpy = (arcWidth) * $math.sin(cpAngle);\r\n var cp = { x: 0, y: 0 };\r\n var path = $path.moveTo({ x: x1, y: y1 });\r\n path += $path.arcTo(startAngle, arc, radius);\r\n path += $path.quadraticCurveTo({ x: x2, y: y2 }, cp);\r\n path += $path.arcTo(endAngle, arc, radius);\r\n path += $path.quadraticCurveTo({ x: x1, y: y1 }, cp);\r\n if (arc > 0) {\r\n this.link.path = path;\r\n }\r\n else {\r\n this.link.path = \"\";\r\n }\r\n if (this.maskBullets) {\r\n this.bulletsMask.path = path;\r\n this.bulletsContainer.mask = this.bulletsMask;\r\n }\r\n var mAngle1 = startAngle + arc / 2;\r\n var mAngle2 = endAngle + arc / 2;\r\n var middleLine = this.middleLine;\r\n middleLine.x1 = radius * $math.cos(mAngle1) + fromX;\r\n middleLine.y1 = radius * $math.sin(mAngle1) + fromY;\r\n middleLine.x2 = radius * $math.cos(mAngle2) + toX;\r\n middleLine.y2 = radius * $math.sin(mAngle2) + toY;\r\n middleLine.cpx = 0;\r\n middleLine.cpy = 0;\r\n middleLine.stroke = this.fill;\r\n this.positionBullets();\r\n }\r\n }\r\n };\r\n Object.defineProperty(ChordLink.prototype, \"radius\", {\r\n /**\r\n * @return End Y\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * [radius description]\r\n *\r\n * @todo Description\r\n * @param value End Y\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"radius\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordLink.prototype, \"arc\", {\r\n /**\r\n * @return [description]\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"arc\");\r\n },\r\n /**\r\n * [arc description]\r\n *\r\n * @todo Description\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"arc\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ChordLink;\r\n}(FlowDiagramLink));\r\nexport { ChordLink };\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//# sourceMappingURL=ChordLink.js.map","/**\r\n * Chord diagram module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagram, FlowDiagramDataItem } from \"./FlowDiagram\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ChordNode } from \"../elements/ChordNode\";\r\nimport { ChordLink } from \"../elements/ChordLink\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo rearange notes after dragged\r\n/**\r\n * Defines a [[DataItem]] for [[ChordDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar ChordDiagramDataItem = /** @class */ (function (_super) {\r\n __extends(ChordDiagramDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ChordDiagramDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ChordDiagramDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return ChordDiagramDataItem;\r\n}(FlowDiagramDataItem));\r\nexport { ChordDiagramDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ChordDiagram = /** @class */ (function (_super) {\r\n __extends(ChordDiagram, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ChordDiagram() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * [valueAngle description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n _this.valueAngle = 0;\r\n _this.className = \"ChordDiagram\";\r\n _this.startAngle = -90;\r\n _this.endAngle = 270;\r\n _this.radius = percent(80);\r\n _this.innerRadius = -15;\r\n _this.nodePadding = 5;\r\n var chordContainer = _this.chartContainer.createChild(Container);\r\n chordContainer.align = \"center\";\r\n chordContainer.valign = \"middle\";\r\n chordContainer.shouldClone = false;\r\n chordContainer.layout = \"absolute\";\r\n _this.chordContainer = chordContainer;\r\n _this.nodesContainer.parent = chordContainer;\r\n _this.linksContainer.parent = chordContainer;\r\n _this.chartContainer.events.on(\"maxsizechanged\", _this.invalidate, _this, false);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Redraws the chart.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ChordDiagram.prototype.validate = function () {\r\n var _this = this;\r\n var chartContainer = this.chartContainer;\r\n var endAngle = this.endAngle;\r\n var startAngle = this.startAngle + this.nodePadding / 2;\r\n var rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n var innerRect = { x: 0, y: 0, width: 0, height: 0 };\r\n rect = $math.getCommonRectangle([rect, innerRect]);\r\n var maxRadius = Math.min(chartContainer.innerWidth / rect.width, chartContainer.innerHeight / rect.height);\r\n if (!$type.isNumber(maxRadius)) {\r\n maxRadius = 0;\r\n }\r\n var radius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n var pixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, radius, true);\r\n var total = this.dataItem.values.value.sum;\r\n var count = 0;\r\n var newTotal = 0;\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n _this.getNodeValue(node);\r\n count++;\r\n var value = node.total;\r\n if (node.total / total < _this.minNodeSize) {\r\n value = total * _this.minNodeSize;\r\n }\r\n newTotal += value;\r\n });\r\n this.valueAngle = (endAngle - this.startAngle - this.nodePadding * count) / newTotal;\r\n $iter.each(this._sorted, function (strNode) {\r\n var node = strNode[1];\r\n var slice = node.slice;\r\n slice.radius = radius;\r\n slice.innerRadius = pixelInnerRadius;\r\n var value = node.total;\r\n if (node.total / total < _this.minNodeSize) {\r\n value = total * _this.minNodeSize;\r\n }\r\n node.adjustedTotal = value;\r\n var arc;\r\n if (_this.nonRibbon) {\r\n arc = (endAngle - _this.startAngle) / count - _this.nodePadding;\r\n }\r\n else {\r\n arc = _this.valueAngle * value;\r\n }\r\n slice.arc = arc;\r\n slice.startAngle = startAngle;\r\n node.trueStartAngle = startAngle;\r\n node.parent = _this.nodesContainer;\r\n node.validate(); // otherwise flickers - nodes are already created, but not yet positioned etc.\r\n startAngle += arc + _this.nodePadding;\r\n });\r\n this.chordContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n this.chordContainer.invalidateLayout();\r\n _super.prototype.validate.call(this);\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n ChordDiagram.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Chord diagram\");\r\n }\r\n };\r\n /**\r\n * Creates and returns a new data item.\r\n *\r\n * @return Data item\r\n */\r\n ChordDiagram.prototype.createDataItem = function () {\r\n return new ChordDiagramDataItem();\r\n };\r\n Object.defineProperty(ChordDiagram.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Starting angle of the Radar face. (degrees)\r\n *\r\n * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n * top center. (at -90 degrees)\r\n *\r\n * You can use `startAngle` to change this setting.\r\n *\r\n * E.g. setting this to 0 will make the radial axis start horizontally to\r\n * the right, as opposed to vertical.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set those to lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n * looks like a quarter of a circle.\r\n *\r\n * @default -90\r\n * @param value Start angle (degrees)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordDiagram.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle (degrees)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * Starting angle of the Radar face. (degrees)\r\n *\r\n * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n * where it has started, forming a full 360 circle. (at 270 degrees)\r\n *\r\n * You can use `endAngle` to end the circle somewhere else.\r\n *\r\n * E.g. setting this to 180 will make the radar face end at horizontal line\r\n * to the left off the center.\r\n *\r\n * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n * needs to be 360.\r\n *\r\n * However, it's **not** necessary to do so. You can set those to lesser\r\n * numbers, to create semi-circles.\r\n *\r\n * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n * looks like a quarter of a circle.\r\n *\r\n * @default -90\r\n * @param value End angle (degrees)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordDiagram.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the Radar face.\r\n *\r\n * This can either be in absolute pixel value, or relative [[Percent]].\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordDiagram.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the Chord nodes.\r\n *\r\n * This can either be in absolute pixel value, or relative [[Percent]].\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ChordDiagram.prototype, \"nonRibbon\", {\r\n /**\r\n * @return Non-ribbon\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"nonRibbon\");\r\n },\r\n /**\r\n *\r\n * 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 *\r\n * @param value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"nonRibbon\", value, true);\r\n this.links.template.middleLine.strokeOpacity = 1;\r\n this.links.template.link.fillOpacity = 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @ignore\r\n */\r\n ChordDiagram.prototype.createNode = function () {\r\n var node = new ChordNode();\r\n this._disposers.push(node);\r\n return node;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n ChordDiagram.prototype.createLink = function () {\r\n var link = new ChordLink();\r\n this._disposers.push(link);\r\n return link;\r\n };\r\n return ChordDiagram;\r\n}(FlowDiagram));\r\nexport { ChordDiagram };\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//# sourceMappingURL=ChordDiagram.js.map","/**\r\n * Module that defines everything related to building Columns.\r\n * It is a container which has column element which is a RoundedRectangle.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Class used to creates Columns.\r\n *\r\n * @see {@link IColumnEvents} for a list of available events\r\n * @see {@link IColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nvar Column = /** @class */ (function (_super) {\r\n __extends(Column, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Column() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Column\";\r\n _this.width = percent(80);\r\n _this.height = percent(80);\r\n //this.isMeasured = true; // for correct position of the tooltip\r\n _this.events.disableType(\"transformed\"); // not to bug parent\r\n _this.applyOnClones = true;\r\n _this.strokeOpacity = 1;\r\n _this.layout = \"none\";\r\n _this.createAssets();\r\n // otherwise users will have to set layout themselves if they'll want to align, scale etc children\r\n _this.events.on(\"childadded\", _this.handleKidAdded, _this, false);\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n Column.prototype.handleKidAdded = function () {\r\n if (this.layout == \"none\") {\r\n this.layout = \"absolute\";\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n Column.prototype.createAssets = function () {\r\n this.column = this.createChild(RoundedRectangle);\r\n this.column.shouldClone = false;\r\n this.column.isMeasured = false;\r\n this.column.cornerRadius(0, 0, 0, 0);\r\n this._disposers.push(this.column);\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n Column.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n var column = this.column;\r\n if (column) {\r\n column.width = $math.min(this.pixelWidth, this.maxWidth);\r\n column.height = $math.min(this.pixelHeight, this.maxHeight);\r\n if (column.invalid) {\r\n column.validate(); // important!\r\n }\r\n }\r\n };\r\n /**\r\n * Copies all parameters from another [[Column]].\r\n *\r\n * @param source Source Column\r\n */\r\n Column.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.column) {\r\n this.column.copyFrom(source.column);\r\n }\r\n };\r\n Object.defineProperty(Column.prototype, \"bbox\", {\r\n /**\r\n * Returns bounding box (square) for this element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n if (this.definedBBox) {\r\n return this.definedBBox;\r\n }\r\n if (this.column) {\r\n return { x: 0, y: 0, width: this.column.measuredWidth, height: this.column.measuredHeight };\r\n }\r\n else {\r\n return { x: 0, y: 0, width: $math.min(this.pixelWidth, this.maxWidth), height: $math.min(this.pixelHeight, this.maxHeight) };\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Column;\r\n}(Container));\r\nexport { Column };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Column\"] = Column;\r\n//# sourceMappingURL=Column.js.map","/**\r\n * Column series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem } from \"./XYSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Column } from \"../elements/Column\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[ColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar ColumnSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(ColumnSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColumnSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ColumnSeriesDataItem\";\r\n _this.locations[\"dateX\"] = 0.5;\r\n _this.locations[\"dateY\"] = 0.5;\r\n _this.locations[\"categoryX\"] = 0.5;\r\n _this.locations[\"categoryY\"] = 0.5;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ColumnSeriesDataItem.prototype, \"column\", {\r\n /**\r\n * @return Column\r\n */\r\n get: function () {\r\n return this._column;\r\n },\r\n /**\r\n * A column used to draw a column for this data item.\r\n *\r\n * @param column\r\n */\r\n set: function (column) {\r\n this.setColumn(column);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ColumnSeriesDataItem.prototype.setColumn = function (column) {\r\n var _this = this;\r\n if (this._column && column != this._column) {\r\n $array.remove(this.sprites, this._column);\r\n }\r\n this._column = column;\r\n if (column) {\r\n var prevDataItem = column.dataItem;\r\n if (prevDataItem && prevDataItem != this) {\r\n prevDataItem.column = undefined;\r\n }\r\n this.addSprite(column);\r\n this._disposers.push(new Disposer(function () {\r\n // TODO investigate why component is undefined\r\n // https://codepen.io/team/amcharts/pen/dac4be245d658233a6d7e5597df2208b?editors=0010\r\n if (_this.component) {\r\n _this.component.columns.removeValue(column);\r\n }\r\n }));\r\n }\r\n };\r\n Object.defineProperty(ColumnSeriesDataItem.prototype, \"width\", {\r\n get: function () {\r\n var width = this.properties.width;\r\n if (this._adapterO) {\r\n width = this._adapterO.apply(\"width\", width);\r\n }\r\n return width;\r\n },\r\n set: function (value) {\r\n if (this.properties.width != value) {\r\n this.properties.width = value;\r\n if (this.component) {\r\n this.component.validateDataElement(this);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeriesDataItem.prototype, \"height\", {\r\n get: function () {\r\n var height = this.properties.height;\r\n if (this._adapterO) {\r\n height = this._adapterO.apply(\"height\", height);\r\n }\r\n return height;\r\n },\r\n set: function (value) {\r\n if (this.properties.height != value) {\r\n this.properties.height = value;\r\n if (this.component) {\r\n this.component.validateDataElement(this);\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeriesDataItem.prototype, \"rangesColumns\", {\r\n /**\r\n * A dictionary storing axes ranges columns by axis uid\r\n */\r\n get: function () {\r\n if (!this._rangesColumns) {\r\n this._rangesColumns = new Dictionary();\r\n }\r\n return this._rangesColumns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ColumnSeriesDataItem;\r\n}(XYSeriesDataItem));\r\nexport { ColumnSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ColumnSeries = /** @class */ (function (_super) {\r\n __extends(ColumnSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColumnSeries() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Start location within cell for columns.\r\n */\r\n _this._startLocation = 0;\r\n /**\r\n * End location within cell for columns.\r\n */\r\n _this._endLocation = 1;\r\n _this.className = \"ColumnSeries\";\r\n _this.width = percent(100);\r\n _this.height = percent(100);\r\n _this.strokeOpacity = 0;\r\n _this.fillOpacity = 1;\r\n _this.clustered = true;\r\n var columnsContainer = _this.mainContainer.createChild(Container);\r\n columnsContainer.shouldClone = false;\r\n columnsContainer.isMeasured = false;\r\n columnsContainer.layout = \"none\";\r\n _this._columnsContainer = columnsContainer;\r\n _this.columns.template.pixelPerfect = false;\r\n _this.tooltipColorSource = _this.columns.template;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ColumnSeries.prototype, \"columnsContainer\", {\r\n /**\r\n * A container that columns are created in.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n get: function () {\r\n return this._columnsContainer;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n ColumnSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Column Series\");\r\n }\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n ColumnSeries.prototype.createDataItem = function () {\r\n return new ColumnSeriesDataItem();\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ColumnSeries.prototype.validate = function () {\r\n //@todo Check if we can do better than use `instanceof`\r\n // find start/end locations based on clustered/stacked settings\r\n // go through chart series instead of base axis series, because axis series doesn't maintain order\r\n var _this = this;\r\n this.group.node.removeAttribute(\"fill\");\r\n if (this.chart && this.xAxis && this.yAxis) {\r\n var baseAxisSeries = this.chart.series;\r\n var clusterCount_1 = 0;\r\n var index_1 = 0;\r\n var sortedByAxis_1 = [];\r\n $iter.each(baseAxisSeries.iterator(), function (series) {\r\n if (series instanceof ColumnSeries) {\r\n if (_this.baseAxis == series.baseAxis) {\r\n var index_2;\r\n if (_this.baseAxis == _this.xAxis) {\r\n index_2 = _this.chart.yAxes.indexOf(series.yAxis);\r\n }\r\n else {\r\n index_2 = _this.chart.xAxes.indexOf(series.xAxis);\r\n }\r\n sortedByAxis_1.push({ series: series, axis: index_2 });\r\n }\r\n }\r\n });\r\n sortedByAxis_1.sort(function (a, b) { return a.axis - b.axis; });\r\n var prevAxisIndex_1;\r\n $array.each(sortedByAxis_1, function (sortedItem) {\r\n var series = sortedItem.series;\r\n if (series instanceof ColumnSeries) {\r\n if ((!series.stacked && series.clustered) || (prevAxisIndex_1 != sortedItem.axis && series.clustered)) {\r\n clusterCount_1++;\r\n }\r\n if (series == _this) {\r\n index_1 = clusterCount_1 - 1;\r\n }\r\n }\r\n prevAxisIndex_1 = sortedItem.axis;\r\n });\r\n if (!this.clustered) {\r\n index_1 = 0;\r\n clusterCount_1 = 1;\r\n }\r\n var renderer = this.baseAxis.renderer;\r\n var cellStartLocation = renderer.cellStartLocation;\r\n var cellEndLocation = renderer.cellEndLocation;\r\n this._startLocation = cellStartLocation + (index_1 / clusterCount_1) * (cellEndLocation - cellStartLocation);\r\n this._endLocation = cellStartLocation + (index_1 + 1) / clusterCount_1 * (cellEndLocation - cellStartLocation);\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis instanceof CategoryAxis && yAxis instanceof ValueAxis) {\r\n if (xAxis.sortBySeries == this) {\r\n this.sortCategoryAxis(xAxis, \"valueY\");\r\n }\r\n }\r\n if (yAxis instanceof CategoryAxis && xAxis instanceof ValueAxis) {\r\n if (yAxis.sortBySeries == this) {\r\n this.sortCategoryAxis(yAxis, \"valueX\");\r\n }\r\n }\r\n }\r\n _super.prototype.validate.call(this);\r\n for (var i = 0; i < this.startIndex; i++) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n this.disableUnusedColumns(dataItem);\r\n }\r\n for (var i = this.dataItems.length - 1; i > this.endIndex; i--) {\r\n var dataItem = this.dataItems.getIndex(i);\r\n this.disableUnusedColumns(dataItem);\r\n }\r\n this._propertiesChanged = false;\r\n };\r\n ColumnSeries.prototype.sortCategoryAxis = function (axis, key) {\r\n var _this = this;\r\n this.dataItems.values.sort(function (x, y) {\r\n return y.values[key].workingValue - x.values[key].workingValue;\r\n });\r\n var i = 0;\r\n this.dataItems.each(function (dataItem) {\r\n dataItem._index = i;\r\n i++;\r\n });\r\n axis.dataItems.each(function (dataItem) {\r\n var axis = dataItem.component;\r\n var currentPosition = axis.categoryToPosition(dataItem.category) - dataItem.deltaPosition;\r\n var seriesDataItem = axis.getSeriesDataItemByCategory(dataItem.category, _this);\r\n if (seriesDataItem) {\r\n var index = _this.dataItems.indexOf(seriesDataItem);\r\n dataItem._index = index;\r\n var deltaPosition = $math.round((index + 0.5) / _this.dataItems.length - currentPosition, 3);\r\n if (dataItem.deltaAnimation && !dataItem.deltaAnimation.isDisposed() && dataItem.deltaAnimation.animationOptions[0].to == deltaPosition) {\r\n // void\r\n }\r\n else if (deltaPosition != $math.round(dataItem.deltaPosition, 3)) {\r\n if (dataItem.deltaAnimation) {\r\n dataItem.deltaAnimation.stop();\r\n }\r\n dataItem.deltaAnimation = dataItem.animate({ property: \"deltaPosition\", from: -deltaPosition, to: 0 }, axis.interpolationDuration, axis.interpolationEasing);\r\n _this._disposers.push(dataItem.deltaAnimation);\r\n }\r\n }\r\n });\r\n axis.dataItems.values.sort(function (x, y) {\r\n return x.index - y.index;\r\n });\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ColumnSeries.prototype.validateDataElement = function (dataItem) {\r\n // important oder here, first real, then super. we need this to know size\r\n if (this.chart && this.xAxis && this.yAxis) {\r\n this.validateDataElementReal(dataItem);\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n }\r\n };\r\n /**\r\n * Returns relative start location for the data item.\r\n *\r\n * @param dataItem Data item\r\n * @return Location (0-1)\r\n */\r\n ColumnSeries.prototype.getStartLocation = function (dataItem) {\r\n var startLocation = this._startLocation;\r\n if (this.baseAxis == this.xAxis) {\r\n startLocation += dataItem.locations[this.xOpenField] - 0.5;\r\n }\r\n else {\r\n startLocation += dataItem.locations[this.yOpenField] - 0.5;\r\n }\r\n return startLocation;\r\n };\r\n /**\r\n * [handleDataItemWorkingValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n /*\r\n public handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n if (this.simplifiedProcessing) {\r\n this.validateDataElement(dataItem);\r\n }\r\n else {\r\n super.handleDataItemWorkingValueChange(dataItem, name);\r\n }\r\n }*/\r\n /**\r\n * Returns relative end location for the data item.\r\n *\r\n * @param dataItem Data item\r\n * @return Location (0-1)\r\n */\r\n ColumnSeries.prototype.getEndLocation = function (dataItem) {\r\n var endLocation = this._endLocation;\r\n if (this.baseAxis == this.xAxis) {\r\n endLocation += dataItem.locations[this.xField] - 0.5;\r\n }\r\n else {\r\n endLocation += dataItem.locations[this.yField] - 0.5;\r\n }\r\n return endLocation;\r\n };\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ColumnSeries.prototype.validateDataElementReal = function (dataItem) {\r\n var _this = this;\r\n //\tif (dataItem.hasValue([this.xField, this.yField])) { // todo: this doesn't work with categories, think of a better way\r\n var l;\r\n var r;\r\n var t;\r\n var b;\r\n var startLocation = this.getStartLocation(dataItem);\r\n var endLocation = this.getEndLocation(dataItem);\r\n var xField = this.xField;\r\n var xOpenField = this.xOpenField;\r\n var yField = this.yField;\r\n var yOpenField = this.yOpenField;\r\n var template = this.columns.template;\r\n var percentWidth = template.percentWidth;\r\n var percentHeight = template.percentHeight;\r\n var pixelWidth = template.pixelWidth;\r\n var pixelHeight = template.pixelHeight;\r\n var maxWidth = template.maxWidth;\r\n var maxHeight = template.maxHeight;\r\n var paddingLeft = template.pixelPaddingLeft;\r\n var paddingRight = template.pixelPaddingRight;\r\n var paddingTop = template.pixelPaddingTop;\r\n var paddingBottom = template.pixelPaddingBottom;\r\n var outOfBounds = false;\r\n var diw = dataItem.width;\r\n if ($type.hasValue(diw)) {\r\n if ($type.isNumber(diw)) {\r\n pixelWidth = diw;\r\n }\r\n if (diw instanceof Percent) {\r\n percentWidth = diw.value * 100;\r\n }\r\n }\r\n var dih = dataItem.height;\r\n if ($type.hasValue(dih)) {\r\n if ($type.isNumber(dih)) {\r\n pixelHeight = dih;\r\n }\r\n if (dih instanceof Percent) {\r\n percentHeight = dih.value * 100;\r\n }\r\n }\r\n // two category axes\r\n if ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n if (!dataItem.hasValue(this._xValueFields) || !dataItem.hasValue(this._yValueFields)) {\r\n return;\r\n }\r\n startLocation = 0;\r\n endLocation = 1;\r\n if (!$type.isNaN(percentWidth)) {\r\n var offset = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n l = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n r = this.xAxis.getX(dataItem, xField, endLocation);\r\n // in case width is set in pixels\r\n if ($type.isNaN(percentWidth)) {\r\n var offset = ((r - l) - pixelWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n // in case max width is set in pixels\r\n if (!$type.isNaN(maxWidth) && maxWidth < Math.abs(r - l)) {\r\n var offset = ((r - l) - maxWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n startLocation = 0;\r\n endLocation = 1;\r\n if (!$type.isNaN(percentHeight)) {\r\n var offset = $math.round((1 - percentHeight / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n t = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n b = this.yAxis.getY(dataItem, yField, endLocation);\r\n // in case width is set in pixels\r\n if ($type.isNaN(percentHeight)) {\r\n var offset = ((b - t) - pixelHeight) / 2;\r\n b += offset;\r\n t -= offset;\r\n }\r\n // in case max width is set in pixels\r\n if (!$type.isNaN(maxHeight) && maxHeight < Math.abs(b - t)) {\r\n var offset = ((b - t) - maxHeight) / 2;\r\n b += offset;\r\n t -= offset;\r\n }\r\n r = this.fixHorizontalCoordinate(r);\r\n l = this.fixHorizontalCoordinate(l);\r\n t = this.fixVerticalCoordinate(t);\r\n b = this.fixVerticalCoordinate(b);\r\n }\r\n else if (this.baseAxis == this.xAxis) {\r\n if (!dataItem.hasValue(this._yValueFields)) {\r\n return;\r\n }\r\n // in case width is set in percent\r\n if (!$type.isNaN(percentWidth)) {\r\n var offset = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n l = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n r = this.xAxis.getX(dataItem, xField, endLocation);\r\n // in case width is set in pixels\r\n if ($type.isNaN(percentWidth)) {\r\n var offset = ((r - l) - pixelWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n // in case width is set in pixels\r\n if (!$type.isNaN(maxWidth) && maxWidth < Math.abs(r - l)) {\r\n var offset = ((r - l) - maxWidth) / 2;\r\n l += offset;\r\n r -= offset;\r\n }\r\n var bottomLocation = dataItem.locations[yOpenField];\r\n var topLocation = dataItem.locations[yField];\r\n // otherwise gantt chart will start items in the middle of a cell\r\n if (this.yAxis instanceof ValueAxis) {\r\n if (this.dataFields[this.yField] != this.dataFields[this.yOpenField]) {\r\n bottomLocation = 0;\r\n topLocation = 0;\r\n }\r\n }\r\n b = this.yAxis.getY(dataItem, yOpenField, bottomLocation);\r\n t = this.yAxis.getY(dataItem, yField, topLocation);\r\n // used to save location for bullets, but it's not a good approach\r\n // dataItem.locations[xField] = startLocation + (endLocation - startLocation) / 2;\r\n var axisLenght = Math.ceil(this.yAxis.axisLength);\r\n if ((t < 0 && b < 0) || (t > axisLenght && b > axisLenght)) {\r\n outOfBounds = true;\r\n }\r\n t = this.fixVerticalCoordinate(t);\r\n b = this.fixVerticalCoordinate(b);\r\n if (Math.abs(r - l) - paddingLeft - paddingRight == 0) {\r\n outOfBounds = true;\r\n }\r\n }\r\n // horizontal bars\r\n else {\r\n if (!dataItem.hasValue(this._xValueFields)) {\r\n return;\r\n }\r\n if (!$type.isNaN(percentHeight)) {\r\n var offset = $math.round((endLocation - startLocation) * (1 - percentHeight / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n }\r\n t = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n b = this.yAxis.getY(dataItem, yField, endLocation);\r\n // in case height is set in pixels\r\n if ($type.isNaN(percentHeight)) {\r\n var offset = ((b - t) - pixelHeight) / 2;\r\n b -= offset;\r\n t += offset;\r\n }\r\n // in case height is set in pixels\r\n if (!$type.isNaN(maxHeight) && maxHeight < Math.abs(b - t)) {\r\n var offset = ((b - t) - maxHeight) / 2;\r\n b -= offset;\r\n t += offset;\r\n }\r\n var rightLocation = dataItem.locations[xField];\r\n var leftLocation = dataItem.locations[xOpenField];\r\n // otherwise gantt chart will start items in the middle of a cell\r\n if (this.xAxis instanceof ValueAxis) {\r\n if (this.dataFields[this.xField] != this.dataFields[this.xOpenField]) {\r\n rightLocation = 0;\r\n leftLocation = 0;\r\n }\r\n }\r\n r = this.xAxis.getX(dataItem, xField, rightLocation);\r\n l = this.xAxis.getX(dataItem, xOpenField, leftLocation);\r\n // used to save location for bullets, but it's not a good approach\r\n // dataItem.locations[yField] = startLocation + (endLocation - startLocation) / 2;\r\n var axisLenght = Math.ceil(this.xAxis.axisLength);\r\n if ((r < 0 && l < 0) || (r > axisLenght && l > axisLenght)) {\r\n outOfBounds = true;\r\n }\r\n r = this.fixHorizontalCoordinate(r);\r\n l = this.fixHorizontalCoordinate(l);\r\n if (Math.abs(t - b) - paddingTop - paddingBottom == 0) {\r\n outOfBounds = true;\r\n }\r\n }\r\n var w = Math.abs(r - l);\r\n var h = Math.abs(b - t);\r\n var x = Math.min(l, r);\r\n var y = Math.min(t, b);\r\n if (!outOfBounds) {\r\n var column_1;\r\n if (!dataItem.column) {\r\n column_1 = this.columns.create();\r\n //$object.forceCopyProperties(this.columns.template, column, visualProperties);\r\n $object.copyProperties(this, column_1, visualProperties); // need this because 3d columns are not in the same container\r\n $object.copyProperties(this.columns.template, column_1, visualProperties); // second time, no force, so that columns.template would override series properties\r\n dataItem.addSprite(column_1);\r\n dataItem.column = column_1;\r\n column_1.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\r\n // accessibility\r\n if (this.itemsFocusable()) {\r\n if (!$type.hasValue(this.role)) {\r\n this.role = \"menu\";\r\n }\r\n if (!$type.hasValue(column_1.role)) {\r\n column_1.role = \"menuitem\";\r\n }\r\n column_1.focusable = true;\r\n }\r\n else {\r\n if (!$type.hasValue(this.role)) {\r\n this.role = \"list\";\r\n }\r\n if (!$type.hasValue(column_1.role)) {\r\n column_1.role = \"listitem\";\r\n }\r\n column_1.focusable = false;\r\n }\r\n if (column_1.focusable) {\r\n column_1.events.on(\"focus\", function (ev) {\r\n column_1.readerTitle = _this.populateString(_this.itemReaderText, dataItem);\r\n }, undefined, false);\r\n column_1.events.on(\"blur\", function (ev) {\r\n column_1.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n if (column_1.hoverable) {\r\n column_1.events.on(\"over\", function (ev) {\r\n column_1.readerTitle = _this.populateString(_this.itemReaderText, dataItem);\r\n }, undefined, false);\r\n column_1.events.on(\"out\", function (ev) {\r\n column_1.readerTitle = \"\";\r\n }, undefined, false);\r\n }\r\n column_1.parent = this.columnsContainer;\r\n column_1.virtualParent = this;\r\n }\r\n else {\r\n column_1 = dataItem.column;\r\n if (this._propertiesChanged) {\r\n $object.copyProperties(this, column_1, visualProperties);\r\n $object.copyProperties(this.columns.template, column_1, visualProperties);\r\n $array.each(visualProperties, function (property) {\r\n column_1[property] = column_1[property];\r\n });\r\n }\r\n }\r\n column_1.width = w;\r\n column_1.height = h;\r\n column_1.x = x;\r\n column_1.y = y;\r\n column_1.realX = l;\r\n column_1.realY = t;\r\n column_1.realWidth = r - l;\r\n column_1.realHeight = b - t;\r\n this.setColumnStates(column_1);\r\n if (column_1.invalid) {\r\n column_1.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n }\r\n column_1.__disabled = false;\r\n //column.returnAfterTemp();\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (!rangeColumn) {\r\n rangeColumn = _this.columns.create();\r\n //$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n $object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n dataItem.addSprite(rangeColumn);\r\n dataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n rangeColumn.paper = _this.paper; // sometimes pattern is not drawn if is set with adapter without this.\r\n }\r\n rangeColumn.parent = axisRange.contents;\r\n rangeColumn.width = w;\r\n rangeColumn.height = h;\r\n rangeColumn.x = x;\r\n rangeColumn.y = y;\r\n _this.setColumnStates(rangeColumn);\r\n if (rangeColumn.invalid) {\r\n rangeColumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n }\r\n rangeColumn.__disabled = false;\r\n //rangeColumn.returnAfterTemp();\r\n });\r\n }\r\n else {\r\n this.disableUnusedColumns(dataItem);\r\n }\r\n dataItem.itemWidth = w;\r\n dataItem.itemHeight = h;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n ColumnSeries.prototype.disableUnusedColumns = function (dataItem) {\r\n if (dataItem) {\r\n if (dataItem.column) {\r\n // otherwise might flicker when enabling\r\n dataItem.column.width = 0;\r\n dataItem.column.height = 0;\r\n dataItem.column.__disabled = true;\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (rangeColumn) {\r\n // otherwise might flicker when enabling\r\n rangeColumn.width = 0;\r\n rangeColumn.height = 0;\r\n rangeColumn.__disabled = true;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Apply different state/coloring to columns based on the change value.\r\n *\r\n * @param sprite Sprite to apply state to\r\n * @todo Do not apply accessibility to wicks of the candlesticks\r\n */\r\n ColumnSeries.prototype.setColumnStates = function (sprite) {\r\n if (this._dropFromOpenState || this._dropFromPreviousState || this._riseFromOpenState || this._riseFromPreviousState) {\r\n var dataItem = sprite.dataItem;\r\n if (this.xAxis instanceof ValueAxis || this.yAxis instanceof ValueAxis) {\r\n var open_1;\r\n var value = void 0;\r\n var change = void 0;\r\n if (this.baseAxis == this.yAxis) {\r\n if (this.xOpenField && this.xField && this.xAxis instanceof ValueAxis) {\r\n open_1 = dataItem.getValue(this.xOpenField);\r\n value = dataItem.getValue(this.xField);\r\n }\r\n change = dataItem.getValue(this.xAxis.axisFieldName + \"X\", \"previousChange\");\r\n }\r\n else {\r\n if (this.yOpenField && this.yField && this.yAxis instanceof ValueAxis) {\r\n open_1 = dataItem.getValue(this.yOpenField);\r\n value = dataItem.getValue(this.yField);\r\n }\r\n change = dataItem.getValue(this.yAxis.axisFieldName + \"Y\", \"previousChange\");\r\n }\r\n if (value < open_1) {\r\n dataItem.droppedFromOpen = true;\r\n sprite.defaultState.copyFrom(this._dropFromOpenState);\r\n sprite.setState(this._dropFromOpenState, 0);\r\n }\r\n else {\r\n dataItem.droppedFromOpen = false;\r\n sprite.defaultState.copyFrom(this._riseFromOpenState);\r\n sprite.setState(this._riseFromOpenState, 0);\r\n }\r\n if (change < 0) {\r\n dataItem.droppedFromPrevious = true;\r\n sprite.defaultState.copyFrom(this._dropFromPreviousState);\r\n sprite.setState((this._dropFromPreviousState), 0);\r\n }\r\n else {\r\n dataItem.droppedFromPrevious = false;\r\n sprite.defaultState.copyFrom(this._riseFromPreviousState);\r\n sprite.setState((this._riseFromPreviousState), 0);\r\n }\r\n }\r\n }\r\n };\r\n Object.defineProperty(ColumnSeries.prototype, \"columns\", {\r\n /**\r\n * A list of column elements in the series.\r\n *\r\n * @return Columns\r\n */\r\n get: function () {\r\n if (!this._columns) {\r\n this._columns = new ListTemplate(this.createColumnTemplate());\r\n this._disposers.push(new ListDisposer(this._columns));\r\n this._disposers.push(this._columns.template);\r\n }\r\n return this._columns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a column element to use as a template.\r\n *\r\n * @return Column template\r\n */\r\n ColumnSeries.prototype.createColumnTemplate = function () {\r\n return new Column();\r\n };\r\n Object.defineProperty(ColumnSeries.prototype, \"clustered\", {\r\n /**\r\n * @return Clustered?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"clustered\");\r\n },\r\n /**\r\n * Cluster this series columns?\r\n *\r\n * Setting to `false` will make columns overlap with other series.\r\n *\r\n * @default true\r\n * @param value Clustered?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"clustered\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries.prototype, \"dropFromOpenState\", {\r\n /**\r\n * @return State\r\n */\r\n get: function () {\r\n if (!this._dropFromOpenState) {\r\n this._dropFromOpenState = this.states.create(\"dropFromOpenState\");\r\n }\r\n return this._dropFromOpenState;\r\n },\r\n /**\r\n * A state to apply to a column when close value is lower than open value.\r\n *\r\n * Can be used to differentiate appearance based on value relations.\r\n *\r\n * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n *\r\n * @readonly You can modify state object, but can't overwrite it\r\n * @param value State\r\n */\r\n set: function (value) {\r\n this._dropFromOpenState = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries.prototype, \"dropFromPreviousState\", {\r\n /**\r\n * @return State\r\n */\r\n get: function () {\r\n if (!this._dropFromPreviousState) {\r\n this._dropFromPreviousState = this.states.create(\"dropFromPreviousState\");\r\n }\r\n return this._dropFromPreviousState;\r\n },\r\n /**\r\n * A state to apply to a column when its value is lower value of a previous\r\n * column.\r\n *\r\n * Can be used to differentiate appearance based on value relations.\r\n *\r\n * @readonly You can modify state object, but can't overwrite it\r\n * @param value State\r\n */\r\n set: function (value) {\r\n this._dropFromPreviousState = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries.prototype, \"riseFromOpenState\", {\r\n /**\r\n * @return State\r\n */\r\n get: function () {\r\n if (!this._riseFromOpenState) {\r\n this._riseFromOpenState = this.states.create(\"riseFromOpenState\");\r\n }\r\n return this._riseFromOpenState;\r\n },\r\n /**\r\n * A state to apply to a column when close value is same or higher than open\r\n * value.\r\n *\r\n * Can be used to differentiate appearance based on value relations.\r\n *\r\n * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n *\r\n * @readonly You can modify state object, but can't overwrite it\r\n * @param value State\r\n */\r\n set: function (value) {\r\n this._riseFromOpenState = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries.prototype, \"riseFromPreviousState\", {\r\n /**\r\n * @return State\r\n */\r\n get: function () {\r\n if (!this._riseFromPreviousState) {\r\n this._riseFromPreviousState = this.states.create(\"riseFromPreviousState\");\r\n }\r\n return this._riseFromPreviousState;\r\n },\r\n /**\r\n * A state to apply to a column when its value is same or higher than value\r\n * of a previous column.\r\n *\r\n * Can be used to differentiate appearance based on value relations.\r\n *\r\n * @readonly You can modify state object, but can't overwrite it\r\n * @param value State\r\n */\r\n set: function (value) {\r\n this._riseFromPreviousState = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates value of the related legend item.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ColumnSeries.prototype.updateLegendValue = function (dataItem, notRange) {\r\n var _this = this;\r\n _super.prototype.updateLegendValue.call(this, dataItem, notRange);\r\n if (this.legendDataItem) {\r\n var marker = this.legendDataItem.marker;\r\n var fromOpenState_1;\r\n var fromPreviousState_1;\r\n if (dataItem) {\r\n if (dataItem.droppedFromOpen) {\r\n fromOpenState_1 = this._dropFromOpenState;\r\n }\r\n else {\r\n fromOpenState_1 = this._riseFromOpenState;\r\n }\r\n if (dataItem.droppedFromPrevious) {\r\n fromPreviousState_1 = this._dropFromPreviousState;\r\n }\r\n else {\r\n fromPreviousState_1 = this._riseFromPreviousState;\r\n }\r\n }\r\n $iter.each(marker.children.iterator(), function (child) {\r\n if (dataItem) {\r\n child.setState(fromPreviousState_1);\r\n child.setState(fromOpenState_1);\r\n }\r\n else {\r\n // todo: think what to do here, maybe apply above states based on totals?\r\n child.setState(_this._riseFromPreviousState);\r\n child.setState(_this._riseFromOpenState);\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n ColumnSeries.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(RoundedRectangle);\r\n column.shouldClone = false;\r\n $object.copyProperties(this, column, visualProperties);\r\n column.copyFrom(this.columns.template);\r\n column.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n column.width = w;\r\n column.height = h;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = this.fill;\r\n legendDataItem.colorOrig = this.fill;\r\n };\r\n /**\r\n * Copies all properties from another instance of [[ColumnSeries]].\r\n *\r\n * @param source Source series\r\n */\r\n ColumnSeries.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.columns.template.copyFrom(source.columns.template);\r\n };\r\n /**\r\n * returns bullet x location\r\n * @ignore\r\n */\r\n ColumnSeries.prototype.getBulletLocationX = function (bullet, field) {\r\n if (this.baseAxis == this.xAxis) {\r\n var bulletLocationX = bullet.locationX;\r\n if (!$type.isNumber(bulletLocationX)) {\r\n bulletLocationX = 0.5;\r\n }\r\n var endLocation = this.getEndLocation(bullet.dataItem);\r\n var startLocation = this.getStartLocation(bullet.dataItem);\r\n return endLocation - (endLocation - startLocation) * bulletLocationX;\r\n }\r\n else {\r\n return _super.prototype.getBulletLocationX.call(this, bullet, field);\r\n }\r\n };\r\n /**\r\n * returns bullet y location\r\n * @ignore\r\n */\r\n ColumnSeries.prototype.getBulletLocationY = function (bullet, field) {\r\n if (this.baseAxis == this.yAxis) {\r\n var bulletLocationY = bullet.locationY;\r\n if (!$type.isNumber(bulletLocationY)) {\r\n bulletLocationY = 0.5;\r\n }\r\n var endLocation = this.getEndLocation(bullet.dataItem);\r\n var startLocation = this.getStartLocation(bullet.dataItem);\r\n return endLocation - (endLocation - startLocation) * bulletLocationY;\r\n }\r\n else {\r\n return _super.prototype.getBulletLocationY.call(this, bullet, field);\r\n }\r\n };\r\n ColumnSeries.prototype.getAdjustedXLocation = function (dataItem, field, bulletLocationX) {\r\n //if (this.baseAxis == this.xAxis) {\r\n if (!$type.isNumber(bulletLocationX)) {\r\n if (dataItem) {\r\n bulletLocationX = dataItem.locations[field];\r\n }\r\n else {\r\n bulletLocationX = 0.5;\r\n }\r\n }\r\n return this._endLocation - (this._endLocation - this._startLocation) * (1 - bulletLocationX);\r\n //}\r\n //else {\r\n //\treturn super.getAdjustedXLocation(dataItem, field);\r\n //}\r\n };\r\n ColumnSeries.prototype.getAdjustedYLocation = function (dataItem, field, bulletLocationY) {\r\n //if (this.baseAxis == this.yAxis) {\r\n if (!$type.isNumber(bulletLocationY)) {\r\n if (dataItem) {\r\n bulletLocationY = dataItem.locations[field];\r\n }\r\n else {\r\n bulletLocationY = 0.5;\r\n }\r\n }\r\n return this._endLocation - (this._endLocation - this._startLocation) * bulletLocationY;\r\n //}\r\n //else {\r\n //\treturn super.getAdjustedYLocation(dataItem, field);\r\n //}\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n ColumnSeries.prototype.fixVerticalCoordinate = function (coordinate) {\r\n var paddingBottom = this.columns.template.pixelPaddingBottom;\r\n var paddingTop = this.columns.template.pixelPaddingTop;\r\n var minY = -paddingTop;\r\n var maxY = this.yAxis.axisLength + paddingBottom;\r\n return $math.fitToRange(coordinate, minY, maxY);\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n ColumnSeries.prototype.fixHorizontalCoordinate = function (coordinate) {\r\n var paddingLeft = this.columns.template.pixelPaddingLeft;\r\n var paddingRight = this.columns.template.pixelPaddingRight;\r\n var minX = -paddingLeft;\r\n var maxX = this.xAxis.axisLength + paddingRight;\r\n return $math.fitToRange(coordinate, minX, maxX);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n ColumnSeries.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this.columns.clear();\r\n };\r\n return ColumnSeries;\r\n}(XYSeries));\r\nexport { ColumnSeries };\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//# sourceMappingURL=ColumnSeries.js.map","/**\r\n * TreeMap series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMapSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar TreeMapSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(TreeMapSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TreeMapSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"TreeMapSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(TreeMapSeriesDataItem.prototype, \"parentName\", {\r\n /**\r\n * Data for the this particular item.\r\n *\r\n * @param value Item's data\r\n */\r\n //public set dataContext(value: Object) {\r\n //\tthis._dataContext = value;\r\n //}\r\n /**\r\n * @return Item's data\r\n */\r\n /*\r\n public get dataContext(): Object {\r\n // It's because data of tree series is TreeMapDataItems.\r\n if (this._dataContext) {\r\n return (this._dataContext).dataContext;\r\n }\r\n }*/\r\n /**\r\n * The name of the item's parent item.\r\n *\r\n * @return Parent name\r\n */\r\n get: function () {\r\n var treeMapDataItem = this.treeMapDataItem;\r\n if (treeMapDataItem && treeMapDataItem.parent) {\r\n return treeMapDataItem.parent.name;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapSeriesDataItem.prototype, \"value\", {\r\n /**\r\n * Item's numeric value.\r\n *\r\n * @readonly\r\n * @return Value\r\n */\r\n get: function () {\r\n var treeMapDataItem = this.treeMapDataItem;\r\n if (treeMapDataItem) {\r\n return treeMapDataItem.value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapSeriesDataItem.prototype, \"treeMapDataItem\", {\r\n /**\r\n * A corresponding data item from the tree map.\r\n *\r\n * @readonly\r\n * @return Data item\r\n */\r\n get: function () {\r\n return this._dataContext;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Hides the Data Item and related visual elements.\r\n *\r\n * @param duration Animation duration (ms)\r\n * @param delay Delay animation (ms)\r\n * @param toValue A value to set to `fields` when hiding\r\n * @param fields A list of data fields to set value to `toValue`\r\n */\r\n TreeMapSeriesDataItem.prototype.hide = function (duration, delay, toValue, fields) {\r\n var treeMapDataItem = this.treeMapDataItem;\r\n if (treeMapDataItem) {\r\n treeMapDataItem.hide(duration);\r\n }\r\n return _super.prototype.hide.call(this, duration, delay, toValue, fields);\r\n };\r\n /**\r\n * Shows the Data Item and related visual elements.\r\n *\r\n * @param duration Animation duration (ms)\r\n * @param delay Delay animation (ms)\r\n * @param fields A list of fields to set values of\r\n */\r\n TreeMapSeriesDataItem.prototype.show = function (duration, delay, fields) {\r\n var treeMapDataItem = this.treeMapDataItem;\r\n if (treeMapDataItem) {\r\n treeMapDataItem.show(duration, delay, fields);\r\n }\r\n return _super.prototype.show.call(this, duration, delay, fields);\r\n };\r\n return TreeMapSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { TreeMapSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar TreeMapSeries = /** @class */ (function (_super) {\r\n __extends(TreeMapSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TreeMapSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"TreeMapSeries\";\r\n _this.applyTheme();\r\n _this.fillOpacity = 1;\r\n _this.strokeOpacity = 1;\r\n _this.minBulletDistance = 0;\r\n _this.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n _this.columns.template.configField = \"config\";\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.stroke = interfaceColors.getFor(\"background\");\r\n _this.dataFields.openValueX = \"x0\";\r\n _this.dataFields.valueX = \"x1\";\r\n _this.dataFields.openValueY = \"y0\";\r\n _this.dataFields.valueY = \"y1\";\r\n _this.sequencedInterpolation = false;\r\n _this.showOnInit = false;\r\n // otherwise nodes don't stack nicely to each other\r\n _this.columns.template.pixelPerfect = false;\r\n return _this;\r\n }\r\n /**\r\n * Processes data item.\r\n *\r\n * @param dataItem Data item\r\n * @param dataContext Raw data\r\n * @param index Index of the data item\r\n */\r\n TreeMapSeries.prototype.processDataItem = function (dataItem, dataContext) {\r\n dataContext.seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n _super.prototype.processDataItem.call(this, dataItem, dataContext);\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n TreeMapSeries.prototype.createDataItem = function () {\r\n return new TreeMapSeriesDataItem();\r\n };\r\n /**\r\n * Shows series.\r\n *\r\n * @param duration Duration of fade in (ms)\r\n * @return Animation\r\n */\r\n TreeMapSeries.prototype.show = function (duration) {\r\n if (this.preventShow) {\r\n return;\r\n }\r\n var interpolationDuration = this.defaultState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n this.dataItems.each(function (dataItem) {\r\n //dataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n dataItem.show(duration);\r\n });\r\n return _super.prototype.showReal.call(this, interpolationDuration);\r\n };\r\n /**\r\n * Hides series.\r\n *\r\n * @param duration Duration of fade out (ms)\r\n * @return Animation\r\n */\r\n TreeMapSeries.prototype.hide = function (duration) {\r\n var interpolationDuration = this.defaultState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n var animation = _super.prototype.hideReal.call(this, interpolationDuration);\r\n this.dataItems.each(function (dataItem) {\r\n //dataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n dataItem.hide(duration);\r\n });\r\n return animation;\r\n };\r\n /**\r\n * Process values.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n TreeMapSeries.prototype.processValues = function () {\r\n // Just overriding so that inherited method does not kick in.\r\n };\r\n /**\r\n * Returns relative start location for the data item.\r\n *\r\n * @param dataItem Data item\r\n * @return Location (0-1)\r\n */\r\n TreeMapSeries.prototype.getStartLocation = function (dataItem) {\r\n return 0;\r\n };\r\n /**\r\n * Returns relative end location for the data item.\r\n *\r\n * @param dataItem Data item\r\n * @return Location (0-1)\r\n */\r\n TreeMapSeries.prototype.getEndLocation = function (dataItem) {\r\n return 1;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n TreeMapSeries.prototype.dataChangeUpdate = function () {\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n TreeMapSeries.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Add empty data fields if the they are not set, so that XYSeries\r\n // dataField check does not result in error.\r\n if (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n config.dataFields = {};\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n TreeMapSeries.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(RoundedRectangle);\r\n column.shouldClone = false;\r\n $object.copyProperties(this, column, visualProperties);\r\n //column.copyFrom(this.columns.template);\r\n column.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n column.width = w;\r\n column.height = h;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = column.fill;\r\n legendDataItem.colorOrig = column.fill;\r\n };\r\n TreeMapSeries.prototype.disableUnusedColumns = function (dataItem) {\r\n _super.prototype.disableUnusedColumns.call(this, dataItem);\r\n if (dataItem.column) {\r\n dataItem.column.__disabled = false;\r\n }\r\n };\r\n return TreeMapSeries;\r\n}(ColumnSeries));\r\nexport { TreeMapSeries };\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//# sourceMappingURL=TreeMapSeries.js.map","/**\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\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, XYChartDataItem } from \"./XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { TreeMapSeries } from \"../series/TreeMapSeries\";\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 * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar TreeMapDataItem = /** @class */ (function (_super) {\r\n __extends(TreeMapDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TreeMapDataItem() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Required for squarify functionality.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n _this.rows = [];\r\n _this.className = \"TreeMapDataItem\";\r\n _this.values.value = { workingValue: 0 };\r\n _this.values.x0 = {};\r\n _this.values.y0 = {};\r\n _this.values.x1 = {};\r\n _this.values.y1 = {};\r\n _this.hasChildren.children = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(TreeMapDataItem.prototype, \"legendDataItem\", {\r\n /**\r\n * @return Legend data item\r\n */\r\n get: function () {\r\n return this._legendDataItem;\r\n },\r\n /**\r\n * A legend's data item, that corresponds to this data item.\r\n *\r\n * @param value Legend data item\r\n */\r\n set: function (value) {\r\n this._legendDataItem = value;\r\n if (value.label) {\r\n value.label.dataItem = this;\r\n }\r\n if (value.valueLabel) {\r\n value.valueLabel.dataItem = this;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a duration (ms) the Data Item should take to animate from one\r\n * value to another.\r\n *\r\n * If the duration is not specified via parameter, this method will try to\r\n * request a default duration from the related `Component`.\r\n *\r\n * @param duration Default duration (ms)\r\n * @return Duration (ms)\r\n */\r\n TreeMapDataItem.prototype.getDuration = function () {\r\n return 0;\r\n };\r\n Object.defineProperty(TreeMapDataItem.prototype, \"value\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n var value = 0;\r\n if (!this.children || this.children.length == 0) {\r\n value = this.values[\"value\"].workingValue;\r\n }\r\n else {\r\n $iter.each(this.children.iterator(), function (child) {\r\n var childValue = child.value;\r\n if ($type.isNumber(childValue)) {\r\n value += childValue;\r\n }\r\n });\r\n }\r\n return value;\r\n /*\r\n let value = this.values[\"value\"].workingValue;\r\n \r\n if (!$type.isNumber(value)) {\r\n value = 0;\r\n if (this.children) {\r\n $iter.each(this.children.iterator(), (child) => {\r\n if ($type.isNumber(child.value)) {\r\n value += child.value;\r\n }\r\n });\r\n }\r\n }\r\n return value;*/\r\n },\r\n /**\r\n * Numeric value of the item.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"value\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"percent\", {\r\n /**\r\n * Percent value of a node\r\n */\r\n get: function () {\r\n if (this.parent) {\r\n return this.value / this.parent.value * 100;\r\n }\r\n return 100;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"x0\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n return this.values.x0.value;\r\n },\r\n /**\r\n * Item's X position.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param value X\r\n */\r\n set: function (value) {\r\n this.setValue(\"x0\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"x1\", {\r\n /**\r\n * @return X\r\n */\r\n get: function () {\r\n return this.values.x1.value;\r\n },\r\n /**\r\n * Item's X position.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param value X\r\n */\r\n set: function (value) {\r\n this.setValue(\"x1\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"y0\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.values.y0.value;\r\n },\r\n /**\r\n * Item's Y position.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n this.setValue(\"y0\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"y1\", {\r\n /**\r\n * @return Y\r\n */\r\n get: function () {\r\n return this.values.y1.value;\r\n },\r\n /**\r\n * Item's Y position.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description (review)\r\n * @param value Y\r\n */\r\n set: function (value) {\r\n this.setValue(\"y1\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"name\", {\r\n /**\r\n * @return Name\r\n */\r\n get: function () {\r\n return this.properties.name;\r\n },\r\n /**\r\n * Item's name.\r\n *\r\n * @param name Name\r\n */\r\n set: function (name) {\r\n this.setProperty(\"name\", name);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"children\", {\r\n /**\r\n * @return Item's children\r\n */\r\n get: function () {\r\n return this.properties.children;\r\n },\r\n /**\r\n * A list of item's sub-children.\r\n *\r\n * Having children means that the TreeMap chat will automatically be\r\n * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n * display its children.\r\n *\r\n * Treemap can have any level of nesting.\r\n *\r\n * @param children Item's children\r\n */\r\n set: function (children) {\r\n this.setProperty(\"children\", children);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"level\", {\r\n /**\r\n * Depth level in the treemap hierarchy.\r\n *\r\n * The top-level item will have level set at 0. Its children will have\r\n * level 1, and so on.\r\n *\r\n * @readonly\r\n * @return Level\r\n */\r\n get: function () {\r\n if (!this.parent) {\r\n return 0;\r\n }\r\n else {\r\n return this.parent.level + 1;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"color\", {\r\n /**\r\n * @return Color\r\n */\r\n get: function () {\r\n var color = this.properties.color;\r\n if (color == undefined) {\r\n if (this.parent) {\r\n color = this.parent.color;\r\n }\r\n }\r\n if (color == undefined) {\r\n if (this.component) {\r\n color = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n }\r\n }\r\n return color;\r\n },\r\n /**\r\n * Item's color.\r\n *\r\n * If not set, will use parent's color, or, if that is not set either,\r\n * automatically assigned color from chart's color set. (`chart.colors`)\r\n *\r\n * @param value Color\r\n */\r\n set: function (value) {\r\n this.setProperty(\"color\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"fill\", {\r\n /**\r\n * @ignore\r\n * For the legend to work properly\r\n */\r\n get: function () {\r\n return this.color;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMapDataItem.prototype, \"series\", {\r\n get: function () {\r\n return this._series;\r\n },\r\n /**\r\n * Series of children data items\r\n * @todo: proper descrition\r\n */\r\n set: function (series) {\r\n if (series != this._series) {\r\n if (this._series) {\r\n this.component.series.removeValue(this._series);\r\n this._series.dispose();\r\n }\r\n this._series = series;\r\n this._disposers.push(series);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Hides the Data Item and related visual elements.\r\n *\r\n * @param duration Animation duration (ms)\r\n * @param delay Delay animation (ms)\r\n * @param toValue A value to set to `fields` when hiding\r\n * @param fields A list of data fields to set value to `toValue`\r\n */\r\n TreeMapDataItem.prototype.hide = function (duration, delay, toValue, fields) {\r\n this.setWorkingValue(\"value\", 0);\r\n if (this.children) {\r\n this.children.each(function (child) {\r\n child.hide(duration, delay, toValue, fields);\r\n });\r\n }\r\n var seriesDataItem = this.seriesDataItem;\r\n if (seriesDataItem) {\r\n seriesDataItem.bullets.each(function (key, value) {\r\n value.hide();\r\n value.preventShow = true;\r\n });\r\n }\r\n return _super.prototype.hide.call(this, duration, delay, toValue, fields);\r\n };\r\n /**\r\n * Shows the Data Item and related visual elements.\r\n *\r\n * @param duration Animation duration (ms)\r\n * @param delay Delay animation (ms)\r\n * @param fields A list of fields to set values of\r\n */\r\n TreeMapDataItem.prototype.show = function (duration, delay, fields) {\r\n this.setWorkingValue(\"value\", this.values.value.value);\r\n if (this.children) {\r\n this.children.each(function (child) {\r\n child.show(duration, delay, fields);\r\n });\r\n }\r\n var seriesDataItem = this.seriesDataItem;\r\n if (seriesDataItem) {\r\n seriesDataItem.bullets.each(function (key, value) {\r\n value.preventShow = false;\r\n });\r\n }\r\n return _super.prototype.show.call(this, duration, delay, fields);\r\n };\r\n return TreeMapDataItem;\r\n}(XYChartDataItem));\r\nexport { TreeMapDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar TreeMap = /** @class */ (function (_super) {\r\n __extends(TreeMap, _super);\r\n /**\r\n * Constructor\r\n */\r\n function TreeMap() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * An algorithm used to divide area into squares based on their value.\r\n *\r\n * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n *\r\n * ```TypeScript\r\n * chart.layoutAlgorithm = chart.sliceDice;\r\n * ```\r\n * ```JavaScript\r\n * chart.layoutAlgorithm = chart.sliceDice;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"layoutAlgorithm\": \"sliceDice\",\r\n * // ...\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n * @default squarify\r\n */\r\n _this.layoutAlgorithm = _this.squarify;\r\n /**\r\n * Is the chart zoomable?\r\n *\r\n * If the chart is `zoomable`, and items have sub-items, the chart will\r\n * drill-down to sub-items when click on their parent item.\r\n *\r\n * @default true\r\n */\r\n _this.zoomable = true;\r\n _this.className = \"TreeMap\";\r\n _this._usesData = true;\r\n _this.maxLevels = 2;\r\n _this.currentLevel = 0;\r\n _this.hideParentColumns = false;\r\n _this.colors = new ColorSet();\r\n _this.sorting = \"descending\";\r\n // create two value axes for the chart\r\n var xAxis = _this.xAxes.push(new ValueAxis());\r\n xAxis.title.disabled = true;\r\n xAxis.strictMinMax = true;\r\n var xRenderer = xAxis.renderer;\r\n xRenderer.inside = true;\r\n xRenderer.labels.template.disabled = true;\r\n xRenderer.ticks.template.disabled = true;\r\n xRenderer.grid.template.disabled = true;\r\n xRenderer.axisFills.template.disabled = true;\r\n xRenderer.minGridDistance = 100;\r\n xRenderer.line.disabled = true;\r\n xRenderer.baseGrid.disabled = true;\r\n //xRenderer.inversed = true;\r\n var yAxis = _this.yAxes.push(new ValueAxis());\r\n yAxis.title.disabled = true;\r\n yAxis.strictMinMax = true;\r\n var yRenderer = yAxis.renderer;\r\n yRenderer.inside = true;\r\n yRenderer.labels.template.disabled = true;\r\n yRenderer.ticks.template.disabled = true;\r\n yRenderer.grid.template.disabled = true;\r\n yRenderer.axisFills.template.disabled = true;\r\n yRenderer.minGridDistance = 100;\r\n yRenderer.line.disabled = true;\r\n yRenderer.baseGrid.disabled = true;\r\n yRenderer.inversed = true;\r\n // shortcuts\r\n _this.xAxis = xAxis;\r\n _this.yAxis = yAxis;\r\n var template = new TreeMapSeries();\r\n _this.seriesTemplates = new DictionaryTemplate(template);\r\n template.virtualParent = _this;\r\n _this._disposers.push(new DictionaryDisposer(_this.seriesTemplates));\r\n _this._disposers.push(template);\r\n _this.zoomOutButton.events.on(\"hit\", function () {\r\n _this.zoomToChartDataItem(_this._homeDataItem);\r\n }, undefined, false);\r\n _this.seriesTemplates.events.on(\"insertKey\", function (event) {\r\n event.newValue.isTemplate = true;\r\n }, undefined, false);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(TreeMap.prototype, \"navigationBar\", {\r\n /**\r\n * Returns navigationBar if it is added to a chart\r\n */\r\n get: function () {\r\n return this._navigationBar;\r\n },\r\n /**\r\n * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n * drill-down path.\r\n */\r\n set: function (navigationBar) {\r\n var _this = this;\r\n if (this._navigationBar != navigationBar) {\r\n this._navigationBar = navigationBar;\r\n navigationBar.parent = this;\r\n navigationBar.toBack();\r\n navigationBar.links.template.events.on(\"hit\", function (event) {\r\n var dataItem = event.target.dataItem.dataContext;\r\n if (!dataItem.isDisposed()) {\r\n _this.zoomToChartDataItem(dataItem);\r\n _this.createTreeSeries(dataItem);\r\n }\r\n }, undefined, true);\r\n this._disposers.push(navigationBar);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * (Re)validates chart's data.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n TreeMap.prototype.validateData = function () {\r\n this.series.clear();\r\n this._tempSeries = [];\r\n _super.prototype.validateData.call(this);\r\n if (this._homeDataItem) {\r\n this._homeDataItem.dispose();\r\n }\r\n var homeDataItem = this.dataItems.template.clone(); // cant' use createDataItem here!\r\n this._homeDataItem = homeDataItem;\r\n $iter.each(this.dataItems.iterator(), function (dataItem) {\r\n dataItem.parent = homeDataItem;\r\n });\r\n homeDataItem.children = this.dataItems;\r\n homeDataItem.x0 = 0;\r\n homeDataItem.y0 = 0;\r\n homeDataItem.name = this._homeText;\r\n var maxX = 1000;\r\n var maxY = Math.round((maxX * this.pixelHeight / this.pixelWidth) / 10) * 10 || 1000;\r\n homeDataItem.x1 = maxX;\r\n homeDataItem.y1 = maxY;\r\n this.xAxis.min = 0;\r\n this.xAxis.max = maxX;\r\n this.xAxis.getMinMax();\r\n this.yAxis.min = 0;\r\n this.yAxis.max = maxY;\r\n this.yAxis.getMinMax();\r\n this.layoutItems(homeDataItem);\r\n this.createTreeSeries(homeDataItem);\r\n this.feedLegend();\r\n };\r\n /**\r\n * Layouts and sizes all items according to their value and\r\n * `layoutAlgorithm`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Parent data item\r\n */\r\n TreeMap.prototype.layoutItems = function (parent, sorting) {\r\n if (parent) {\r\n var children = parent.children;\r\n if (!sorting) {\r\n sorting = this.sorting;\r\n }\r\n if (sorting == \"ascending\") {\r\n children.values.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n }\r\n if (sorting == \"descending\") {\r\n children.values.sort(function (a, b) {\r\n return b.value - a.value;\r\n });\r\n }\r\n this._updateDataItemIndexes(0);\r\n this.layoutAlgorithm(parent);\r\n for (var i = 0, len = children.length; i < len; i++) {\r\n var node = children.getIndex(i);\r\n if (node.children) {\r\n this.layoutItems(node);\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Creates and returns a new treemap series.\r\n *\r\n * @todo Description\r\n * @param dataItem Data item to create series out of\r\n */\r\n TreeMap.prototype.createTreeSeries = function (dataItem) {\r\n var _this = this;\r\n this._tempSeries = [];\r\n var navigationData = [dataItem];\r\n // create parent series and navigation data\r\n var parentDataItem = dataItem.parent;\r\n while (parentDataItem != undefined) {\r\n this.initSeries(parentDataItem);\r\n navigationData.push(parentDataItem);\r\n parentDataItem = parentDataItem.parent;\r\n }\r\n navigationData.reverse();\r\n if (this.navigationBar) {\r\n this.navigationBar.data = navigationData;\r\n }\r\n // create series and children series\r\n this.createTreeSeriesReal(dataItem);\r\n // add those which are not in the list\r\n $array.each(this._tempSeries, function (series) {\r\n if (_this.series.indexOf(series) == -1) {\r\n _this.series.push(series);\r\n }\r\n series.zIndex = series.level;\r\n });\r\n };\r\n /**\r\n * [createTreeSeriesReal description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n */\r\n TreeMap.prototype.createTreeSeriesReal = function (dataItem) {\r\n if (dataItem.children) {\r\n var level = dataItem.level;\r\n if (level < this.currentLevel + this.maxLevels) {\r\n this.initSeries(dataItem);\r\n for (var i = 0; i < dataItem.children.length; i++) {\r\n var child = dataItem.children.getIndex(i);\r\n if (child.children) {\r\n this.createTreeSeriesReal(child);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n TreeMap.prototype.setData = function (value) {\r\n this.currentLevel = 0;\r\n this.currentlyZoomed = undefined;\r\n this.xAxis.start = 0;\r\n this.xAxis.end = 1;\r\n this.yAxis.start = 0;\r\n this.yAxis.end = 1;\r\n _super.prototype.setData.call(this, value);\r\n };\r\n /**\r\n * @ignore\r\n * Overriding, as tree map series are created on the fly all the time\r\n */\r\n TreeMap.prototype.seriesAppeared = function () {\r\n return true;\r\n };\r\n /**\r\n * Initializes the treemap series.\r\n *\r\n * @todo Description\r\n * @param dataItem Chart data item\r\n */\r\n TreeMap.prototype.initSeries = function (dataItem) {\r\n var _this = this;\r\n if (!dataItem.series) {\r\n var series = void 0;\r\n var template = this.seriesTemplates.getKey(dataItem.level.toString());\r\n if (template) {\r\n series = template.clone();\r\n }\r\n else {\r\n series = this.series.create();\r\n }\r\n // for the legend to get {value}\r\n series.dataItem.dataContext = dataItem;\r\n series.name = dataItem.name;\r\n series.parentDataItem = dataItem;\r\n dataItem.series = series;\r\n var level = dataItem.level;\r\n series.level = level;\r\n var dataContext = dataItem.dataContext;\r\n if (dataContext) {\r\n series.config = dataContext.config;\r\n }\r\n this.dataUsers.removeValue(series); // series do not use data directly, that's why we remove it\r\n series.data = dataItem.children.values;\r\n series.fill = dataItem.color;\r\n series.columnsContainer.hide(0);\r\n series.bulletsContainer.hide(0);\r\n series.columns.template.adapter.add(\"fill\", function (fill, target) {\r\n var dataItem = target.dataItem;\r\n if (dataItem) {\r\n var treeMapDataItem = dataItem.treeMapDataItem;\r\n if (treeMapDataItem) {\r\n target.fill = treeMapDataItem.color;\r\n target.adapter.remove(\"fill\"); //@todo: make it possible adapters applied once?\r\n return treeMapDataItem.color;\r\n }\r\n }\r\n });\r\n if (this.zoomable && (dataItem.level > this.currentLevel || (dataItem.children && dataItem.children.length > 0))) {\r\n series.columns.template.cursorOverStyle = MouseCursorStyle.pointer;\r\n if (this.zoomable) {\r\n series.columns.template.events.on(\"hit\", function (event) {\r\n var seriesDataItem = event.target.dataItem;\r\n if (dataItem.level > _this.currentLevel) {\r\n _this.zoomToChartDataItem(seriesDataItem.treeMapDataItem.parent);\r\n }\r\n else {\r\n _this.zoomToSeriesDataItem(seriesDataItem);\r\n }\r\n }, this, undefined);\r\n }\r\n }\r\n }\r\n this._tempSeries.push(dataItem.series);\r\n };\r\n /**\r\n * Toggles bullets so that labels that belong to current drill level are\r\n * shown.\r\n *\r\n * @param duration Animation duration (ms)\r\n */\r\n TreeMap.prototype.toggleBullets = function (duration) {\r\n var _this = this;\r\n // hide all series which are not in tempSeries\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (_this._tempSeries.indexOf(series) == -1) {\r\n //series.hideReal(duration);\r\n series.columnsContainer.hide();\r\n series.bulletsContainer.hide(duration);\r\n }\r\n else {\r\n //series.showReal(duration);\r\n series.columnsContainer.show();\r\n series.bulletsContainer.show(duration);\r\n series.dataItems.each(function (dataItem) {\r\n dataItem.bullets.each(function (key, bullet) {\r\n bullet.show();\r\n });\r\n });\r\n if (series.level < _this.currentLevel) {\r\n if (_this.hideParentColumns) {\r\n series.columnsContainer.hide();\r\n }\r\n series.bulletsContainer.hide(duration);\r\n }\r\n else if (series.level == _this.currentLevel) {\r\n if (_this.maxLevels > 1) {\r\n series.dataItems.each(function (dataItem) {\r\n if (dataItem.treeMapDataItem.children) {\r\n dataItem.bullets.each(function (key, bullet) {\r\n bullet.hide();\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n });\r\n };\r\n /**\r\n * Zooms to particular item in series.\r\n *\r\n * @param dataItem Data item\r\n */\r\n TreeMap.prototype.zoomToSeriesDataItem = function (dataItem) {\r\n this.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n };\r\n /**\r\n * Zooms to particular item. If dataItem is not specified, the chart will zoom-out.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n TreeMap.prototype.zoomToChartDataItem = function (dataItem) {\r\n var _this = this;\r\n if (!dataItem) {\r\n dataItem = this._homeDataItem;\r\n }\r\n var zoomOutButton = this.zoomOutButton;\r\n // this is needed because if there is only one fist level, it won't be shown\r\n if (zoomOutButton) {\r\n if (dataItem != this._homeDataItem) {\r\n zoomOutButton.show();\r\n }\r\n else {\r\n zoomOutButton.hide();\r\n }\r\n }\r\n if (dataItem && dataItem.children) {\r\n this.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n this.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n this.currentLevel = dataItem.level;\r\n this.currentlyZoomed = dataItem;\r\n this.createTreeSeries(dataItem);\r\n var rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n if (rangeChangeAnimation && !rangeChangeAnimation.isDisposed() && !rangeChangeAnimation.isFinished()) {\r\n this._dataDisposers.push(rangeChangeAnimation);\r\n rangeChangeAnimation.events.once(\"animationended\", function () {\r\n _this.toggleBullets();\r\n });\r\n }\r\n else {\r\n this.toggleBullets();\r\n }\r\n }\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n TreeMap.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n // Add a default screen reader title for accessibility\r\n // This will be overridden in screen reader if there are any `titles` set\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"TreeMap chart\");\r\n }\r\n //this.homeText = this.language.translate(\"Home\");\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n TreeMap.prototype.createDataItem = function () {\r\n return new TreeMapDataItem();\r\n };\r\n Object.defineProperty(TreeMap.prototype, \"maxLevels\", {\r\n /**\r\n * @return Maximum drill-down level\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxLevels\");\r\n },\r\n /**\r\n * Maximum number of levels the chart will display initially.\r\n *\r\n * @default 2\r\n * @param value Maximum drill-down level\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maxLevels\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMap.prototype, \"currentLevel\", {\r\n /**\r\n * @return Current level\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"currentLevel\");\r\n },\r\n /**\r\n * Current drill-down level the chart is at.\r\n *\r\n * @param value Current level\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"currentLevel\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMap.prototype, \"hideParentColumns\", {\r\n /**\r\n * @return Hide?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"hideParentColumns\");\r\n },\r\n /**\r\n * If set to `true`, columns of parent nodes will be hidden when user\r\n * drills-down into deeper levels.\r\n *\r\n * @sice 4.7.4\r\n * @default false\r\n * @param value Hide?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"hideParentColumns\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TreeMap.prototype, \"sorting\", {\r\n get: function () {\r\n return this.getPropertyValue(\"sorting\");\r\n },\r\n /**\r\n * Sorting direction of treemap items.\r\n *\r\n * Available options: \"none\", \"ascending\", and \"descending\" (default).\r\n *\r\n * @default \"descending\"\r\n * @param value [description]\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"sorting\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Creates and returns a new series of the suitable type.\r\n *\r\n * @return new series\r\n */\r\n TreeMap.prototype.createSeries = function () {\r\n return new TreeMapSeries();\r\n };\r\n Object.defineProperty(TreeMap.prototype, \"homeText\", {\r\n /**\r\n * @return Home text\r\n */\r\n get: function () {\r\n return this._homeText;\r\n },\r\n /**\r\n * A text displayed on the \"home\" button which is used to go back to level 0\r\n * after drill into sub-items.\r\n *\r\n * @param value Home text\r\n */\r\n set: function (value) {\r\n this._homeText = value;\r\n if (this._homeDataItem) {\r\n this._homeDataItem.name = this._homeText;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n TreeMap.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Instantiate layout algorithm\r\n if ($type.hasValue(config[\"layoutAlgorithm\"]) && $type.isString(config[\"layoutAlgorithm\"])) {\r\n switch (config[\"layoutAlgorithm\"]) {\r\n case \"squarify\":\r\n config[\"layoutAlgorithm\"] = this.squarify;\r\n break;\r\n case \"binaryTree\":\r\n config[\"layoutAlgorithm\"] = this.binaryTree;\r\n break;\r\n case \"slice\":\r\n config[\"layoutAlgorithm\"] = this.slice;\r\n break;\r\n case \"dice\":\r\n config[\"layoutAlgorithm\"] = this.dice;\r\n break;\r\n case \"sliceDice\":\r\n config[\"layoutAlgorithm\"] = this.sliceDice;\r\n break;\r\n default:\r\n delete config[\"layoutAlgorithm\"];\r\n break;\r\n }\r\n }\r\n // Set type for navigation bar\r\n if ($type.hasValue(config.navigationBar) && !$type.hasValue(config.navigationBar.type)) {\r\n config.navigationBar.type = \"NavigationBar\";\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n }\r\n };\r\n /**\r\n * Measures the size of container and informs its children of how much size\r\n * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n * properties.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n TreeMap.prototype.validateLayout = function () {\r\n _super.prototype.validateLayout.call(this);\r\n this.layoutItems(this.currentlyZoomed);\r\n };\r\n /**\r\n * Validates (processes) data items.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n TreeMap.prototype.validateDataItems = function () {\r\n _super.prototype.validateDataItems.call(this);\r\n this.layoutItems(this._homeDataItem);\r\n $iter.each(this.series.iterator(), function (series) {\r\n series.validateRawData();\r\n });\r\n this.zoomToChartDataItem(this._homeDataItem);\r\n };\r\n /**\r\n * ==========================================================================\r\n * TREEMAP LAYOUT FUNCTIONS\r\n * ==========================================================================\r\n * @hidden\r\n */\r\n /**\r\n * The functions below are from D3.js library (https://d3js.org/)\r\n *\r\n * --------------------------------------------------------------------------\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright\r\n * notice,this list of conditions and the following disclaimer in the\r\n * documentation and/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n * contributors may be used to endorse or promote products derived from\r\n * this software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * --------------------------------------------------------------------------\r\n * @hidden\r\n */\r\n /**\r\n * Treemap layout algorithm: binaryTree.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.binaryTree = function (parent) {\r\n var nodes = parent.children, i, n = nodes.length, sum, sums = new Array(n + 1);\r\n for (sums[0] = sum = i = 0; i < n; ++i) {\r\n sums[i + 1] = sum += nodes.getIndex(i).value;\r\n }\r\n if (n > 0) {\r\n partition(0, n, parent.value, parent.x0, parent.y0, parent.x1, parent.y1);\r\n }\r\n function partition(i, j, value, x0, y0, x1, y1) {\r\n if (i >= j - 1) {\r\n var node = nodes.getIndex(i);\r\n node.x0 = x0;\r\n node.y0 = y0;\r\n node.x1 = x1;\r\n node.y1 = y1;\r\n return;\r\n }\r\n var valueOffset = sums[i], valueTarget = (value / 2) + valueOffset, k = i + 1, hi = j - 1;\r\n while (k < hi) {\r\n var mid = k + hi >>> 1;\r\n if (sums[mid] < valueTarget) {\r\n k = mid + 1;\r\n }\r\n else {\r\n hi = mid;\r\n }\r\n }\r\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) {\r\n --k;\r\n }\r\n var valueLeft = sums[k] - valueOffset, valueRight = value - valueLeft;\r\n if (value == 0) {\r\n var node = nodes.getIndex(i);\r\n node.x0 = x0;\r\n node.y0 = y0;\r\n node.x1 = x1;\r\n node.y1 = y1;\r\n return;\r\n }\r\n if ((x1 - x0) > (y1 - y0)) {\r\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\r\n partition(i, k, valueLeft, x0, y0, xk, y1);\r\n partition(k, j, valueRight, xk, y0, x1, y1);\r\n }\r\n else {\r\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\r\n partition(i, k, valueLeft, x0, y0, x1, yk);\r\n partition(k, j, valueRight, x0, yk, x1, y1);\r\n }\r\n }\r\n };\r\n /**\r\n * Treemap layout algorithm: slice.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.slice = function (parent) {\r\n var x0 = parent.x0;\r\n var x1 = parent.x1;\r\n var y0 = parent.y0;\r\n var y1 = parent.y1;\r\n var nodes = parent.children;\r\n var node;\r\n var i = -1;\r\n var n = nodes.length;\r\n var k = parent.value && (y1 - y0) / parent.value;\r\n while (++i < n) {\r\n node = nodes.getIndex(i);\r\n node.x0 = x0;\r\n node.x1 = x1;\r\n node.y0 = y0;\r\n y0 += node.value * k;\r\n node.y1 = y0;\r\n }\r\n };\r\n /**\r\n * Treemap layout algorithm: dice.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.dice = function (parent) {\r\n var x0 = parent.x0;\r\n var x1 = parent.x1;\r\n var y0 = parent.y0;\r\n var y1 = parent.y1;\r\n var nodes = parent.children, node, i = -1, n = nodes.length, k = parent.value && (x1 - x0) / parent.value;\r\n while (++i < n) {\r\n node = nodes.getIndex(i);\r\n node.y0 = y0;\r\n node.y1 = y1;\r\n node.x0 = x0;\r\n x0 += node.value * k;\r\n node.x1 = x0;\r\n }\r\n };\r\n /**\r\n * Treemap layout algorithm: slideDice.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.sliceDice = function (parent) {\r\n if (parent.level & 1) {\r\n this.slice(parent);\r\n }\r\n else {\r\n this.dice(parent);\r\n }\r\n };\r\n /**\r\n * Treemap layout algorithm: squarify.\r\n *\r\n * @ignore Exclude from docs\r\n * @param parent Data item\r\n */\r\n TreeMap.prototype.squarify = function (parent) {\r\n var ratio = (1 + Math.sqrt(5)) / 2;\r\n var x0 = parent.x0;\r\n var x1 = parent.x1;\r\n var y0 = parent.y0;\r\n var y1 = parent.y1;\r\n var nodes = parent.children;\r\n var nodeValue;\r\n var i0 = 0;\r\n var i1 = 0;\r\n var n = nodes.length;\r\n var dx;\r\n var dy;\r\n var value = parent.value;\r\n var sumValue;\r\n var minValue;\r\n var maxValue;\r\n var newRatio;\r\n var minRatio;\r\n var alpha;\r\n var beta;\r\n while (i0 < n) {\r\n dx = x1 - x0;\r\n dy = y1 - y0;\r\n // Find the next non-empty node.\r\n do {\r\n sumValue = nodes.getIndex(i1++).value;\r\n } while (!sumValue && i1 < n);\r\n minValue = maxValue = sumValue;\r\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n beta = sumValue * sumValue * alpha;\r\n minRatio = Math.max(maxValue / beta, beta / minValue);\r\n // Keep adding nodes while the aspect ratio maintains or improves.\r\n for (; i1 < n; ++i1) {\r\n sumValue += nodeValue = nodes.getIndex(i1).value;\r\n if (nodeValue < minValue) {\r\n minValue = nodeValue;\r\n }\r\n if (nodeValue > maxValue) {\r\n maxValue = nodeValue;\r\n }\r\n beta = sumValue * sumValue * alpha;\r\n newRatio = Math.max(maxValue / beta, beta / minValue);\r\n if (newRatio > minRatio) {\r\n sumValue -= nodeValue;\r\n break;\r\n }\r\n minRatio = newRatio;\r\n }\r\n // Position and record the row orientation.\r\n var row = this.dataItems.template.clone();\r\n row.value = sumValue;\r\n row.dice = dx < dy;\r\n row.children = nodes.slice(i0, i1);\r\n row.x0 = x0;\r\n row.y0 = y0;\r\n row.x1 = x1;\r\n row.y1 = y1;\r\n if (row.dice) {\r\n row.y1 = value ? (y0 += (dy * sumValue) / value) : y1;\r\n this.dice(row);\r\n }\r\n else {\r\n row.x1 = value ? (x0 += (dx * sumValue) / value) : x1;\r\n this.slice(row);\r\n }\r\n value -= sumValue;\r\n i0 = i1;\r\n }\r\n };\r\n TreeMap.prototype.handleSeriesAdded2 = function () {\r\n // void\r\n };\r\n /**\r\n * [handleDataItemValueChange description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\n TreeMap.prototype.handleDataItemValueChange = function (dataItem, name) {\r\n if (name == \"value\") {\r\n this.invalidateDataItems();\r\n }\r\n };\r\n TreeMap.prototype.handleDataItemWorkingValueChange = function (dataItem, name) {\r\n if (name == \"value\") {\r\n this.invalidateDataItems();\r\n }\r\n };\r\n TreeMap.prototype.getLegendLevel = function (dataItem) {\r\n if (!dataItem) {\r\n return;\r\n }\r\n if (!dataItem.children) {\r\n return;\r\n }\r\n if (dataItem.children.length > 1) {\r\n return dataItem;\r\n }\r\n else if (dataItem.children.length == 1) {\r\n var child = dataItem.children.getIndex(0);\r\n if (child.children) {\r\n return this.getLegendLevel(child);\r\n }\r\n else {\r\n return dataItem;\r\n }\r\n }\r\n else {\r\n return dataItem;\r\n }\r\n };\r\n TreeMap.prototype.handleLegendSeriesAdded = function (series) {\r\n // void\r\n };\r\n Object.defineProperty(TreeMap.prototype, \"homeDataItem\", {\r\n /**\r\n * A data item associated with top node.\r\n *\r\n * @since 4.8.2\r\n */\r\n get: function () {\r\n return this._homeDataItem;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Setups the legend to use the chart's data.\r\n * @ignore\r\n */\r\n TreeMap.prototype.feedLegend = function () {\r\n var legend = this.legend;\r\n if (legend) {\r\n legend.dataFields.name = \"name\";\r\n var legendParent = this.getLegendLevel(this._homeDataItem);\r\n if (legendParent) {\r\n var legendData_1 = [];\r\n legendParent.children.each(function (dataItem) {\r\n //if (!dataItem.hiddenInLegend) {\r\n legendData_1.push(dataItem);\r\n //}\r\n });\r\n legend.data = legendData_1;\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n */\r\n TreeMap.prototype.disposeData = function () {\r\n _super.prototype.disposeData.call(this);\r\n this._homeDataItem = undefined;\r\n this.series.clear();\r\n if (this.navigationBar) {\r\n this.navigationBar.disposeData();\r\n }\r\n this.xAxis.disposeData();\r\n this.yAxis.disposeData();\r\n };\r\n /**\r\n * Since this chart uses hierarchical data, we need to remove childrent\r\n * dataField from export of non-hierarchical formats such as CSV and XSLX.\r\n *\r\n * @return Export\r\n */\r\n TreeMap.prototype.getExporting = function () {\r\n var _this = this;\r\n var exporting = _super.prototype.getExporting.call(this);\r\n exporting.adapter.add(\"formatDataFields\", function (info) {\r\n if (info.format == \"csv\" || info.format == \"xlsx\") {\r\n if ($type.hasValue(_this.dataFields.children)) {\r\n delete info.dataFields[_this.dataFields.children];\r\n }\r\n }\r\n return info;\r\n });\r\n return exporting;\r\n };\r\n return TreeMap;\r\n}(XYChart));\r\nexport { TreeMap };\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//# sourceMappingURL=TreeMap.js.map","/**\r\n * Module, defining Axis Renderer for horizontal 3D axes.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererX } from \"../axes/AxisRendererX\";\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 * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar AxisRendererX3D = /** @class */ (function (_super) {\r\n __extends(AxisRendererX3D, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\r\n function AxisRendererX3D() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A related chart.\r\n *\r\n * @todo Description\r\n */\r\n _this._chart = new MutableValueDisposer();\r\n _this.className = \"AxisRendererX3D\";\r\n _this._disposers.push(_this._chart);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererX3D.prototype.updateGridElement = function (grid, position, endPosition) {\r\n position = position + (endPosition - position) * grid.location;\r\n var point = this.positionToPoint(position);\r\n if (grid.element) {\r\n var dx = this.chart.dx3D || 0;\r\n var dy = this.chart.dy3D || 0;\r\n var h = this.getHeight();\r\n grid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n }\r\n this.positionItem(grid, point);\r\n this.toggleVisibility(grid, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererX3D.prototype.updateBaseGridElement = function () {\r\n _super.prototype.updateBaseGridElement.call(this);\r\n var h = this.getHeight();\r\n var dx = this.chart.dx3D || 0;\r\n var dy = this.chart.dy3D || 0;\r\n this.baseGrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: h });\r\n };\r\n Object.defineProperty(AxisRendererX3D.prototype, \"chart\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Chart\r\n */\r\n get: function () {\r\n return this._chart.get();\r\n },\r\n /**\r\n * Chart, associated with the Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Chart\r\n */\r\n set: function (chart) {\r\n if (chart) {\r\n this._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Invoked when 3D-related settings change, like depth or angle.\r\n *\r\n * @param event Event\r\n */\r\n AxisRendererX3D.prototype.handle3DChanged = function (event) {\r\n if (event.property == \"depth\" || event.property == \"angle\") {\r\n this.invalidate();\r\n }\r\n };\r\n return AxisRendererX3D;\r\n}(AxisRendererX));\r\nexport { AxisRendererX3D };\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//# sourceMappingURL=AxisRendererX3D.js.map","/**\r\n * Module, defining Axis Renderer for vertical 3D axes.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY } from \"../axes/AxisRendererY\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar AxisRendererY3D = /** @class */ (function (_super) {\r\n __extends(AxisRendererY3D, _super);\r\n /**\r\n * Constructor.\r\n *\r\n * @param axis Related axis\r\n */\r\n function AxisRendererY3D() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A related chart.\r\n *\r\n * @todo Description\r\n */\r\n _this._chart = new MutableValueDisposer();\r\n _this.className = \"AxisRendererY3D\";\r\n _this._disposers.push(_this._chart);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Updates and positions a grid element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param grid Grid element\r\n * @param position Starting position\r\n * @param endPosition End position\r\n */\r\n AxisRendererY3D.prototype.updateGridElement = function (grid, position, endPosition) {\r\n position = position + (endPosition - position) * grid.location;\r\n var point = this.positionToPoint(position);\r\n if (grid.element) {\r\n var dx = this.chart.dx3D || 0;\r\n var dy = this.chart.dy3D || 0;\r\n var w = this.getWidth();\r\n grid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy });\r\n }\r\n this.positionItem(grid, point);\r\n this.toggleVisibility(grid, position, 0, 1);\r\n };\r\n /**\r\n * Updates and positions the base grid element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n AxisRendererY3D.prototype.updateBaseGridElement = function () {\r\n _super.prototype.updateBaseGridElement.call(this);\r\n var dx = this.chart.dx3D || 0;\r\n var dy = this.chart.dy3D || 0;\r\n var w = this.getWidth();\r\n this.baseGrid.path = $path.moveTo({ x: 0, y: 0 })\r\n + $path.lineTo({ x: w, y: 0 })\r\n + $path.lineTo({ x: w + dx, y: dy });\r\n };\r\n Object.defineProperty(AxisRendererY3D.prototype, \"chart\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Chart\r\n */\r\n get: function () {\r\n return this._chart.get();\r\n },\r\n /**\r\n * Chart, associated with the Axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Chart\r\n */\r\n set: function (chart) {\r\n if (chart) {\r\n this._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Invoked when 3D-related settings change, like depth or angle.\r\n *\r\n * @param event Event\r\n */\r\n AxisRendererY3D.prototype.handle3DChanged = function (event) {\r\n if (event.property == \"depth\" || event.property == \"angle\") {\r\n this.invalidate();\r\n }\r\n };\r\n return AxisRendererY3D;\r\n}(AxisRendererY));\r\nexport { AxisRendererY3D };\r\n//# sourceMappingURL=AxisRendererY3D.js.map","/**\r\n * Module that defines everything related to building 3D Columns.\r\n * It is a container which has column3D element which is a Rectangle3D.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column } from \"./Column\";\r\nimport { Rectangle3D } from \"../../core/elements/3d/Rectangle3D\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Class used to creates Column3Ds.\r\n *\r\n * @see {@link IColumn3DEvents} for a list of available events\r\n * @see {@link IColumn3DAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nvar Column3D = /** @class */ (function (_super) {\r\n __extends(Column3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Column3D() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Column3D\";\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n Column3D.prototype.createAssets = function () {\r\n this.column3D = this.createChild(Rectangle3D);\r\n this.column3D.shouldClone = false;\r\n this.column3D.strokeOpacity = 0;\r\n // some dirty hack so that if user access column, it won't get error\r\n this.column = this.column3D;\r\n };\r\n /**\r\n * @ignore Exclude from docs\r\n */\r\n Column3D.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n if (this.column3D) {\r\n this.column3D.width = this.pixelWidth;\r\n this.column3D.height = this.pixelHeight;\r\n if (this.column3D.invalid) {\r\n this.column3D.validate();\r\n }\r\n }\r\n };\r\n /**\r\n * Copies all parameters from another [[Column3D]].\r\n *\r\n * @param source Source Column3D\r\n */\r\n Column3D.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.column3D) {\r\n this.column3D.copyFrom(source.column3D);\r\n }\r\n };\r\n /**\r\n * Sets actual `fill` property on the SVG element, including applicable color\r\n * modifiers.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Fill\r\n */\r\n Column3D.prototype.setFill = function (value) {\r\n _super.prototype.setFill.call(this, value);\r\n this.column.fill = value;\r\n };\r\n return Column3D;\r\n}(Column));\r\nexport { Column3D };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Column3D\"] = Column3D;\r\n//# sourceMappingURL=Column3D.js.map","/**\r\n * 3D column series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { Column3D } from \"../elements/Column3D\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\nvar ColumnSeries3DDataItem = /** @class */ (function (_super) {\r\n __extends(ColumnSeries3DDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColumnSeries3DDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ColumnSeries3DDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return ColumnSeries3DDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { ColumnSeries3DDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ColumnSeries3D = /** @class */ (function (_super) {\r\n __extends(ColumnSeries3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ColumnSeries3D() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ColumnSeries3D\";\r\n _this.columns.template.column3D.applyOnClones = true;\r\n _this.columns.template.hiddenState.properties.visible = true;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(ColumnSeries3D.prototype, \"columnsContainer\", {\r\n /**\r\n * @ignore\r\n */\r\n get: function () {\r\n var chart = this.chart;\r\n if (chart && chart.columnsContainer && chart.leftAxesContainer.layout != \"vertical\" && chart.rightAxesContainer.layout != \"vertical\" && chart.bottomAxesContainer.layout != \"horizontal\" && chart.topAxesContainer.layout != \"horizontal\") {\r\n return chart.columnsContainer;\r\n }\r\n else {\r\n return this._columnsContainer;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ColumnSeries3D.prototype.validateDataElementReal = function (dataItem) {\r\n _super.prototype.validateDataElementReal.call(this, dataItem);\r\n if (dataItem.column) {\r\n dataItem.column.dx = this.dx;\r\n dataItem.column.dy = this.dy;\r\n dataItem.column.visible = this.visible;\r\n }\r\n };\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n ColumnSeries3D.prototype.validateDataElements = function () {\r\n _super.prototype.validateDataElements.call(this);\r\n if (this.chart) {\r\n this.chart.invalidateLayout();\r\n }\r\n };\r\n /**\r\n * Returns an element to use for 3D bar.\r\n * @ignore\r\n * @return Element.\r\n */\r\n ColumnSeries3D.prototype.createColumnTemplate = function () {\r\n return new Column3D();\r\n };\r\n Object.defineProperty(ColumnSeries3D.prototype, \"depth\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth (height) of the slices in the series in pixels.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"depth\", value, true);\r\n var template = this.columns.template; // todo: Cone is not Rectangle3D, maybe we should do some I3DShape?\r\n template.column3D.depth = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ColumnSeries3D.prototype, \"angle\", {\r\n /**\r\n * @ignore Exclude from docs\r\n * @return Angle (0-360)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * Angle of view for the slices in series. (0-360)\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Angle (0-360)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value);\r\n var template = this.columns.template;\r\n template.column3D.angle = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ColumnSeries3D;\r\n}(ColumnSeries));\r\nexport { ColumnSeries3D };\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//# sourceMappingURL=ColumnSeries3D.js.map","/**\r\n * Module for building 3D serial charts.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, XYChartDataItem } from \"./XYChart\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisRendererX3D } from \"../axes/AxisRendererX3D\";\r\nimport { AxisRendererY3D } from \"../axes/AxisRendererY3D\";\r\nimport { ColumnSeries3D } from \"../series/ColumnSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar XYChart3DDataItem = /** @class */ (function (_super) {\r\n __extends(XYChart3DDataItem, _super);\r\n function XYChart3DDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"XYChart3DDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return XYChart3DDataItem;\r\n}(XYChartDataItem));\r\nexport { XYChart3DDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar XYChart3D = /** @class */ (function (_super) {\r\n __extends(XYChart3D, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYChart3D() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Type of the axis renderer to use for X axes.\r\n */\r\n _this._axisRendererX = AxisRendererX3D;\r\n /**\r\n * Type of the axis renderer to use for Y axes.\r\n */\r\n _this._axisRendererY = AxisRendererY3D;\r\n _this.className = \"XYChart3D\";\r\n // Set defaults\r\n _this.depth = 30;\r\n _this.angle = 30;\r\n // Creeate container for columns\r\n var columnsContainer = _this.seriesContainer.createChild(Container);\r\n columnsContainer.shouldClone = false;\r\n columnsContainer.isMeasured = false;\r\n columnsContainer.layout = \"none\";\r\n _this.columnsContainer = columnsContainer;\r\n _this.columnsContainer.mask = _this.createChild(Sprite);\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * This is done because for some reason IE doesn't change mask if path of a\r\n * mask changes.\r\n */\r\n XYChart3D.prototype.updateSeriesMasks = function () {\r\n _super.prototype.updateSeriesMasks.call(this);\r\n if ($utils.isIE()) {\r\n var columnsContainer = this.columnsContainer;\r\n var mask = columnsContainer.mask;\r\n columnsContainer.mask = undefined;\r\n columnsContainer.mask = mask;\r\n }\r\n };\r\n Object.defineProperty(XYChart3D.prototype, \"depth\", {\r\n /**\r\n * @return Depth (px)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"depth\");\r\n },\r\n /**\r\n * Depth of the 3D chart / columns in pixels.\r\n *\r\n * @param value Depth (px)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"depth\", value);\r\n this.fixLayout();\r\n this.invalidateDataUsers();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart3D.prototype, \"angle\", {\r\n /**\r\n * @return Angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"angle\");\r\n },\r\n /**\r\n * Angle the chart is viewed at.\r\n *\r\n * @todo Description (review)\r\n * @param value Angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"angle\", value);\r\n this.fixLayout();\r\n this.invalidateDataUsers();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart3D.prototype, \"dx3D\", {\r\n /**\r\n * A calculated horizontal 3D offset (px).\r\n *\r\n * @readonly\r\n * @return Offset (px)\r\n */\r\n get: function () {\r\n return $math.cos(this.angle) * this.depth;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYChart3D.prototype, \"dy3D\", {\r\n /**\r\n * A calculated vertical 3D offset (px).\r\n *\r\n * @readonly\r\n * @return Offset (px)\r\n */\r\n get: function () {\r\n return -$math.sin(this.angle) * this.depth;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * (Re)validates layout\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYChart3D.prototype.validateLayout = function () {\r\n _super.prototype.validateLayout.call(this);\r\n this.fixColumns();\r\n };\r\n /**\r\n * Updates the layout (padding and scrollbar positions) to accommodate for\r\n * 3D depth and angle.\r\n */\r\n XYChart3D.prototype.fixLayout = function () {\r\n this.chartContainer.paddingTop = -this.dy3D;\r\n this.chartContainer.paddingRight = this.dx3D;\r\n if (this.scrollbarX) {\r\n this.scrollbarX.dy = this.dy3D;\r\n this.scrollbarX.dx = this.dx3D;\r\n }\r\n if (this.scrollbarY) {\r\n this.scrollbarY.dy = this.dy3D;\r\n this.scrollbarY.dx = this.dx3D;\r\n }\r\n this.fixColumns();\r\n _super.prototype.fixLayout.call(this);\r\n };\r\n /**\r\n * Updates column positions, offset and dimensions based on chart's angle\r\n * and depth.\r\n */\r\n XYChart3D.prototype.fixColumns = function () {\r\n var _this = this;\r\n var count = 1;\r\n var i = 0;\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (series instanceof ColumnSeries3D) {\r\n if (!series.clustered && i > 0) {\r\n count++;\r\n }\r\n series.depthIndex = count - 1;\r\n i++;\r\n }\r\n });\r\n var s = 0;\r\n $iter.each(this.series.iterator(), function (series) {\r\n if (series instanceof ColumnSeries3D) {\r\n series.depth = _this.depth / (count);\r\n series.angle = _this.angle;\r\n if (series.columnsContainer == _this.columnsContainer) {\r\n series.dx = _this.depth / (count) * $math.cos(_this.angle) * (series.depthIndex);\r\n series.dy = -_this.depth / (count) * $math.sin(_this.angle) * (series.depthIndex);\r\n }\r\n var inversed_1 = false;\r\n if ((series.baseAxis == series.xAxis && series.xAxis.renderer.inversed) || (series.baseAxis == series.yAxis && series.yAxis.renderer.inversed)) {\r\n inversed_1 = true;\r\n }\r\n var i_1 = 1;\r\n series.dataItems.each(function (dataItem) {\r\n var column = dataItem.column;\r\n if (column) {\r\n if (inversed_1) {\r\n column.zIndex = 1000 * (1000 - i_1) + s - series.depthIndex * 100;\r\n }\r\n else {\r\n column.zIndex = 1000 * i_1 + s - series.depthIndex * 100;\r\n }\r\n }\r\n i_1++;\r\n });\r\n if (inversed_1) {\r\n s--;\r\n }\r\n else {\r\n s++;\r\n }\r\n }\r\n });\r\n this.maskColumns();\r\n };\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n XYChart3D.prototype.processConfig = function (config) {\r\n if (config) {\r\n // Set up series\r\n if ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n for (var i = 0, len = config.series.length; i < len; i++) {\r\n config.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n XYChart3D.prototype.maskColumns = function () {\r\n var w = this.plotContainer.pixelWidth;\r\n var h = this.plotContainer.pixelHeight;\r\n var dx = this.dx3D;\r\n var dy = this.dy3D;\r\n var 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 var columnsContainer = this.columnsContainer;\r\n if (columnsContainer && columnsContainer.mask) {\r\n columnsContainer.mask.path = path;\r\n }\r\n };\r\n return XYChart3D;\r\n}(XYChart));\r\nexport { XYChart3D };\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//# sourceMappingURL=XYChart3D.js.map","/**\r\n * Module that defines everything related to building Candlesticks.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column } from \"./Column\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar Candlestick = /** @class */ (function (_super) {\r\n __extends(Candlestick, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Candlestick() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"Candlestick\";\r\n _this.layout = \"none\";\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n Candlestick.prototype.createAssets = function () {\r\n _super.prototype.createAssets.call(this);\r\n this.lowLine = this.createChild(Line);\r\n this.lowLine.shouldClone = false;\r\n this.highLine = this.createChild(Line);\r\n this.highLine.shouldClone = false;\r\n };\r\n /**\r\n * Copies all parameters from another [[Candlestick]].\r\n *\r\n * @param source Source Candlestick\r\n */\r\n Candlestick.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.lowLine) {\r\n this.lowLine.copyFrom(source.lowLine);\r\n }\r\n if (this.highLine) {\r\n this.highLine.copyFrom(source.highLine);\r\n }\r\n };\r\n return Candlestick;\r\n}(Column));\r\nexport { Candlestick };\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//# sourceMappingURL=Candlestick.js.map","/**\r\n * Candlestick Series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\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 * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[CandlestickSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar CandlestickSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(CandlestickSeriesDataItem, _super);\r\n /**\r\n * Defines a type of [[Component]] this data item is used for\r\n * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n */\r\n //public _component!: CandlestickSeries;\r\n /**\r\n * Constructor\r\n */\r\n function CandlestickSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.values.lowValueX = {};\r\n _this.values.lowValueY = {};\r\n _this.values.highValueX = {};\r\n _this.values.highValueY = {};\r\n _this.className = \"CandlestickSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"lowValueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.lowValueX.value;\r\n },\r\n /**\r\n * Low value for horizontal axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"lowValueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"lowValueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.lowValueY.value;\r\n },\r\n /**\r\n * Low value for vertical axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"lowValueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"highValueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.highValueX.value;\r\n },\r\n /**\r\n * High value for horizontal axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"highValueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"highValueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.highValueY.value;\r\n },\r\n /**\r\n * High value for vertical axis.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"highValueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"closeValueX\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.valueX.value;\r\n },\r\n /**\r\n * Close value for horizontal axis.\r\n *\r\n * This is an alias for `valueX` added for convenience only.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"valueX\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeriesDataItem.prototype, \"closeValueY\", {\r\n /**\r\n * @return Value\r\n */\r\n get: function () {\r\n return this.values.valueY.value;\r\n },\r\n /**\r\n * Close value for vertical axis.\r\n *\r\n * This is an alias for `valueX` added for convenience only.\r\n *\r\n * @param value Value\r\n */\r\n set: function (value) {\r\n this.setValue(\"valueY\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return CandlestickSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { CandlestickSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar CandlestickSeries = /** @class */ (function (_super) {\r\n __extends(CandlestickSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CandlestickSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CandlestickSeries\";\r\n _this.groupFields.lowValueX = \"low\";\r\n _this.groupFields.lowValueY = \"low\";\r\n _this.groupFields.highValueX = \"high\";\r\n _this.groupFields.highValueY = \"high\";\r\n _this.strokeOpacity = 1;\r\n var interfaceColors = new InterfaceColorSet();\r\n var positiveColor = interfaceColors.getFor(\"positive\");\r\n var negativeColor = interfaceColors.getFor(\"negative\");\r\n _this.dropFromOpenState.properties.fill = negativeColor;\r\n _this.dropFromOpenState.properties.stroke = negativeColor;\r\n _this.riseFromOpenState.properties.fill = positiveColor;\r\n _this.riseFromOpenState.properties.stroke = positiveColor;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n CandlestickSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Candlestick Series\");\r\n }\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n CandlestickSeries.prototype.createDataItem = function () {\r\n return new CandlestickSeriesDataItem();\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n CandlestickSeries.prototype.validateDataElementReal = function (dataItem) {\r\n _super.prototype.validateDataElementReal.call(this, dataItem);\r\n this.validateCandlestick(dataItem);\r\n };\r\n CandlestickSeries.prototype.validateCandlestick = function (dataItem) {\r\n var column = dataItem.column;\r\n if (column) {\r\n var lowLine_1 = column.lowLine;\r\n var highLine_1 = column.highLine;\r\n if (this.baseAxis == this.xAxis) {\r\n var x = column.pixelWidth / 2;\r\n lowLine_1.x = x;\r\n highLine_1.x = x;\r\n var open_1 = dataItem.getWorkingValue(this.yOpenField);\r\n var close_1 = dataItem.getWorkingValue(this.yField);\r\n var yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n var yClose = this.yAxis.getY(dataItem, this.yField);\r\n var yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n var yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n var pixelY = column.pixelY;\r\n lowLine_1.y1 = yLow - pixelY;\r\n highLine_1.y1 = yHigh - pixelY;\r\n if (open_1 < close_1) {\r\n lowLine_1.y2 = yOpen - pixelY;\r\n highLine_1.y2 = yClose - pixelY;\r\n }\r\n else {\r\n lowLine_1.y2 = yClose - pixelY;\r\n highLine_1.y2 = yOpen - pixelY;\r\n }\r\n }\r\n if (this.baseAxis == this.yAxis) {\r\n var y = column.pixelHeight / 2;\r\n lowLine_1.y = y;\r\n highLine_1.y = y;\r\n var open_2 = dataItem.getWorkingValue(this.xOpenField);\r\n var close_2 = dataItem.getWorkingValue(this.xField);\r\n var xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n var xClose = this.xAxis.getX(dataItem, this.xField);\r\n var xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n var xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n var pixelX = column.pixelX;\r\n lowLine_1.x1 = xLow - pixelX;\r\n highLine_1.x1 = xHigh - pixelX;\r\n if (open_2 < close_2) {\r\n lowLine_1.x2 = xOpen - pixelX;\r\n highLine_1.x2 = xClose - pixelX;\r\n }\r\n else {\r\n lowLine_1.x2 = xClose - pixelX;\r\n highLine_1.x2 = xOpen - pixelX;\r\n }\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n // LOW LINE\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (rangeColumn) {\r\n var rangeLowLine = rangeColumn.lowLine;\r\n rangeLowLine.x = lowLine_1.x;\r\n rangeLowLine.y = lowLine_1.y;\r\n rangeLowLine.x1 = lowLine_1.x1;\r\n rangeLowLine.x2 = lowLine_1.x2;\r\n rangeLowLine.y1 = lowLine_1.y1;\r\n rangeLowLine.y2 = lowLine_1.y2;\r\n // HIGH LINE\r\n var rangehighLine = rangeColumn.highLine;\r\n rangehighLine.x = highLine_1.x;\r\n rangehighLine.y = highLine_1.y;\r\n rangehighLine.x1 = highLine_1.x1;\r\n rangehighLine.x2 = highLine_1.x2;\r\n rangehighLine.y1 = highLine_1.y1;\r\n rangehighLine.y2 = highLine_1.y2;\r\n }\r\n });\r\n }\r\n };\r\n Object.defineProperty(CandlestickSeries.prototype, \"xLowField\", {\r\n /**\r\n * A data field to look for \"low\" value for horizontal axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Field name\r\n */\r\n get: function () {\r\n return this._xLowField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeries.prototype, \"yLowField\", {\r\n /**\r\n * A data field to look for \"low\" value for vertical axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Field name\r\n */\r\n get: function () {\r\n return this._yLowField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeries.prototype, \"xHighField\", {\r\n /**\r\n * A data field to look for \"high\" value for horizontal axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Field name\r\n */\r\n get: function () {\r\n return this._xHighField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CandlestickSeries.prototype, \"yHighField\", {\r\n /**\r\n * A data field to look for \"high\" value for vertical axis.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Field name\r\n */\r\n get: function () {\r\n return this._yHighField;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Sets up which data fields to use for data access.\r\n */\r\n CandlestickSeries.prototype.defineFields = function () {\r\n _super.prototype.defineFields.call(this);\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (xAxis && yAxis) {\r\n if (this.baseAxis == xAxis) {\r\n var yAxisFieldName = $utils.capitalize(yAxis.axisFieldName);\r\n this._yLowField = (\"low\" + yAxisFieldName + \"Y\");\r\n this._yHighField = (\"high\" + yAxisFieldName + \"Y\");\r\n }\r\n if (this.baseAxis == yAxis) {\r\n var xAxisFieldName = $utils.capitalize(xAxis.axisFieldName);\r\n this._xLowField = (\"low\" + xAxisFieldName + \"X\");\r\n this._xHighField = (\"high\" + xAxisFieldName + \"X\");\r\n }\r\n this.addValueField(xAxis, this._xValueFields, this._xLowField);\r\n this.addValueField(xAxis, this._xValueFields, this._xHighField);\r\n this.addValueField(yAxis, this._yValueFields, this._yLowField);\r\n this.addValueField(yAxis, this._yValueFields, this._yHighField);\r\n }\r\n };\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n CandlestickSeries.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(Candlestick);\r\n column.shouldClone = false;\r\n column.copyFrom(this.columns.template);\r\n var cw;\r\n var ch;\r\n var highLine = column.lowLine;\r\n var lowLine = column.highLine;\r\n if (this.baseAxis == this.yAxis) {\r\n cw = w / 3;\r\n ch = h;\r\n highLine.y = h / 2;\r\n lowLine.y = h / 2;\r\n highLine.x2 = w / 3;\r\n lowLine.x2 = w / 3;\r\n lowLine.x = w / 3 * 2;\r\n column.column.x = w / 3;\r\n }\r\n else {\r\n cw = w;\r\n ch = h / 3;\r\n highLine.x = w / 2;\r\n lowLine.x = w / 2;\r\n highLine.y2 = h / 3;\r\n lowLine.y2 = h / 3;\r\n lowLine.y = h / 3 * 2;\r\n column.column.y = h / 3;\r\n }\r\n column.width = cw;\r\n column.height = ch;\r\n $object.copyProperties(this, marker, visualProperties);\r\n $object.copyProperties(this.columns.template, column, visualProperties);\r\n column.stroke = this.riseFromOpenState.properties.stroke;\r\n column.fill = column.stroke;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = column.fill;\r\n legendDataItem.colorOrig = column.fill;\r\n };\r\n /**\r\n * Returns an element to use for Candlestick\r\n * @ignore\r\n * @return Element.\r\n */\r\n CandlestickSeries.prototype.createColumnTemplate = function () {\r\n return new Candlestick();\r\n };\r\n return CandlestickSeries;\r\n}(ColumnSeries));\r\nexport { CandlestickSeries };\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//# sourceMappingURL=CandlestickSeries.js.map","/**\r\n * Module that defines everything related to building OHLCs.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Candlestick } from \"./Candlestick\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar OHLC = /** @class */ (function (_super) {\r\n __extends(OHLC, _super);\r\n /**\r\n * Constructor\r\n */\r\n function OHLC() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"OHLC\";\r\n _this.layout = \"none\";\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n OHLC.prototype.createAssets = function () {\r\n //super.createAssets();\r\n this.openLine = this.createChild(Line);\r\n this.openLine.shouldClone = false;\r\n this.highLowLine = this.createChild(Line);\r\n this.highLowLine.shouldClone = false;\r\n this.closeLine = this.createChild(Line);\r\n this.closeLine.shouldClone = false;\r\n };\r\n /**\r\n * Copies all parameters from another [[OHLC]].\r\n *\r\n * @param source Source OHLC\r\n */\r\n OHLC.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.openLine) {\r\n this.openLine.copyFrom(source.openLine);\r\n }\r\n if (this.highLowLine) {\r\n this.highLowLine.copyFrom(source.highLowLine);\r\n }\r\n if (this.closeLine) {\r\n this.closeLine.copyFrom(source.closeLine);\r\n }\r\n };\r\n return OHLC;\r\n}(Candlestick));\r\nexport { OHLC };\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//# sourceMappingURL=OHLC.js.map","/**\r\n * Candlestick Series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { CandlestickSeries, CandlestickSeriesDataItem } from \"./CandlestickSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { OHLC } from \"../elements/OHLC\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[OHLCSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar OHLCSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(OHLCSeriesDataItem, _super);\r\n /**\r\n * Defines a type of [[Component]] this data item is used for\r\n * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n */\r\n //public _component!: OHLCSeries;\r\n /**\r\n * Constructor\r\n */\r\n function OHLCSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"OHLCSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return OHLCSeriesDataItem;\r\n}(CandlestickSeriesDataItem));\r\nexport { OHLCSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar OHLCSeries = /** @class */ (function (_super) {\r\n __extends(OHLCSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function OHLCSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"OHLCSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n OHLCSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"OHLC Series\");\r\n }\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n OHLCSeries.prototype.createDataItem = function () {\r\n return new OHLCSeriesDataItem();\r\n };\r\n OHLCSeries.prototype.validateCandlestick = function (dataItem) {\r\n var column = dataItem.column;\r\n if (column) {\r\n var openLine_1 = column.openLine;\r\n var highLowLine_1 = column.highLowLine;\r\n var closeLine_1 = column.closeLine;\r\n if (this.baseAxis == this.xAxis) {\r\n var x = column.pixelWidth / 2;\r\n highLowLine_1.x = x;\r\n // TODO can these be removed ?\r\n dataItem.getWorkingValue(this.yOpenField);\r\n dataItem.getWorkingValue(this.yField);\r\n var yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n var yClose = this.yAxis.getY(dataItem, this.yField);\r\n var yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n var yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n var pixelY = column.pixelY;\r\n openLine_1.y1 = yOpen - pixelY;\r\n openLine_1.y2 = yOpen - pixelY;\r\n openLine_1.x1 = 0;\r\n openLine_1.x2 = x;\r\n closeLine_1.y1 = yClose - pixelY;\r\n closeLine_1.y2 = yClose - pixelY;\r\n closeLine_1.x1 = x;\r\n closeLine_1.x2 = 2 * x;\r\n highLowLine_1.y1 = yHigh - pixelY;\r\n highLowLine_1.y2 = yLow - pixelY;\r\n }\r\n if (this.baseAxis == this.yAxis) {\r\n var y = column.pixelHeight / 2;\r\n highLowLine_1.y = y;\r\n // TODO can these be removed ?\r\n dataItem.getWorkingValue(this.xOpenField);\r\n dataItem.getWorkingValue(this.xField);\r\n var xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n var xClose = this.xAxis.getX(dataItem, this.xField);\r\n var xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n var xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n var pixelX = column.pixelX;\r\n openLine_1.x1 = xOpen - pixelX;\r\n openLine_1.x2 = xOpen - pixelX;\r\n openLine_1.y1 = y;\r\n openLine_1.y2 = 2 * y;\r\n closeLine_1.x1 = xClose - pixelX;\r\n closeLine_1.x2 = xClose - pixelX;\r\n closeLine_1.y1 = 0;\r\n closeLine_1.y2 = y;\r\n highLowLine_1.x1 = xHigh - pixelX;\r\n highLowLine_1.x2 = xLow - pixelX;\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (rangeColumn) {\r\n var rangeOpenLine = rangeColumn.openLine;\r\n rangeOpenLine.x = openLine_1.x;\r\n rangeOpenLine.y = openLine_1.y;\r\n rangeOpenLine.x1 = openLine_1.x1;\r\n rangeOpenLine.x2 = openLine_1.x2;\r\n rangeOpenLine.y1 = openLine_1.y1;\r\n rangeOpenLine.y2 = openLine_1.y2;\r\n var rangeCloseLine = rangeColumn.closeLine;\r\n rangeCloseLine.x = closeLine_1.x;\r\n rangeCloseLine.y = closeLine_1.y;\r\n rangeCloseLine.x1 = closeLine_1.x1;\r\n rangeCloseLine.x2 = closeLine_1.x2;\r\n rangeCloseLine.y1 = closeLine_1.y1;\r\n rangeCloseLine.y2 = closeLine_1.y2;\r\n var rangeHighLowLine = rangeColumn.highLowLine;\r\n rangeHighLowLine.x = highLowLine_1.x;\r\n rangeHighLowLine.y = highLowLine_1.y;\r\n rangeHighLowLine.x1 = highLowLine_1.x1;\r\n rangeHighLowLine.x2 = highLowLine_1.x2;\r\n rangeHighLowLine.y1 = highLowLine_1.y1;\r\n rangeHighLowLine.y2 = highLowLine_1.y2;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Creates elements in related legend container, that mimics the look of this\r\n * Series.\r\n *\r\n * @ignore Exclude from docs\r\n * @param marker Legend item container\r\n */\r\n OHLCSeries.prototype.createLegendMarker = function (marker) {\r\n var w = marker.pixelWidth;\r\n var h = marker.pixelHeight;\r\n marker.removeChildren();\r\n var column = marker.createChild(OHLC);\r\n column.shouldClone = false;\r\n column.copyFrom(this.columns.template);\r\n var cw;\r\n var ch;\r\n var openLine = column.openLine;\r\n var closeLine = column.closeLine;\r\n var highLowLine = column.highLowLine;\r\n if (this.baseAxis == this.yAxis) {\r\n cw = w / 3;\r\n ch = h;\r\n highLowLine.y = h / 2;\r\n highLowLine.x2 = w;\r\n openLine.x = w / 3 * 2;\r\n openLine.y2 = h / 2;\r\n closeLine.x = w / 3;\r\n closeLine.y2 = h;\r\n closeLine.y1 = h / 2;\r\n }\r\n else {\r\n cw = w;\r\n ch = h / 3;\r\n highLowLine.x = w / 2;\r\n highLowLine.y2 = h;\r\n openLine.y = h / 3 * 2;\r\n openLine.x2 = w / 2;\r\n closeLine.y = h / 3;\r\n closeLine.x2 = w;\r\n closeLine.x1 = w / 2;\r\n }\r\n column.width = cw;\r\n column.height = ch;\r\n $object.copyProperties(this, marker, visualProperties);\r\n $object.copyProperties(this.columns.template, column, visualProperties);\r\n column.stroke = this.riseFromOpenState.properties.stroke;\r\n var legendDataItem = marker.dataItem;\r\n legendDataItem.color = column.stroke;\r\n legendDataItem.colorOrig = column.stroke;\r\n };\r\n /**\r\n * Returns an element to use for Candlestick\r\n * @ignore\r\n * @return Element.\r\n */\r\n OHLCSeries.prototype.createColumnTemplate = function () {\r\n return new OHLC();\r\n };\r\n return OHLCSeries;\r\n}(CandlestickSeries));\r\nexport { OHLCSeries };\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//# sourceMappingURL=OHLCSeries.js.map","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar StepLineSeriesSegment = /** @class */ (function (_super) {\r\n __extends(StepLineSeriesSegment, _super);\r\n /**\r\n * Constructor\r\n */\r\n function StepLineSeriesSegment() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"StepLineSeriesSegment\";\r\n return _this;\r\n }\r\n /**\r\n * Draws the series segment.\r\n *\r\n * @ignore Exclude from docs\r\n * @param points Points to connect\r\n * @param closePoints ?\r\n * @param smoothnessX Horizontal bezier setting (?)\r\n * @param smoothnessY Vertical bezier setting (?)\r\n */\r\n StepLineSeriesSegment.prototype.drawSegment = function (points, closePoints, smoothnessX, smoothnessY, noRisers, vertical) {\r\n if (points.length > 0 && closePoints.length > 0) {\r\n if (noRisers) {\r\n var path = $path.moveTo(points[0]);\r\n if (points.length > 0) {\r\n for (var i = 1; i < points.length; i++) {\r\n var point = points[i];\r\n if (i / 2 == Math.round(i / 2)) {\r\n path += $path.moveTo(point);\r\n }\r\n else {\r\n path += $path.lineTo(point);\r\n }\r\n }\r\n }\r\n this.strokeSprite.path = path;\r\n if (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n path = $path.moveTo(points[0]) + $path.polyline(points);\r\n path += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n path += $path.lineTo(points[0]);\r\n path += $path.closePath();\r\n this.fillSprite.path = path;\r\n }\r\n else {\r\n }\r\n }\r\n else {\r\n var path = $path.moveTo(points[0]) + $path.polyline(points);\r\n this.strokeSprite.path = path;\r\n if (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n path += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n path += $path.lineTo(points[0]);\r\n path += $path.closePath();\r\n this.fillSprite.path = path;\r\n }\r\n }\r\n }\r\n else {\r\n this.strokeSprite.path = \"\";\r\n this.fillSprite.path = \"\";\r\n }\r\n };\r\n return StepLineSeriesSegment;\r\n}(LineSeriesSegment));\r\nexport { StepLineSeriesSegment };\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//# sourceMappingURL=StepLineSeriesSegment.js.map","/**\r\n * Step line series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem } from \"./LineSeries\";\r\nimport { StepLineSeriesSegment } from \"./StepLineSeriesSegment\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[StepLineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar StepLineSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(StepLineSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function StepLineSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"StepLineSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return StepLineSeriesDataItem;\r\n}(LineSeriesDataItem));\r\nexport { StepLineSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar StepLineSeries = /** @class */ (function (_super) {\r\n __extends(StepLineSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function StepLineSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"StepLineSeries\";\r\n _this.applyTheme();\r\n _this.startLocation = 0;\r\n _this.endLocation = 1;\r\n return _this;\r\n }\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n StepLineSeries.prototype.createDataItem = function () {\r\n return new StepLineSeriesDataItem();\r\n };\r\n /**\r\n * [addPoints description]\r\n *\r\n * @todo Description\r\n * @param points [description]\r\n * @param dataItem [description]\r\n * @param xField [description]\r\n * @param yField [description]\r\n * @param backwards [description]\r\n */\r\n StepLineSeries.prototype.addPoints = function (points, dataItem, xField, yField, backwards) {\r\n var startLocationX;\r\n var endLocationX;\r\n var startLocationY;\r\n var endLocationY;\r\n if (this.baseAxis == this.xAxis) {\r\n startLocationX = this.startLocation;\r\n endLocationX = this.endLocation;\r\n startLocationY = this.getAdjustedXLocation(dataItem, this.yOpenField);\r\n endLocationY = this.getAdjustedXLocation(dataItem, this.yField);\r\n }\r\n if (this.baseAxis == this.yAxis) {\r\n startLocationY = this.startLocation;\r\n endLocationY = this.endLocation;\r\n startLocationX = this.getAdjustedXLocation(dataItem, this.xOpenField);\r\n endLocationX = this.getAdjustedXLocation(dataItem, this.xField);\r\n }\r\n var x0 = this.xAxis.getX(dataItem, xField, startLocationX);\r\n var y0 = this.yAxis.getY(dataItem, yField, startLocationY);\r\n var x1 = this.xAxis.getX(dataItem, xField, endLocationX);\r\n var y1 = this.yAxis.getY(dataItem, yField, endLocationY);\r\n x0 = $math.fitToRange(x0, -100000, 100000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n y0 = $math.fitToRange(y0, -100000, 100000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n x1 = $math.fitToRange(x1, -100000, 100000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n y1 = $math.fitToRange(y1, -100000, 100000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n // this might make an impression that points are duplicated, and they indeed are, but this is needed to handle gaps in data\r\n if (!this.noRisers) {\r\n if (points.length > 1) {\r\n var prevPoint = points[points.length - 1];\r\n if (this.baseAxis == this.xAxis) {\r\n if (backwards) {\r\n points.push({ x: prevPoint.x, y: y1 });\r\n }\r\n else {\r\n points.push({ x: x0, y: prevPoint.y });\r\n }\r\n }\r\n if (this.baseAxis == this.yAxis) {\r\n if (backwards) {\r\n points.push({ x: x1, y: prevPoint.y });\r\n }\r\n else {\r\n points.push({ x: prevPoint.x, y: y0 });\r\n }\r\n }\r\n }\r\n }\r\n var point0 = { x: x0, y: y0 };\r\n var point1 = { x: x1, y: y1 };\r\n if (backwards) {\r\n points.push(point1, point0);\r\n }\r\n else {\r\n points.push(point0, point1);\r\n }\r\n };\r\n /**\r\n * Draws the line segment.\r\n *\r\n * @param segment Segment\r\n * @param points Segment points\r\n * @param closePoints Segment close points\r\n */\r\n StepLineSeries.prototype.drawSegment = function (segment, points, closePoints) {\r\n var vertical = false;\r\n if (this.yAxis == this.baseAxis) {\r\n vertical = true;\r\n }\r\n segment.drawSegment(points, closePoints, this.tensionX, this.tensionY, this.noRisers, vertical);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n StepLineSeries.prototype.createSegment = function () {\r\n return new StepLineSeriesSegment();\r\n };\r\n Object.defineProperty(StepLineSeries.prototype, \"noRisers\", {\r\n /**\r\n * @return No risers\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"noRisers\");\r\n },\r\n /**\r\n * Specifies if step line series should draw only horizontal (or only\r\n * vertical, depending on base axis) lines, instead of connecting them with\r\n * vertical (or horizontal) lines.\r\n *\r\n * @default false\r\n * @param value No risers\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"noRisers\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(StepLineSeries.prototype, \"startLocation\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startLocation\");\r\n },\r\n /**\r\n * start location of the step\r\n *\r\n * @param value Location (0-1)\r\n * @default 0\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startLocation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(StepLineSeries.prototype, \"endLocation\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endLocation\");\r\n },\r\n /**\r\n * Step end location.\r\n *\r\n * @param value Location (0-1)\r\n * #default 1\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endLocation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return StepLineSeries;\r\n}(LineSeries));\r\nexport { StepLineSeries };\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//# sourceMappingURL=StepLineSeries.js.map","/**\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\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column } from \"./Column\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar RadarColumn = /** @class */ (function (_super) {\r\n __extends(RadarColumn, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarColumn() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarColumn\";\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n RadarColumn.prototype.createAssets = function () {\r\n this.radarColumn = this.createChild(Slice);\r\n this.radarColumn.shouldClone = false;\r\n this.radarColumn.strokeOpacity = undefined;\r\n // some dirty hack so that if user access column, it won't get error\r\n this.column = this.radarColumn;\r\n };\r\n /**\r\n * Copies all parameters from another [[RadarColumn]].\r\n *\r\n * @param source Source RadarColumn\r\n */\r\n RadarColumn.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.radarColumn) {\r\n this.radarColumn.copyFrom(source.radarColumn);\r\n }\r\n };\r\n /**\r\n * X coordinate for the slice tooltip.\r\n *\r\n * @return X\r\n * @ignore\r\n */\r\n RadarColumn.prototype.getTooltipX = function () {\r\n var value = this.getPropertyValue(\"tooltipX\");\r\n if (!$type.isNumber(value)) {\r\n return this.radarColumn.getTooltipX();\r\n }\r\n return value;\r\n };\r\n /**\r\n * Y coordinate for the slice tooltip.\r\n *\r\n * @return Y\r\n * @ignore\r\n */\r\n RadarColumn.prototype.getTooltipY = function () {\r\n var value = this.getPropertyValue(\"tooltipX\");\r\n if (!$type.isNumber(value)) {\r\n return this.radarColumn.getTooltipY();\r\n }\r\n return value;\r\n };\r\n return RadarColumn;\r\n}(Column));\r\nexport { RadarColumn };\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//# sourceMappingURL=RadarColumn.js.map","/**\r\n * Radar column series module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\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 { Percent } from \"../../core/utils/Percent\";\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\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[RadarColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar RadarColumnSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(RadarColumnSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarColumnSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ColumnSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return RadarColumnSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { RadarColumnSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar RadarColumnSeries = /** @class */ (function (_super) {\r\n __extends(RadarColumnSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarColumnSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"RadarColumnSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creates and returns a RadarColumn element to use as column in radar chart.\r\n *\r\n * @return RadarColumn.\r\n */\r\n RadarColumnSeries.prototype.createColumnTemplate = function () {\r\n return new RadarColumn();\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RadarColumnSeries.prototype.validate = function () {\r\n // so that radius would be updated\r\n if (this.chart.invalid) {\r\n this.chart.validate();\r\n }\r\n _super.prototype.validate.call(this);\r\n };\r\n /**\r\n * @ignore\r\n */\r\n RadarColumnSeries.prototype.disableUnusedColumns = function (dataItem) {\r\n if (dataItem) {\r\n if (dataItem.column) {\r\n dataItem.column.__disabled = true;\r\n }\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (rangeColumn) {\r\n rangeColumn.__disabled = true;\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n RadarColumnSeries.prototype.validateDataElementReal = function (dataItem) {\r\n var _this = this;\r\n var startAngle = this.chart.startAngle;\r\n var endAngle = this.chart.endAngle;\r\n var yField = this.yField;\r\n var yOpenField = this.yOpenField;\r\n var xField = this.xField;\r\n var xOpenField = this.xOpenField;\r\n var lAngle;\r\n var rAngle;\r\n var tRadius;\r\n var bRadius;\r\n var startLocation = this.getStartLocation(dataItem);\r\n var endLocation = this.getEndLocation(dataItem);\r\n var cellAngle = (endAngle - startAngle) / (this.dataItems.length * (this.end - this.start));\r\n var radarColumn = dataItem.column;\r\n if (!radarColumn) {\r\n radarColumn = this.columns.create();\r\n dataItem.column = radarColumn;\r\n $object.copyProperties(this, radarColumn, visualProperties); // need this \r\n $object.copyProperties(this.columns.template, radarColumn, visualProperties); // second time, no force, so that columns.template would override series properties\t\t\t\r\n dataItem.addSprite(radarColumn);\r\n radarColumn.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\r\n this.setColumnStates(radarColumn);\r\n }\r\n var width = radarColumn.width;\r\n var percentWidth = 100;\r\n if (width instanceof Percent) {\r\n percentWidth = width.percent;\r\n }\r\n var offset = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n startLocation += offset;\r\n endLocation -= offset;\r\n // two category axes\r\n if ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n tRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, 0, \"valueY\"), y: this.yAxis.getY(dataItem, yField, 0, \"valueY\") });\r\n bRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, 1, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, 1, \"valueY\") });\r\n lAngle = this.xAxis.getAngle(dataItem, xOpenField, 0, \"valueX\");\r\n rAngle = this.xAxis.getAngle(dataItem, xField, 1, \"valueX\");\r\n startAngle = startAngle + startLocation * cellAngle;\r\n endAngle = endAngle - (1 - endLocation) * cellAngle;\r\n }\r\n else if (this.baseAxis == this.xAxis) {\r\n tRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, dataItem.locations[yField], \"valueY\"), y: this.yAxis.getY(dataItem, yField, dataItem.locations[yField], \"valueY\") });\r\n bRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\") });\r\n lAngle = this.xAxis.getAngle(dataItem, xOpenField, startLocation, \"valueX\");\r\n rAngle = this.xAxis.getAngle(dataItem, xField, endLocation, \"valueX\");\r\n startAngle = startAngle + startLocation * cellAngle;\r\n endAngle = endAngle - (1 - endLocation) * cellAngle;\r\n }\r\n else {\r\n tRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, startLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yField, startLocation, \"valueY\") });\r\n bRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, endLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, endLocation, \"valueY\") });\r\n if ($type.isNumber(width)) {\r\n var abs = Math.abs(tRadius - bRadius);\r\n if (abs > width) {\r\n var d = (abs - width) / 2;\r\n tRadius += d;\r\n bRadius -= d;\r\n }\r\n }\r\n lAngle = this.xAxis.getAngle(dataItem, xField, dataItem.locations[xField], \"valueX\");\r\n rAngle = this.xAxis.getAngle(dataItem, xOpenField, dataItem.locations[xOpenField], \"valueX\");\r\n }\r\n if (rAngle < lAngle) {\r\n var temp = rAngle;\r\n rAngle = lAngle;\r\n lAngle = temp;\r\n }\r\n lAngle = $math.fitToRange(lAngle, startAngle, endAngle);\r\n rAngle = $math.fitToRange(rAngle, startAngle, endAngle);\r\n var slice = radarColumn.radarColumn;\r\n slice.startAngle = lAngle;\r\n var arc = rAngle - lAngle;\r\n if (arc > 0) {\r\n slice.arc = arc;\r\n slice.radius = tRadius;\r\n slice.innerRadius = bRadius;\r\n radarColumn.__disabled = false;\r\n radarColumn.parent = this.columnsContainer;\r\n $iter.each(this.axisRanges.iterator(), function (axisRange) {\r\n var rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n if (!rangeColumn) {\r\n rangeColumn = _this.columns.create();\r\n $object.forceCopyProperties(_this.columns.template, rangeColumn, visualProperties);\r\n $object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n if (rangeColumn.dataItem) {\r\n $array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n }\r\n dataItem.addSprite(rangeColumn);\r\n rangeColumn.paper = _this.paper; // sometimes pattern is not drawn if is set with adapter without this.\t\t\t\t\t\r\n _this.setColumnStates(rangeColumn);\r\n dataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n }\r\n var slice = rangeColumn.radarColumn;\r\n slice.startAngle = lAngle;\r\n slice.arc = arc;\r\n slice.radius = tRadius;\r\n slice.innerRadius = bRadius;\r\n if (slice.invalid) {\r\n slice.paper = _this.paper;\r\n slice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n }\r\n rangeColumn.__disabled = false;\r\n rangeColumn.parent = axisRange.contents;\r\n });\r\n }\r\n else {\r\n this.disableUnusedColumns(dataItem);\r\n }\r\n };\r\n /**\r\n * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n *\r\n * @param dataItem Data item\r\n * @param xKey Name of X data field\r\n * @param yKey Name of Y data field\r\n * @param locationX X location\r\n * @param locationY Y location\r\n * @param stackKeyX ?\r\n * @param stackKeyY ?\r\n * @returns Coordinates\r\n */\r\n RadarColumnSeries.prototype.getPoint = function (dataItem, xKey, yKey, locationX, locationY, stackKeyX, stackKeyY) {\r\n if (!stackKeyX) {\r\n stackKeyX = \"valueX\";\r\n }\r\n if (!stackKeyY) {\r\n stackKeyY = \"valueY\";\r\n }\r\n var x = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n var y = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n var radius = $math.getDistance({ x: x, y: y });\r\n // hack to be able to determine angle later\r\n if (radius == 0) {\r\n radius = 0.00001;\r\n }\r\n var angle = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n return { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n };\r\n /**\r\n * Returns an SVG path to be used as a mask for the series.\r\n *\r\n * @return SVG path\r\n */\r\n RadarColumnSeries.prototype.getMaskPath = function () {\r\n var renderer = this.yAxis.renderer;\r\n return $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n };\r\n RadarColumnSeries.prototype.positionBulletReal = function (bullet, positionX, positionY) {\r\n var xAxis = this.xAxis;\r\n var yAxis = this.yAxis;\r\n if (positionX < xAxis.start || positionX > xAxis.end || positionY < yAxis.start || positionY > yAxis.end) {\r\n bullet.visible = false;\r\n }\r\n bullet.moveTo(this.xAxis.renderer.positionToPoint(positionX, positionY));\r\n };\r\n RadarColumnSeries.prototype.setXAxis = function (axis) {\r\n _super.prototype.setXAxis.call(this, axis);\r\n this.updateRendererRefs();\r\n };\r\n RadarColumnSeries.prototype.setYAxis = function (axis) {\r\n _super.prototype.setYAxis.call(this, axis);\r\n this.updateRendererRefs();\r\n };\r\n RadarColumnSeries.prototype.updateRendererRefs = function () {\r\n var rendererX = this.xAxis.renderer;\r\n var rendererY = this.yAxis.renderer;\r\n rendererX.axisRendererY = rendererY;\r\n };\r\n return RadarColumnSeries;\r\n}(ColumnSeries));\r\nexport { RadarColumnSeries };\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//# sourceMappingURL=RadarColumnSeries.js.map","/**\r\n * Module that defines everything related to building Funnel slices.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Class used to create [[FunnelSlice]] elements.\r\n *\r\n * @see {@link IFunnelSliceEvents} for a list of available events\r\n * @see {@link IFunnelSliceAdapters} for a list of available adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nvar FunnelSlice = /** @class */ (function (_super) {\r\n __extends(FunnelSlice, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FunnelSlice() {\r\n var _this = _super.call(this) || this;\r\n _this.slice = _this.createChild(Sprite);\r\n _this.slice.shouldClone = false;\r\n _this.slice.setElement(_this.paper.add(\"path\"));\r\n _this.slice.isMeasured = false;\r\n _this.orientation = \"vertical\";\r\n _this.bottomWidth = percent(100);\r\n _this.topWidth = percent(100);\r\n _this.isMeasured = false;\r\n _this.width = 10;\r\n _this.height = 10;\r\n _this.expandDistance = 0;\r\n _this.className = \"FunnelSlice\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the element.\r\n */\r\n FunnelSlice.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var pt = this.pixelPaddingTop;\r\n var pb = this.pixelPaddingBottom;\r\n var pr = this.pixelPaddingRight;\r\n var pl = this.pixelPaddingLeft;\r\n var w = this.pixelWidth - pr - pl;\r\n var h = this.pixelHeight - pt - pb;\r\n var ed = this.expandDistance;\r\n var path = \"\";\r\n if (this.orientation == \"vertical\") {\r\n var tw = $utils.relativeToValue(this.topWidth, w);\r\n var bw = $utils.relativeToValue(this.bottomWidth, w);\r\n var tl = { x: (w - tw) / 2 + pl, y: pt };\r\n var tr = { x: (w + tw) / 2 + pl, y: pt };\r\n var br = { x: (w + bw) / 2 + pl, y: pt + h };\r\n var bl = { x: (w - bw) / 2 + pl, y: pt + h };\r\n var cpr = { x: tr.x + (br.x - tr.x) / 2 + ed * h, y: tr.y + 0.5 * h };\r\n var cpl = { x: tl.x + (bl.x - tl.x) / 2 - ed * h, y: tl.y + 0.5 * h };\r\n var qp1 = $path.lineTo(br);\r\n var qp2 = $path.lineTo(tl);\r\n if (ed != 0) {\r\n qp1 = $path.quadraticCurveTo(br, cpr);\r\n qp2 = $path.quadraticCurveTo(tl, cpl);\r\n }\r\n path = $path.moveTo(tl) + $path.lineTo(tr) + qp1 + $path.lineTo(bl) + qp2;\r\n this.tickPoint = { x: tr.x + (br.x - tr.x) / 2, y: tr.y + (br.y - tr.y) / 2 };\r\n }\r\n else {\r\n var tw = $utils.relativeToValue(this.topWidth, h);\r\n var bw = $utils.relativeToValue(this.bottomWidth, h);\r\n var tt = { x: pl, y: (h - tw) / 2 + pt };\r\n var tb = { x: pl, y: (h + tw) / 2 + pt };\r\n var bt = { x: pl + w, y: (h - bw) / 2 + pt };\r\n var bb = { x: pl + w, y: (h + bw) / 2 + pt };\r\n var cpr = { y: tt.y + (bt.y - tt.y) / 2 - ed * w, x: tt.x + 0.5 * w };\r\n var cpl = { y: tb.y + (bb.y - tb.y) / 2 + ed * w, x: tb.x + 0.5 * w };\r\n var qp1 = $path.lineTo(bt);\r\n var qp2 = $path.lineTo(tb);\r\n if (ed != 0) {\r\n qp1 = $path.quadraticCurveTo(bt, cpr);\r\n qp2 = $path.quadraticCurveTo(tb, cpl);\r\n }\r\n path = $path.moveTo(tb) + $path.lineTo(tt) + qp1 + $path.lineTo(bb) + qp2;\r\n this.tickPoint = { y: tb.y + (bb.y - tb.y) / 2, x: tb.x + (bb.x - tb.x) / 2 };\r\n }\r\n this.slice.path = path;\r\n this.invalidateLayout();\r\n };\r\n FunnelSlice.prototype.getPoint = function (locationX, locationY) {\r\n var pt = this.pixelPaddingTop;\r\n var pb = this.pixelPaddingBottom;\r\n var pr = this.pixelPaddingRight;\r\n var pl = this.pixelPaddingLeft;\r\n var w = this.pixelWidth - pr - pl;\r\n var h = this.pixelHeight - pt - pb;\r\n if (this.orientation == \"vertical\") {\r\n var tw = $utils.relativeToValue(this.topWidth, w);\r\n var bw = $utils.relativeToValue(this.bottomWidth, w);\r\n var tl = { x: (w - tw) / 2 + pl, y: pt };\r\n var tr = { x: (w + tw) / 2 + pl, y: pt };\r\n var br = { x: (w + bw) / 2 + pl, y: pt + h };\r\n var bl = { x: (w - bw) / 2 + pl, y: pt + h };\r\n var mlx = tl.x + (bl.x - tl.x) * locationY;\r\n var mrx = tr.x + (br.x - tr.x) * locationY;\r\n return { x: mlx + (mrx - mlx) * locationX, y: tr.y + (br.y - tr.y) * locationY };\r\n }\r\n else {\r\n var tw = $utils.relativeToValue(this.topWidth, h);\r\n var bw = $utils.relativeToValue(this.bottomWidth, h);\r\n var tt = { x: pl, y: (h - tw) / 2 + pt };\r\n var tb = { x: pl, y: (h + tw) / 2 + pt };\r\n var bt = { x: pl + w, y: (h - bw) / 2 + pt };\r\n var bb = { x: pl + w, y: (h + bw) / 2 + pt };\r\n var mty = tt.y + (bt.y - tt.y) * locationX;\r\n var mby = tb.y + (bb.y - tb.y) * locationX;\r\n return { y: mty + (mby - mty) * locationY, x: tt.x + (bt.x - tt.x) * locationX };\r\n }\r\n };\r\n Object.defineProperty(FunnelSlice.prototype, \"bottomWidth\", {\r\n /**\r\n * @return bottom width\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"bottomWidth\");\r\n },\r\n /**\r\n * Bottom width in pixels or percent.\r\n *\r\n * IMPORTANT: this setting might be used to set dimensions if you use slice\r\n * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n * becomes read-only as it will be automatically reset by series.\r\n *\r\n * @param value Bottom width\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"bottomWidth\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelSlice.prototype, \"topWidth\", {\r\n /**\r\n * @return Top width\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"topWidth\");\r\n },\r\n /**\r\n * Top width in pixels or percent.\r\n *\r\n * IMPORTANT: this setting might be used to set dimensions if you use slice\r\n * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n * becomes read-only as it will be automatically reset by series.\r\n *\r\n * @param value Top width\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"topWidth\", value, true, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelSlice.prototype, \"orientation\", {\r\n /**\r\n * @return Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"orientation\");\r\n },\r\n /**\r\n * Orientation of the funnel slice: \"horizontal\" or \"vertical\".\r\n *\r\n * IMPORTANT: this setting might be used to set orintation if you use slice\r\n * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n * becomes read-only as it will be automatically reset by series.\r\n *\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"orientation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelSlice.prototype, \"expandDistance\", {\r\n /**\r\n * @return expandDistance\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"expandDistance\");\r\n },\r\n /**\r\n * A relative distance slice's sides should be bent to. It's relative to the\r\n * height of the slice.\r\n *\r\n * Zero (default) will mean the sides will be perfectly straight.\r\n *\r\n * Positive value will make them bend outwards, resulting in \"puffed\" slices.\r\n *\r\n * Negative values will make them bend inwards.\r\n *\r\n * @default 0\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"expandDistance\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Copies all parameters from another [[Sprite]].\r\n *\r\n * @param source Source Sprite\r\n */\r\n FunnelSlice.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.slice) {\r\n this.slice.copyFrom(source.slice);\r\n }\r\n };\r\n return FunnelSlice;\r\n}(Container));\r\nexport { FunnelSlice };\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FunnelSlice\"] = FunnelSlice;\r\n//# sourceMappingURL=FunnelSlice.js.map","/**\r\n * Funnel tick module.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Tick } from \"../elements/Tick\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Draws an tick line for a funnel slice connecting it to a related label.\r\n *\r\n * @see {@link IFunnelTickEvents} for a list of available events\r\n * @see {@link IFunnelTickAdapters} for a list of available Adapters\r\n */\r\nvar FunnelTick = /** @class */ (function (_super) {\r\n __extends(FunnelTick, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FunnelTick() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * A label element this tick is attached to.\r\n */\r\n _this._label = new MutableValueDisposer();\r\n /**\r\n * A slice element this tick is attached to.\r\n */\r\n _this._slice = new MutableValueDisposer();\r\n _this.className = \"FunnelTick\";\r\n _this.element = _this.paper.add(\"path\");\r\n _this._disposers.push(_this._label);\r\n _this._disposers.push(_this._slice);\r\n _this.setPropertyValue(\"locationX\", 0);\r\n _this.setPropertyValue(\"locationY\", 0);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Draws the tick element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FunnelTick.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var slice = this.slice;\r\n var point = slice.getPoint(this.locationX, this.locationY);\r\n if (point) {\r\n var label = this.label;\r\n var series = slice.dataItem.component;\r\n var p0 = void 0;\r\n var p1 = void 0;\r\n var p2 = void 0;\r\n if (series.orientation == \"vertical\") {\r\n var x1 = label.pixelX;\r\n var y1 = label.pixelY;\r\n if (!series.labelsOpposite) {\r\n x1 += label.maxRight;\r\n }\r\n p0 = $utils.spritePointToSprite(point, slice, this.parent);\r\n p2 = $utils.spritePointToSprite({ x: x1, y: y1 }, label.parent, this.parent);\r\n p1 = { x: label.parent.pixelX - this.length, y: p2.y };\r\n if (!series.labelsOpposite) {\r\n p1.x = label.parent.measuredWidth + this.length;\r\n }\r\n }\r\n else {\r\n var x1 = label.pixelX;\r\n var y1 = label.pixelY;\r\n if (!series.labelsOpposite) {\r\n y1 += label.maxBottom;\r\n }\r\n p0 = $utils.spritePointToSprite(point, slice, this.parent);\r\n p2 = $utils.spritePointToSprite({ x: x1, y: y1 }, label.parent, this.parent);\r\n p1 = { x: p2.x, y: label.parent.pixelY - this.length };\r\n if (!series.labelsOpposite) {\r\n p1.y = label.parent.measuredHeight + this.length;\r\n }\r\n }\r\n this.path = $path.moveTo(p0) + $path.lineTo(p1) + $path.lineTo(p2);\r\n }\r\n };\r\n Object.defineProperty(FunnelTick.prototype, \"slice\", {\r\n /**\r\n * @return FunnelSlice\r\n */\r\n get: function () {\r\n return this._slice.get();\r\n },\r\n /**\r\n * [[FunnelSlice]] element tick is attached to.\r\n *\r\n * @param slice Slice\r\n */\r\n set: function (slice) {\r\n this._slice.set(slice, new MultiDisposer([\r\n slice.events.on(\"transformed\", this.invalidate, this, false),\r\n slice.events.on(\"validated\", this.invalidate, this, false)\r\n ]));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelTick.prototype, \"label\", {\r\n /**\r\n * @return Label\r\n */\r\n get: function () {\r\n return this._label.get();\r\n },\r\n /**\r\n * [[Label]] element tick is attached to.\r\n *\r\n * @param label Label\r\n */\r\n set: function (label) {\r\n this._label.set(label, label.events.on(\"transformed\", this.invalidate, this, false));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelTick.prototype, \"locationX\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"locationX\");\r\n },\r\n /**\r\n * A relative horizontal position within target element a tick is pointing\r\n * to.\r\n *\r\n * A scale is from 0 to 1, where 0 means left edge, and 1 right edge.\r\n *\r\n * You can also set any value in-between (e.g. 0.5 will point to the middle\r\n * of the slice), or outside 0-1 range, which will put tick anchor position\r\n * outside target element.\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"locationX\", value, false, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelTick.prototype, \"locationY\", {\r\n /**\r\n * @return Location (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"locationY\");\r\n },\r\n /**\r\n * A relative vertical position within target element a tick is pointing\r\n * to.\r\n *\r\n * A scale is from 0 to 1, where 0 means top edge, and 1 bottom edge.\r\n *\r\n * You can also set any value in-between (e.g. 0.5 will point to the middle\r\n * of the slice), or outside 0-1 range, which will put tick anchor position\r\n * outside target element.\r\n *\r\n * @param value Location (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"locationY\", value, false, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FunnelTick;\r\n}(Tick));\r\nexport { FunnelTick };\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[\"FunnelTick\"] = FunnelTick;\r\n//# sourceMappingURL=FunnelTick.js.map","/**\r\n * Defines Funnel Chart Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentSeries, PercentSeriesDataItem } from \"./PercentSeries\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\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 $array from \"../../core/utils/Array\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\nimport { options } from \"../../core/Options\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[FunnelSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar FunnelSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(FunnelSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FunnelSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"FunnelSeriesDataItem\";\r\n // this helps to invalidate series when value is 0 an it is hidden (no other events are triggered then)\r\n _this.events.on(\"visibilitychanged\", function () {\r\n if (_this.component) {\r\n _this.component.invalidateDataItems();\r\n }\r\n }, _this, false);\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(FunnelSeriesDataItem.prototype, \"sliceLink\", {\r\n /**\r\n * A [[FunnelSlice]] element, related to this data item ([[FunnelSlice]]).\r\n *\r\n * @readonly\r\n * @return Slice element\r\n */\r\n get: function () {\r\n var _this = this;\r\n if (!this._sliceLink) {\r\n var sliceLink_1 = this.component.sliceLinks.create();\r\n this._sliceLink = sliceLink_1;\r\n this._disposers.push(sliceLink_1);\r\n sliceLink_1.parent = this.component.slicesContainer;\r\n this._disposers.push(new Disposer(function () {\r\n if (_this.component) {\r\n _this.component.sliceLinks.removeValue(sliceLink_1);\r\n }\r\n }));\r\n this.addSprite(sliceLink_1);\r\n sliceLink_1.visible = this.visible;\r\n }\r\n return this._sliceLink;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FunnelSeriesDataItem;\r\n}(PercentSeriesDataItem));\r\nexport { FunnelSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IFunnelSeriesEvents} for a list of available Events\r\n * @see {@link IFunnelSeriesAdapters} 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\nvar FunnelSeries = /** @class */ (function (_super) {\r\n __extends(FunnelSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function FunnelSeries() {\r\n var _this = _super.call(this) || this;\r\n _this._nextY = 0;\r\n _this.className = \"FunnelSeries\";\r\n _this.orientation = \"vertical\";\r\n _this.width = percent(100);\r\n _this.height = percent(100);\r\n _this.slicesContainer.width = percent(100);\r\n _this.slicesContainer.height = percent(100);\r\n _this._disposers.push(_this.slicesContainer.events.on(\"maxsizechanged\", _this.invalidateDataItems, _this, false));\r\n _this.labelsOpposite = true;\r\n _this.labelsContainer.layout = \"absolute\";\r\n _this.bottomRatio = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Creates a [[FunnelSlice]] element.\r\n *\r\n * @return Slice\r\n */\r\n FunnelSeries.prototype.createSlice = function () {\r\n return new FunnelSlice();\r\n };\r\n /**\r\n * Creates a [[FunnelTick]] element.\r\n *\r\n * @return Tick\r\n */\r\n FunnelSeries.prototype.createTick = function () {\r\n return new FunnelTick();\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n FunnelSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Funnel Series\");\r\n }\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n FunnelSeries.prototype.createDataItem = function () {\r\n return new FunnelSeriesDataItem();\r\n };\r\n /**\r\n * Inits FunnelSlice.\r\n *\r\n * @param slice to init\r\n */\r\n FunnelSeries.prototype.initSlice = function (slice) {\r\n slice.isMeasured = false;\r\n slice.defaultState.properties.scale = 1;\r\n slice.observe(\"scale\", this.handleSliceScale, this);\r\n slice.observe([\"dx\", \"dy\", \"x\", \"y\"], this.handleSliceMove, this);\r\n slice.tooltipText = \"{category}: {value.percent.formatNumber('#.#')}% ({value.value})\";\r\n var hoverState = slice.states.create(\"hover\");\r\n hoverState.properties.expandDistance = 0.2;\r\n };\r\n /**\r\n * [initLabel description]\r\n *\r\n * @todo Description\r\n * @param label [description]\r\n */\r\n FunnelSeries.prototype.initLabel = function (label) {\r\n _super.prototype.initLabel.call(this, label);\r\n label.verticalCenter = \"middle\";\r\n label.horizontalCenter = \"middle\";\r\n label.isMeasured = true;\r\n label.padding(5, 5, 5, 5);\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n FunnelSeries.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n this._nextY = 0;\r\n };\r\n /**\r\n * [validateDataElements description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\r\n FunnelSeries.prototype.validateDataElements = function () {\r\n var _this = this;\r\n var slicesContainer = this.slicesContainer;\r\n var labelsContainer = this.labelsContainer;\r\n var labelTemplate = this.labels.template;\r\n if (this.alignLabels) {\r\n labelTemplate.interactionsEnabled = true;\r\n slicesContainer.isMeasured = true;\r\n labelsContainer.isMeasured = true;\r\n }\r\n else {\r\n labelTemplate.interactionsEnabled = false;\r\n slicesContainer.isMeasured = false;\r\n labelsContainer.isMeasured = false;\r\n }\r\n var total = 0;\r\n var count = 0;\r\n this.dataItems.each(function (dItem) {\r\n if ($type.hasValue(dItem.value)) {\r\n count++;\r\n if (dItem.value > 0) {\r\n total += Math.abs(dItem.getWorkingValue(\"value\") / dItem.value);\r\n }\r\n else {\r\n if (_this.ignoreZeroValues) {\r\n count--;\r\n }\r\n else {\r\n if (!dItem.visible || dItem.__disabled || dItem.isHiding) {\r\n count--;\r\n }\r\n else {\r\n total += 1;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n this._total = 1 / count * total;\r\n this._count = count;\r\n _super.prototype.validateDataElements.call(this);\r\n this.arrangeLabels();\r\n };\r\n /**\r\n * [getNextValue description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n * @return [description]\r\n */\r\n FunnelSeries.prototype.getNextValue = function (dataItem) {\r\n var index = dataItem.index;\r\n var nextValue = dataItem.getWorkingValue(\"value\");\r\n if (index < this.dataItems.length - 1) {\r\n var nextItem = this.dataItems.getIndex(index + 1);\r\n nextValue = nextItem.getWorkingValue(\"value\");\r\n if (!nextItem.visible || nextItem.isHiding || nextItem.__disabled || (nextItem.value == 0 && this.ignoreZeroValues)) {\r\n return this.getNextValue(nextItem);\r\n }\r\n }\r\n return nextValue;\r\n };\r\n /**\r\n * [formDataElement description]\r\n *\r\n * @todo Description\r\n */\r\n FunnelSeries.prototype.formDataElement = function () {\r\n };\r\n /**\r\n * Validates data item's element, effectively redrawing it.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n FunnelSeries.prototype.validateDataElement = function (dataItem) {\r\n var _this = this;\r\n //if ($type.hasValue(dataItem.value)) {\r\n // FunnelSlice\r\n var slice = dataItem.slice;\r\n slice.orientation = this.orientation;\r\n var sliceLink = dataItem.sliceLink;\r\n sliceLink.orientation = this.orientation;\r\n var tick = dataItem.tick;\r\n var label = dataItem.label;\r\n tick.slice = slice;\r\n tick.label = label;\r\n if ($type.hasValue(dataItem.value)) {\r\n this.decorateSlice(dataItem);\r\n $array.each(dataItem.sprites, function (sprite) {\r\n if (dataItem.value == 0 && _this.ignoreZeroValues) {\r\n sprite.__disabled = true;\r\n }\r\n else {\r\n sprite.__disabled = false;\r\n }\r\n });\r\n }\r\n else {\r\n $array.each(dataItem.sprites, function (sprite) {\r\n sprite.__disabled = true;\r\n });\r\n }\r\n if (dataItem.index == this.dataItems.length - 1) {\r\n sliceLink.disabled = true;\r\n }\r\n // do this at the end, otherwise bullets won't be positioned properly\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n sliceLink.fill = slice.fill;\r\n //}\r\n };\r\n /**\r\n * [decorateSlice description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n */\r\n FunnelSeries.prototype.decorateSlice = function (dataItem) {\r\n var slice = dataItem.slice;\r\n var sliceLink = dataItem.sliceLink;\r\n var label = dataItem.label;\r\n var tick = dataItem.tick;\r\n var maxWidth = this.slicesContainer.innerWidth;\r\n var maxHeight = this.slicesContainer.innerHeight;\r\n var nextValue = this.getNextValue(dataItem);\r\n var workingValue = Math.abs(dataItem.getWorkingValue(\"value\"));\r\n var bottomRatio = this.bottomRatio;\r\n var d = 1;\r\n if (dataItem.value != 0) {\r\n d = workingValue / Math.abs(dataItem.value);\r\n }\r\n else {\r\n if (dataItem.__disabled || dataItem.isHiding || !dataItem.visible) {\r\n d = 0.000001;\r\n }\r\n }\r\n if (this.ignoreZeroValues && dataItem.value == 0) {\r\n dataItem.__disabled = true;\r\n return;\r\n }\r\n else {\r\n dataItem.__disabled = false;\r\n }\r\n if (this._nextY == Infinity) {\r\n this._nextY = 0;\r\n }\r\n if (this.orientation == \"vertical\") {\r\n var linkHeight = sliceLink.pixelHeight * d;\r\n maxHeight = maxHeight + linkHeight; // to avoid one link gap in the bottom\r\n slice.topWidth = workingValue / this.dataItem.values.value.high * maxWidth;\r\n slice.bottomWidth = (workingValue - (workingValue - nextValue) * bottomRatio) / this.dataItem.values.value.high * maxWidth;\r\n sliceLink.topWidth = slice.bottomWidth;\r\n sliceLink.bottomWidth = (workingValue - (workingValue - nextValue)) / this.dataItem.values.value.high * maxWidth;\r\n slice.y = this._nextY;\r\n slice.height = Math.min(100000, $math.max(0, maxHeight / this._count * d / this._total - linkHeight));\r\n slice.x = maxWidth / 2;\r\n if (!this.alignLabels) {\r\n label.x = slice.x;\r\n }\r\n else {\r\n label.x = undefined;\r\n }\r\n label.y = slice.pixelY + slice.pixelHeight * tick.locationY;\r\n this._nextY += slice.pixelHeight + linkHeight;\r\n sliceLink.y = this._nextY - linkHeight;\r\n sliceLink.x = slice.x;\r\n }\r\n else {\r\n var linkWidth = sliceLink.pixelWidth * d;\r\n maxWidth = maxWidth + linkWidth; // to avoid one link gap in the bottom\r\n slice.topWidth = workingValue / this.dataItem.values.value.high * maxHeight;\r\n slice.bottomWidth = (workingValue - (workingValue - nextValue) * bottomRatio) / this.dataItem.values.value.high * maxHeight;\r\n sliceLink.topWidth = slice.bottomWidth;\r\n sliceLink.bottomWidth = (workingValue - (workingValue - nextValue)) / this.dataItem.values.value.high * maxHeight;\r\n slice.x = this._nextY;\r\n slice.width = Math.min(100000, maxWidth / this._count * d * 1 / this._total - linkWidth);\r\n slice.y = maxHeight / 2;\r\n if (!this.alignLabels) {\r\n label.y = slice.y;\r\n }\r\n else {\r\n label.y = this.labelsContainer.measuredHeight;\r\n }\r\n label.x = slice.pixelX + slice.pixelWidth * tick.locationX;\r\n this._nextY += slice.pixelWidth + linkWidth;\r\n sliceLink.x = this._nextY - linkWidth;\r\n sliceLink.y = slice.y;\r\n }\r\n };\r\n FunnelSeries.prototype.getLastLabel = function (index) {\r\n if (index > 0) {\r\n var lastLabel = this.labels.getIndex(index);\r\n if (lastLabel.__disabled || !lastLabel.visible) {\r\n return this.getLastLabel(index - 1);\r\n }\r\n else {\r\n return lastLabel;\r\n }\r\n }\r\n };\r\n /**\r\n * [arrangeLabels description]\r\n *\r\n * @todo Description\r\n */\r\n FunnelSeries.prototype.arrangeLabels = function () {\r\n if (this.alignLabels) {\r\n var count = this.labels.length;\r\n if (count > 1) {\r\n var lastLabel = this.getLastLabel(count - 1);\r\n if (lastLabel) {\r\n var lastY = lastLabel.pixelY;\r\n var lastX = lastLabel.pixelX;\r\n if (count > 1) {\r\n for (var i = count - 2; i >= 0; i--) {\r\n var label = this.labels.getIndex(i);\r\n if (label.visible && !label.__disabled) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n if (this.orientation == \"vertical\") {\r\n if (label.pixelY + label.measuredHeight > lastY) {\r\n label.y = Math.min(1000000, lastY - label.measuredHeight);\r\n }\r\n }\r\n // horizontal\r\n else {\r\n if (label.pixelX + label.measuredWidth > lastX) {\r\n label.x = Math.min(1000000, lastX - label.measuredWidth);\r\n }\r\n }\r\n lastY = label.pixelY;\r\n lastX = label.pixelX;\r\n }\r\n }\r\n lastY = 0;\r\n lastX = 0;\r\n for (var i = 0; i < count; i++) {\r\n var label = this.labels.getIndex(i);\r\n if (label.visible && !label.__disabled) {\r\n if (label.invalid) {\r\n label.validate();\r\n }\r\n if (this.orientation == \"vertical\") {\r\n if (label.pixelY < lastY) {\r\n label.y = Math.min(1000000, lastY);\r\n }\r\n }\r\n // horizontal\r\n else {\r\n if (label.pixelX < lastX) {\r\n label.x = Math.min(1000000, lastX);\r\n }\r\n }\r\n lastY += label.measuredHeight;\r\n lastX += label.measuredWidth;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Positions series bullet.\r\n *\r\n * @ignore Exclude from docs\r\n * @param bullet Bullet\r\n */\r\n FunnelSeries.prototype.positionBullet = function (bullet) {\r\n _super.prototype.positionBullet.call(this, bullet);\r\n var dataItem = bullet.dataItem;\r\n var slice = dataItem.slice;\r\n var locationX = bullet.locationX;\r\n if (!$type.isNumber(locationX)) {\r\n locationX = 0.5;\r\n }\r\n var locationY = bullet.locationY;\r\n if (!$type.isNumber(locationY)) {\r\n locationY = 1;\r\n }\r\n bullet.x = slice.pixelX + slice.measuredWidth * locationX;\r\n bullet.y = slice.pixelY + slice.measuredHeight * locationY;\r\n };\r\n Object.defineProperty(FunnelSeries.prototype, \"orientation\", {\r\n /**\r\n * @return Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"orientation\");\r\n },\r\n /**\r\n * Orientation of the funnel slices: \"horizontal\" or \"vertical\" (default).\r\n *\r\n * @default \"vertical\"\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"orientation\", value)) {\r\n this.labelsOpposite = this.labelsOpposite;\r\n this.invalidate();\r\n if (value == \"vertical\") {\r\n this.ticks.template.locationX = 1;\r\n this.ticks.template.locationY = 0.5;\r\n this.labels.template.rotation = 0;\r\n this.layout = \"horizontal\";\r\n }\r\n else {\r\n this.ticks.template.locationX = 0.5;\r\n this.ticks.template.locationY = 1;\r\n this.labels.template.rotation = -90;\r\n this.layout = \"vertical\";\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelSeries.prototype, \"bottomRatio\", {\r\n /**\r\n * @return {number}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"bottomRatio\");\r\n },\r\n /**\r\n * Indicates how slice's bottom will change in relation to slices top AND\r\n * next slices top.\r\n *\r\n * Basically it's a relative value (0-1) that indicates bottom width\r\n * position between current slice's top width and the top withd of the next\r\n * one.\r\n *\r\n * The scale goes from 0 (closer to current slice width) to 1 (closer to next\r\n * slice with).\r\n *\r\n * `0` (default) will mean that bottom will be the same as top, resulting in\r\n * a prefectly square slice.\r\n *\r\n * From the data-viz standpoint `0` is a correct setting, since area of the\r\n * slices will depict their value correctly.\r\n *\r\n * `1` will mean that slice will become trapezoid with its bottom matching\r\n * width of the next slice.\r\n *\r\n * `0.5` will make bottom width be in the middle of width of current slice\r\n * and the next slice.\r\n *\r\n * @default 0\r\n * @param {number}\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"bottomRatio\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FunnelSeries.prototype, \"sliceLinks\", {\r\n /**\r\n * A list of elements linking each actual slice.\r\n *\r\n * Please note that links are [[FunnelSlice]] objects, just like real links,\r\n * so they have all the same configuration options.\r\n *\r\n * You can use `template` of this link, to specify how links will look.\r\n *\r\n * ```TypeScript\r\n * series.sliceLinks.template.fillOpacity = 0.5;\r\n * ```\r\n * ```JavaScript\r\n * series.sliceLinks.template.fillOpacity = 0.5;\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * \"type\": \"FunnelSeries\",\r\n * // ...\r\n * \"sliceLinks\": {\r\n * \"fillOpacity\": 0.5\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @return Funnel links\r\n */\r\n get: function () {\r\n if (!this._sliceLinks) {\r\n var sliceLink = new FunnelSlice();\r\n sliceLink.applyOnClones = true;\r\n sliceLink.fillOpacity = 0.5;\r\n sliceLink.expandDistance = -0.3;\r\n sliceLink.hiddenState.properties.opacity = 0;\r\n this._disposers.push(sliceLink);\r\n this._sliceLinks = new ListTemplate(sliceLink);\r\n this._disposers.push(new ListDisposer(this._sliceLinks));\r\n }\r\n return this._sliceLinks;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Shows hidden series.\r\n *\r\n * @param duration Duration of reveal animation (ms)\r\n * @return Animation\r\n */\r\n FunnelSeries.prototype.show = function (duration) {\r\n var _this = this;\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var interpolationDuration = this.defaultState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n if (!options.animationsEnabled) {\r\n interpolationDuration = 0;\r\n }\r\n var delay = 0;\r\n $iter.each($iter.indexed(this.dataItems.iterator()), function (a) {\r\n var i = a[0];\r\n var dataItem = a[1];\r\n if (_this.sequencedInterpolation) {\r\n delay = _this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n }\r\n dataItem.show(interpolationDuration, delay, [\"value\"]);\r\n });\r\n var animation = _super.prototype.show.call(this, duration);\r\n return animation;\r\n };\r\n /**\r\n * Hides series.\r\n *\r\n * @param duration Duration of hiding animation (ms)\r\n * @return Animation\r\n */\r\n FunnelSeries.prototype.hide = function (duration) {\r\n var _this = this;\r\n var fields = [\"value\"];\r\n var value = 0;\r\n var startIndex = this.startIndex;\r\n var endIndex = this.endIndex;\r\n var delay = 0;\r\n var interpolationDuration = this.hiddenState.transitionDuration;\r\n if ($type.isNumber(duration)) {\r\n interpolationDuration = duration;\r\n }\r\n if (!options.animationsEnabled) {\r\n interpolationDuration = 0;\r\n }\r\n $iter.each($iter.indexed(this.dataItems.iterator()), function (a) {\r\n var i = a[0];\r\n var dataItem = a[1];\r\n if (_this.sequencedInterpolation) {\r\n delay = _this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n }\r\n dataItem.hide(interpolationDuration, delay, value, fields);\r\n });\r\n var animation = _super.prototype.hide.call(this, duration);\r\n if (animation && !animation.isFinished()) {\r\n animation.delay(delay);\r\n }\r\n return animation;\r\n };\r\n /**\r\n * @ignore\r\n */\r\n FunnelSeries.prototype.setAlignLabels = function (value) {\r\n _super.prototype.setAlignLabels.call(this, value);\r\n this.ticks.template.disabled = !value;\r\n var labelsContainer = this.labelsContainer;\r\n if (labelsContainer) {\r\n // do not align\r\n if (!value) {\r\n labelsContainer.width = percent(100);\r\n labelsContainer.height = percent(100);\r\n }\r\n //align\r\n else {\r\n labelsContainer.height = undefined;\r\n labelsContainer.width = undefined;\r\n labelsContainer.margin(10, 10, 10, 10);\r\n }\r\n }\r\n this.labelsOpposite = this.labelsOpposite;\r\n };\r\n Object.defineProperty(FunnelSeries.prototype, \"labelsOpposite\", {\r\n /**\r\n * @return Labels on opposite side?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"labelsOpposite\");\r\n },\r\n /**\r\n * Put labels on the oppsite side of the series?\r\n *\r\n * This setting is only used if `alignLabels = true`.\r\n *\r\n * If set to `true` (default) labels will be drawn to the right (on vertical\r\n * series), or to the bottom (on horizontal series).\r\n *\r\n * If set to `false`, labels will be positioned to the left or top\r\n * respectively.\r\n *\r\n * @default true\r\n * @since 4.1.13\r\n * @param value Labels on opposite side?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"labelsOpposite\", value);\r\n var labelTemplate = this.labels.template;\r\n var labelAlign = \"none\";\r\n var labelValign = \"none\";\r\n if (!this.alignLabels) {\r\n if (this.orientation == \"vertical\") {\r\n labelAlign = \"center\";\r\n }\r\n else {\r\n labelValign = \"middle\";\r\n }\r\n }\r\n else {\r\n // opposite (left/bottom)\r\n if (value) {\r\n this.labelsContainer.toFront();\r\n // left\r\n if (this.orientation == \"vertical\") {\r\n this.ticks.template.locationX = 1;\r\n labelTemplate.horizontalCenter = \"left\";\r\n labelAlign = \"right\";\r\n }\r\n // bottom\r\n else {\r\n this.ticks.template.locationY = 1;\r\n labelTemplate.horizontalCenter = \"right\";\r\n labelValign = \"bottom\";\r\n }\r\n }\r\n // non oposite (right/top)\r\n else {\r\n this.labelsContainer.toBack();\r\n // right\r\n if (this.orientation == \"vertical\") {\r\n this.ticks.template.locationX = 0;\r\n labelAlign = \"left\";\r\n }\r\n // top\r\n else {\r\n labelValign = \"top\";\r\n this.ticks.template.locationY = 0;\r\n }\r\n }\r\n }\r\n labelTemplate.align = labelAlign;\r\n labelTemplate.valign = labelValign;\r\n this.validateLayout();\r\n this.ticks.each(function (tick) {\r\n tick.invalidate();\r\n });\r\n this.invalidateDataItems();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FunnelSeries;\r\n}(PercentSeries));\r\nexport { FunnelSeries };\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[\"FunnelSeries\"] = FunnelSeries;\r\nregistry.registeredClasses[\"FunnelSeriesDataItem\"] = FunnelSeriesDataItem;\r\n//# sourceMappingURL=FunnelSeries.js.map","/**\r\n * Defines Pyramid Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FunnelSeries, FunnelSeriesDataItem } from \"./FunnelSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[PyramidSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PyramidSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(PyramidSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PyramidSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PyramidSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PyramidSeriesDataItem;\r\n}(FunnelSeriesDataItem));\r\nexport { PyramidSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar PyramidSeries = /** @class */ (function (_super) {\r\n __extends(PyramidSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PyramidSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PyramidSeries\";\r\n _this.topWidth = percent(0);\r\n _this.bottomWidth = percent(100);\r\n _this.pyramidHeight = percent(100);\r\n _this.valueIs = \"area\";\r\n _this.sliceLinks.template.width = 0;\r\n _this.sliceLinks.template.height = 0;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n PyramidSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Pyramid Series\");\r\n }\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n PyramidSeries.prototype.createDataItem = function () {\r\n return new PyramidSeriesDataItem();\r\n };\r\n /**\r\n * (Re)validates the whole series, effectively causing it to redraw.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n PyramidSeries.prototype.validate = function () {\r\n _super.prototype.validate.call(this);\r\n this._nextWidth = undefined;\r\n };\r\n /**\r\n * [getNextValue description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n * @return [description]\r\n */\r\n PyramidSeries.prototype.getNextValue = function (dataItem) {\r\n var index = dataItem.index;\r\n var nextValue = dataItem.getWorkingValue(\"value\");\r\n if (index < this.dataItems.length - 1) {\r\n var nextItem = this.dataItems.getIndex(index + 1);\r\n nextValue = nextItem.getWorkingValue(\"value\");\r\n }\r\n if (nextValue == 0) {\r\n nextValue = 0.000001;\r\n }\r\n return nextValue;\r\n };\r\n /**\r\n * [validateDataElements description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\r\n PyramidSeries.prototype.validateDataElements = function () {\r\n var _this = this;\r\n var maxWidth = this.slicesContainer.innerWidth;\r\n var maxHeight = this.slicesContainer.innerHeight;\r\n this.dataItems.each(function (dataItem) {\r\n if (dataItem.value > 0) {\r\n var relValue = dataItem.getWorkingValue(\"value\") / dataItem.value;\r\n var sliceLink = dataItem.sliceLink;\r\n if (_this.orientation == \"vertical\") {\r\n maxHeight -= (sliceLink.pixelHeight * relValue);\r\n }\r\n else {\r\n maxWidth -= (sliceLink.pixelWidth * relValue);\r\n }\r\n }\r\n });\r\n this._pyramidHeight = $utils.relativeToValue(this.pyramidHeight, maxHeight);\r\n this._pyramidWidth = $utils.relativeToValue(this.pyramidHeight, maxWidth);\r\n if (this.orientation == \"vertical\") {\r\n var y = (maxHeight - this._pyramidHeight) / 2;\r\n this.slicesContainer.y = y;\r\n this.labelsContainer.y = y;\r\n this.ticksContainer.y = y;\r\n }\r\n else {\r\n var x = (maxWidth - this._pyramidWidth) / 2;\r\n this.slicesContainer.x = x;\r\n this.labelsContainer.x = x;\r\n this.ticksContainer.x = x;\r\n }\r\n _super.prototype.validateDataElements.call(this);\r\n };\r\n /**\r\n * [decorateSlice description]\r\n *\r\n * @todo Description\r\n * @param dataItem [description]\r\n */\r\n PyramidSeries.prototype.decorateSlice = function (dataItem) {\r\n var sum = this.dataItem.values.value.absoluteSum;\r\n if (sum == 0) {\r\n return;\r\n }\r\n var slice = dataItem.slice;\r\n var sliceLink = dataItem.sliceLink;\r\n var label = dataItem.label;\r\n var tick = dataItem.tick;\r\n // TODO can this be removed ?\r\n this.getNextValue(dataItem);\r\n var workingValue = Math.abs(dataItem.getWorkingValue(\"value\"));\r\n var pyramidWidth = this._pyramidWidth;\r\n var pyramidHeight = this._pyramidHeight;\r\n var maxWidth = this.slicesContainer.innerWidth;\r\n var maxHeight = this.slicesContainer.innerHeight;\r\n var linkWidth = sliceLink.pixelWidth;\r\n var linkHeight = sliceLink.pixelHeight;\r\n if ((dataItem.value == 0 || dataItem.value == null) && this.ignoreZeroValues) {\r\n dataItem.__disabled = true;\r\n }\r\n else {\r\n dataItem.__disabled = false;\r\n }\r\n if (this.orientation == \"vertical\") {\r\n var topWidth = $utils.relativeToValue(this.topWidth, maxWidth);\r\n if (!$type.isNumber(this._nextWidth)) {\r\n this._nextWidth = topWidth;\r\n }\r\n var bottomWidth = $utils.relativeToValue(this.bottomWidth, maxWidth);\r\n var sliceTopWidth = this._nextWidth;\r\n var angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\r\n var c = Math.tan(Math.PI / 2 - angle);\r\n if (c == 0) {\r\n c = 0.00000001;\r\n }\r\n var sliceHeight = void 0;\r\n var sliceBottomWidth = void 0;\r\n if (this.valueIs == \"area\") {\r\n var totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\r\n var square = totalSquare * workingValue / sum;\r\n var s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\r\n sliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\r\n if (sliceHeight > 0) {\r\n sliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\r\n }\r\n else {\r\n sliceBottomWidth = sliceTopWidth;\r\n }\r\n }\r\n else {\r\n sliceHeight = pyramidHeight * workingValue / sum;\r\n sliceBottomWidth = sliceTopWidth - sliceHeight * c;\r\n }\r\n slice.height = sliceHeight;\r\n slice.width = maxWidth;\r\n slice.bottomWidth = sliceBottomWidth;\r\n slice.topWidth = sliceTopWidth;\r\n sliceLink.topWidth = slice.bottomWidth;\r\n sliceLink.bottomWidth = slice.bottomWidth;\r\n slice.y = this._nextY;\r\n //slice.x = maxWidth / 2;\r\n if (!this.alignLabels) {\r\n label.x = maxWidth / 2;\r\n }\r\n else {\r\n label.x = 0;\r\n }\r\n label.y = slice.pixelY + slice.pixelHeight * tick.locationY + slice.dy;\r\n this._nextY += slice.pixelHeight + linkHeight * workingValue / Math.max(Math.abs(dataItem.value), 0.00000001);\r\n sliceLink.y = this._nextY - linkHeight;\r\n sliceLink.x = maxWidth / 2;\r\n }\r\n else {\r\n var topWidth = $utils.relativeToValue(this.topWidth, maxHeight);\r\n if (!$type.isNumber(this._nextWidth)) {\r\n this._nextWidth = topWidth;\r\n }\r\n var bottomWidth = $utils.relativeToValue(this.bottomWidth, maxHeight);\r\n var sliceTopWidth = this._nextWidth;\r\n var angle = Math.atan2(pyramidWidth, topWidth - bottomWidth);\r\n var c = Math.tan(Math.PI / 2 - angle);\r\n if (c == 0) {\r\n c = 0.00000001;\r\n }\r\n var sliceWidth = void 0;\r\n var sliceBottomWidth = void 0;\r\n if (this.valueIs == \"area\") {\r\n var totalSquare = (topWidth + bottomWidth) / 2 * pyramidWidth;\r\n var square = totalSquare * workingValue / sum;\r\n sliceWidth = (sliceTopWidth - Math.sqrt(sliceTopWidth * sliceTopWidth - 2 * square * c)) / c;\r\n sliceBottomWidth = (2 * square - sliceWidth * sliceTopWidth) / sliceWidth;\r\n }\r\n else {\r\n sliceWidth = pyramidWidth * workingValue / sum;\r\n sliceBottomWidth = sliceTopWidth - sliceWidth * c;\r\n }\r\n slice.width = sliceWidth;\r\n slice.height = maxHeight;\r\n slice.bottomWidth = sliceBottomWidth;\r\n slice.topWidth = sliceTopWidth;\r\n sliceLink.topWidth = slice.bottomWidth;\r\n sliceLink.bottomWidth = slice.bottomWidth;\r\n slice.x = this._nextY;\r\n if (!this.alignLabels) {\r\n label.y = maxHeight / 2;\r\n }\r\n else {\r\n label.y = this.labelsContainer.measuredHeight;\r\n }\r\n label.x = slice.pixelX + slice.pixelWidth * tick.locationX + slice.dx;\r\n this._nextY += slice.pixelWidth + linkWidth * workingValue / Math.max(Math.abs(dataItem.value), 0.00000001);\r\n sliceLink.x = this._nextY - linkWidth;\r\n sliceLink.y = maxHeight / 2;\r\n }\r\n this._nextWidth = slice.bottomWidth;\r\n };\r\n Object.defineProperty(PyramidSeries.prototype, \"topWidth\", {\r\n /**\r\n * @return {number | Percent}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"topWidth\");\r\n },\r\n /**\r\n * Width of the pyramid's tip in pixels or relative (`Percent`).\r\n *\r\n * `0%` (default) means the pyramid will be perfectly pointy.\r\n * `50%` will have a cut off / blunt top that is half the width of the chart.\r\n * `100%` will take the whole width of the chart.\r\n *\r\n * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n * `100%` and `bottomWidth` to `0%`.\r\n *\r\n * @default 0%\r\n * @param {number | Percent}\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"topWidth\", value, false, false, 10, false)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PyramidSeries.prototype, \"pyramidHeight\", {\r\n /**\r\n * @return {number | Percent}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"pyramidHeight\");\r\n },\r\n /**\r\n * Height of pyramid\r\n *\r\n *\r\n * @default 100%\r\n * @param {number | Percent}\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"pyramidHeight\", value, false, false, 10, false)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PyramidSeries.prototype, \"bottomWidth\", {\r\n /**\r\n * @return {number | Percent}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"bottomWidth\");\r\n },\r\n /**\r\n * Width of the pyramid's bottom (bsae) in pixels or relative (`Percent`).\r\n *\r\n * `0%` means the pyramid's botto will be pointy.\r\n * `50%` will have a cut off / blunt bottom that is half the width of the chart.\r\n * `100%` (default) will take the whole width of the chart.\r\n *\r\n * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n * `100%` and `bottomWidth` to `0%`.\r\n *\r\n * @param {number | Percent}\r\n */\r\n set: function (value) {\r\n if (this.setPercentProperty(\"bottomWidth\", value, false, false, 10, false)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PyramidSeries.prototype, \"valueIs\", {\r\n /**\r\n * @return {\"area\" | \"height\"}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"valueIs\");\r\n },\r\n /**\r\n * Indicates how slice's value will influence its size.\r\n *\r\n * `\"area\"` (default) means that the whole area of the pyramid (counting in\r\n * modifications by `topWidth` and `bottomWidth`) will be divvied up between\r\n * slices based on their value.\r\n *\r\n * With this setting at `\"area\"` the area of the trapezoids of each slice\r\n * will represent their value relatively to values of the other slices.\r\n *\r\n * This is a correct way to depict \"weight\" of each slice based on their\r\n * values.\r\n *\r\n * `\"height\"` means whole height (as opposed to area) of the pyramid will be\r\n * divvied up between slices. Actual slice width or area is not counted in.\r\n *\r\n * From the data-viz standpoint this does not make a lot of sense, since\r\n * slices with lesser values might appear more prominent if they are placed\r\n * towards thick end of the pyramid since their areas will be bigger.\r\n *\r\n * @default \"area\"\r\n * @param {\"area\" | \"height\"}\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"valueIs\", value)) {\r\n this.invalidate();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PyramidSeries;\r\n}(FunnelSeries));\r\nexport { PyramidSeries };\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//# sourceMappingURL=PyramidSeries.js.map","/**\r\n * Defines Pictorial Stacked Series.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PyramidSeries, PyramidSeriesDataItem } from \"./PyramidSeries\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n//@todo: sequenced?\r\n/**\r\n * Defines a [[DataItem]] for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar PictorialStackedSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(PictorialStackedSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PictorialStackedSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PictorialStackedSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return PictorialStackedSeriesDataItem;\r\n}(PyramidSeriesDataItem));\r\nexport { PictorialStackedSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar PictorialStackedSeries = /** @class */ (function (_super) {\r\n __extends(PictorialStackedSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function PictorialStackedSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"PictorialStackedSeries\";\r\n _this.topWidth = percent(100);\r\n _this.bottomWidth = percent(100);\r\n _this.valueIs = \"height\";\r\n _this.applyTheme();\r\n _this.startLocation = 0;\r\n _this.endLocation = 1;\r\n _this.align = \"center\";\r\n _this.valign = \"middle\";\r\n _this._maskSprite = _this.slicesContainer.createChild(Sprite);\r\n _this._maskSprite.visible = false;\r\n _this._maskSprite.zIndex = 100;\r\n _this._maskSprite.shouldClone = false;\r\n return _this;\r\n }\r\n /**\r\n * Sizes the mask to fit the series.\r\n *\r\n * @ignore\r\n */\r\n PictorialStackedSeries.prototype.validateDataElements = function () {\r\n var maxWidth = this.slicesContainer.maxWidth;\r\n var maxHeight = this.slicesContainer.maxHeight;\r\n var maskSprite = this._maskSprite;\r\n //maskSprite.validatePosition(); // for some reason size of the maskSprite is 0x0 after we removed validatePosition in afterdraw\r\n var pictureWidth = maskSprite.measuredWidth / maskSprite.scale;\r\n var pictureHeight = maskSprite.measuredHeight / maskSprite.scale;\r\n var scale = $math.min(maxHeight / pictureHeight, maxWidth / pictureWidth);\r\n if (scale == Infinity) {\r\n scale = 1; // can't return here, won't draw legend properly\r\n }\r\n scale = $math.max(0.001, scale);\r\n var startLocation = this.startLocation;\r\n var endLocation = this.endLocation;\r\n var newWidth = $math.min(maxWidth, pictureWidth * scale);\r\n var newHeight = $math.min(maxHeight, pictureHeight * scale);\r\n maskSprite.scale = scale;\r\n if (this.orientation == \"vertical\") {\r\n this.topWidth = newWidth + 4;\r\n this.bottomWidth = newWidth + 4;\r\n this.pyramidHeight = newHeight * (endLocation - startLocation);\r\n maskSprite.x = maxWidth / 2;\r\n maskSprite.y = newHeight / 2;\r\n }\r\n else {\r\n this.topWidth = newHeight + 4;\r\n this.bottomWidth = newHeight + 4;\r\n this.pyramidHeight = newWidth * (endLocation - startLocation);\r\n maskSprite.valign = \"middle\";\r\n maskSprite.x = newWidth / 2;\r\n maskSprite.y = maxHeight / 2;\r\n }\r\n maskSprite.verticalCenter = \"middle\";\r\n maskSprite.horizontalCenter = \"middle\";\r\n _super.prototype.validateDataElements.call(this);\r\n var y;\r\n var x;\r\n if (this.orientation == \"vertical\") {\r\n if (this.valign == \"bottom\") {\r\n y = (maxHeight - newHeight);\r\n }\r\n if (this.valign == \"middle\") {\r\n y = (maxHeight - newHeight) / 2;\r\n }\r\n if (this.valign == \"top\") {\r\n y = 0;\r\n }\r\n if (this.align == \"left\") {\r\n x = -(maxWidth - newWidth) / 2;\r\n }\r\n if (this.align == \"center\") {\r\n x = 0;\r\n }\r\n if (this.align == \"right\") {\r\n x = (maxWidth - newWidth) / 2;\r\n }\r\n this.slices.template.dy = startLocation * newHeight;\r\n if (this.alignLabels) {\r\n this.slicesContainer.dx = x;\r\n }\r\n }\r\n else {\r\n if (this.valign == \"bottom\") {\r\n y = (maxHeight - newHeight) / 2;\r\n }\r\n if (this.valign == \"middle\") {\r\n y = 0;\r\n }\r\n if (this.valign == \"top\") {\r\n y = -(maxHeight - newHeight) / 2;\r\n }\r\n if (this.align == \"left\") {\r\n x = 0;\r\n }\r\n if (this.align == \"center\") {\r\n x = (maxWidth - newWidth) / 2;\r\n }\r\n if (this.align == \"right\") {\r\n x = (maxWidth - newWidth);\r\n }\r\n this.slices.template.dx = startLocation * newWidth;\r\n if (this.alignLabels) {\r\n this.slicesContainer.dy = y;\r\n }\r\n }\r\n this.slicesContainer.x = x;\r\n this.labelsContainer.x = x;\r\n this.ticksContainer.x = x;\r\n this.slicesContainer.y = y;\r\n this.labelsContainer.y = y;\r\n this.ticksContainer.y = y;\r\n if (newWidth > 0 && newHeight > 0) {\r\n this.slicesContainer.mask = maskSprite;\r\n }\r\n };\r\n /**\r\n * Sets defaults that instantiate some objects that rely on parent, so they\r\n * cannot be set in constructor.\r\n */\r\n PictorialStackedSeries.prototype.applyInternalDefaults = function () {\r\n _super.prototype.applyInternalDefaults.call(this);\r\n if (!$type.hasValue(this.readerTitle)) {\r\n this.readerTitle = this.language.translate(\"Pyramid Series\");\r\n }\r\n };\r\n /**\r\n * Returns a new/empty DataItem of the type appropriate for this object.\r\n *\r\n * @see {@link DataItem}\r\n * @return Data Item\r\n */\r\n PictorialStackedSeries.prototype.createDataItem = function () {\r\n return new PictorialStackedSeriesDataItem();\r\n };\r\n Object.defineProperty(PictorialStackedSeries.prototype, \"maskSprite\", {\r\n /**\r\n * A [[Sprite]] element that is used as a series mask.\r\n *\r\n * If set, this element's shape will be used to apply shape to the whole\r\n * stacked pictorial series.\r\n *\r\n * You can use this element's `path` property to set an SVG path for the\r\n * shape:\r\n *\r\n * ```TypeScript\r\n * 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 * // ...\r\n * series.maskSprite.path = iconPath;\r\n * ```\r\n * ```JavaScript\r\n * 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 * // ...\r\n * series.maskSprite.path = iconPath;\r\n * ```\r\n * ```JSON\r\n * 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 * // ...\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * \"type\": \"PictorialStackedSeries\",\r\n * // ...\r\n * \"maskSprite\": {\r\n * \"path\": iconPath\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @return Mask sprite\r\n */\r\n get: function () {\r\n return this._maskSprite;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Inits FunnelSlice.\r\n *\r\n * @param slice to init\r\n */\r\n PictorialStackedSeries.prototype.initSlice = function (slice) {\r\n _super.prototype.initSlice.call(this, slice);\r\n var hs = slice.states.getKey(\"hover\");\r\n if (hs) {\r\n hs.properties.expandDistance = 0;\r\n }\r\n };\r\n Object.defineProperty(PictorialStackedSeries.prototype, \"startLocation\", {\r\n /**\r\n * @return Start location\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startLocation\");\r\n },\r\n /**\r\n * Relative location to start series from.\r\n *\r\n * Range of values: 0 to 1.\r\n *\r\n * This setting indicates where actual slices will start relatively to the\r\n * whole height/width of the series.\r\n *\r\n * For example, if we want slices to start at 30% from the top/left of the\r\n * series, we can set `startLocation = 0.3`.\r\n *\r\n * To fill shape outside of the location range, use background of the\r\n * property `slicesContainer`.\r\n *\r\n * ```TypeScript\r\n * series.startLocation = 0.2;\r\n * series.endLocation = 0.8;\r\n * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n * ```\r\n * ```JavaScript\r\n * series.startLocation = 0.2;\r\n * series.endLocation = 0.8;\r\n * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"startLocation\": 0.2,\r\n * \"endLocation\": 0.8,\r\n * \"slicesContainer\": {\r\n * \"background\": {\r\n * \"fill\": \"#eee\"\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @default 0\r\n * @since 4.1.13\r\n * @param value Start location\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"startLocation\", value)) {\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(PictorialStackedSeries.prototype, \"endLocation\", {\r\n /**\r\n * @return End location\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endLocation\");\r\n },\r\n /**\r\n * Relative location to end series at.\r\n *\r\n * Range of values: 0 to 1.\r\n *\r\n * This setting indicates where actual slices will end relatively to the\r\n * whole height/width of the series.\r\n *\r\n * For example, if we want slices to end at 70% from the top/left of the\r\n * series, we can set `endLocation = 0.7`.\r\n *\r\n * To fill shape outside of the location range, use background of the\r\n * property `slicesContainer`.\r\n *\r\n * ```TypeScript\r\n * series.startLocation = 0.2;\r\n * series.endLocation = 0.8;\r\n * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n * ```\r\n * ```JavaScript\r\n * series.startLocation = 0.2;\r\n * series.endLocation = 0.8;\r\n * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n * ```\r\n * ```JSON\r\n * {\r\n * // ...\r\n * \"series\": [{\r\n * // ...\r\n * \"startLocation\": 0.2,\r\n * \"endLocation\": 0.8,\r\n * \"slicesContainer\": {\r\n * \"background\": {\r\n * \"fill\": \"#eee\"\r\n * }\r\n * }\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @default 1\r\n * @since 4.1.13\r\n * @param value End location\r\n */\r\n set: function (value) {\r\n if (this.setPropertyValue(\"endLocation\", value)) {\r\n this.invalidateDataItems();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return PictorialStackedSeries;\r\n}(PyramidSeries));\r\nexport { PictorialStackedSeries };\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//# sourceMappingURL=PictorialStackedSeries.js.map","/**\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\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column } from \"./Column\";\r\nimport { Cone } from \"../../core/elements/3d/Cone\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ConeColumn = /** @class */ (function (_super) {\r\n __extends(ConeColumn, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ConeColumn() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ConeColumn\";\r\n return _this;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n ConeColumn.prototype.createAssets = function () {\r\n this.coneColumn = this.createChild(Cone);\r\n this.coneColumn.shouldClone = false;\r\n // some dirty hack so that if user access column, it won't get error\r\n this.column = this.coneColumn;\r\n };\r\n /**\r\n * Copies all parameters from another [[ConeColumn]].\r\n *\r\n * @param source Source ConeColumn\r\n */\r\n ConeColumn.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.coneColumn) {\r\n this.coneColumn.copyFrom(source.coneColumn);\r\n }\r\n };\r\n return ConeColumn;\r\n}(Column));\r\nexport { ConeColumn };\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//# sourceMappingURL=ConeColumn.js.map","/**\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\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { ConeColumn } from \"../elements/ConeColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[ConeSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar ConeSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(ConeSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ConeSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ConeSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return ConeSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { ConeSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ConeSeries = /** @class */ (function (_super) {\r\n __extends(ConeSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ConeSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ConeSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns an element to use for Candlestick\r\n * @ignore\r\n * @return Element.\r\n */\r\n ConeSeries.prototype.createColumnTemplate = function () {\r\n return new ConeColumn();\r\n };\r\n /**\r\n * Returns an SVG path to use as series mask.\r\n *\r\n * @return SVG path\r\n */\r\n ConeSeries.prototype.getMaskPath = function () {\r\n var dx = 0;\r\n var dy = 0;\r\n var column = this.columns.getIndex(0);\r\n if (column) {\r\n if (this.baseAxis == this.xAxis) {\r\n dy = column.coneColumn.innerWidth / 2 + 1;\r\n }\r\n else {\r\n dx = column.coneColumn.innerHeight / 2 + 1;\r\n }\r\n return $path.rectToPath({\r\n x: -dx,\r\n y: 0,\r\n width: this.xAxis.axisLength + dx,\r\n height: this.yAxis.axisLength + dy\r\n });\r\n }\r\n };\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n ConeSeries.prototype.validateDataElementReal = function (dataItem) {\r\n _super.prototype.validateDataElementReal.call(this, dataItem);\r\n var column = dataItem.column;\r\n if (column) {\r\n var coneColumn = dataItem.column.coneColumn;\r\n coneColumn.fill = dataItem.column.fill;\r\n if (this.baseAxis == this.yAxis) {\r\n coneColumn.orientation = \"horizontal\";\r\n }\r\n else {\r\n coneColumn.orientation = \"vertical\";\r\n }\r\n }\r\n };\r\n return ConeSeries;\r\n}(ColumnSeries));\r\nexport { ConeSeries };\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//# sourceMappingURL=ConeSeries.js.map","/**\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\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column } from \"./Column\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar CurvedColumn = /** @class */ (function (_super) {\r\n __extends(CurvedColumn, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CurvedColumn() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CurvedColumn\";\r\n return _this;\r\n }\r\n /**\r\n * [createAssets description]\r\n *\r\n * @todo Description\r\n * @ignore Exclude from docs\r\n */\r\n CurvedColumn.prototype.createAssets = function () {\r\n this.curvedColumn = this.createChild(Sprite);\r\n this.curvedColumn.shouldClone = false;\r\n this.setPropertyValue(\"tension\", 0.7);\r\n this.width = percent(120);\r\n this.height = percent(120);\r\n // some dirty hack so that if user access column, it won't get error\r\n this.column = this.curvedColumn;\r\n };\r\n /**\r\n * Draws the element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n CurvedColumn.prototype.draw = function () {\r\n _super.prototype.draw.call(this);\r\n var w = this.realWidth;\r\n var h = this.realHeight;\r\n var x = this.realX - this.pixelX;\r\n var y = this.realY - this.pixelY;\r\n var points;\r\n // TODO can this be removed ?\r\n $utils.used(this.width);\r\n var tensionX = 1;\r\n var tensionY = 1;\r\n if (this.orientation == \"vertical\") {\r\n tensionX = this.tension;\r\n points = [{ x: 0, y: h + y }, { x: w / 2, y: y }, { x: w, y: h + y }];\r\n }\r\n else {\r\n tensionY = this.tension;\r\n h = Math.abs(h);\r\n points = [{ x: x, y: h }, { x: x + w, y: h / 2 }, { x: x, y: 0 }];\r\n }\r\n var path = $path.moveTo(points[0]) + new $smoothing.Tension(tensionX, tensionY).smooth(points);\r\n this.column.path = path;\r\n };\r\n /**\r\n * Copies all parameters from another [[CurvedColumn]].\r\n *\r\n * @param source Source CurvedColumn\r\n */\r\n CurvedColumn.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n if (this.curvedColumn) {\r\n this.curvedColumn.copyFrom(source.curvedColumn);\r\n }\r\n };\r\n Object.defineProperty(CurvedColumn.prototype, \"tension\", {\r\n /**\r\n * @return Tension (0-1)\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"tension\");\r\n },\r\n /**\r\n * Horizontal tension of the curve.\r\n *\r\n * Tension defines how \"lose\" the line will be.\r\n *\r\n * 1 is the maximum tension which would result in pointy columns with\r\n * straight edges.\r\n *\r\n * The smaller the tension th wider the column will be.\r\n *\r\n * @default 0.7\r\n * @param value tension (0-1)\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"tension\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(CurvedColumn.prototype, \"orientation\", {\r\n /**\r\n * Orientation\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"orientation\");\r\n },\r\n /**\r\n * Orientation of the column.\r\n *\r\n * Available options: \"vertical\" (default) and \"horizontal\".\r\n *\r\n * @default \"vertical\"\r\n * @param value Orientation\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"orientation\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return CurvedColumn;\r\n}(Column));\r\nexport { CurvedColumn };\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//# sourceMappingURL=CurvedColumn.js.map","/**\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\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { CurvedColumn } from \"../elements/CurvedColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar CurvedColumnSeriesDataItem = /** @class */ (function (_super) {\r\n __extends(CurvedColumnSeriesDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CurvedColumnSeriesDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CurvedColumnSeriesDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n return CurvedColumnSeriesDataItem;\r\n}(ColumnSeriesDataItem));\r\nexport { CurvedColumnSeriesDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar CurvedColumnSeries = /** @class */ (function (_super) {\r\n __extends(CurvedColumnSeries, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CurvedColumnSeries() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CurvedColumnSeries\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Returns an element to use for the curved column.\r\n *\r\n * @ignore Exclude from docs\r\n * @return Element.\r\n */\r\n CurvedColumnSeries.prototype.createColumnTemplate = function () {\r\n return new CurvedColumn();\r\n };\r\n /**\r\n * Validates data item's elements.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n CurvedColumnSeries.prototype.validateDataElementReal = function (dataItem) {\r\n _super.prototype.validateDataElementReal.call(this, dataItem);\r\n var column = dataItem.column;\r\n column = dataItem.column;\r\n if (column) {\r\n var curvedColumn = dataItem.column.curvedColumn;\r\n curvedColumn.fill = dataItem.column.fill;\r\n if (this.baseAxis == this.yAxis) {\r\n column.orientation = \"horizontal\";\r\n }\r\n else {\r\n column.orientation = \"vertical\";\r\n }\r\n }\r\n };\r\n return CurvedColumnSeries;\r\n}(ColumnSeries));\r\nexport { CurvedColumnSeries };\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//# sourceMappingURL=CurvedColumnSeries.js.map","/**\r\n * Bullet module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet } from \"./Bullet\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar CircleBullet = /** @class */ (function (_super) {\r\n __extends(CircleBullet, _super);\r\n /**\r\n * Constructor\r\n */\r\n function CircleBullet() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"CircleBullet\";\r\n var circle = _this.createChild(Circle);\r\n circle.shouldClone = false;\r\n circle.radius = 5;\r\n circle.isMeasured = false;\r\n _this.circle = circle;\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Copies all proprities and related stuff from another instance of\r\n * [[CircleBullet]].\r\n *\r\n * @param source Source element\r\n */\r\n CircleBullet.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.circle.copyFrom(source.circle);\r\n };\r\n return CircleBullet;\r\n}(Bullet));\r\nexport { CircleBullet };\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//# sourceMappingURL=CircleBullet.js.map","/**\r\n * Bullet module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet } from \"./Bullet\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar ErrorBullet = /** @class */ (function (_super) {\r\n __extends(ErrorBullet, _super);\r\n /**\r\n * Constructor\r\n */\r\n function ErrorBullet() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"ErrorBullet\";\r\n _this.errorLine = _this.createChild(Sprite);\r\n _this.errorLine.shouldClone = false;\r\n _this.width = 20;\r\n _this.height = 20;\r\n _this.strokeOpacity = 1;\r\n _this.isDynamic = true;\r\n return _this;\r\n }\r\n ErrorBullet.prototype.validatePosition = function () {\r\n _super.prototype.validatePosition.call(this);\r\n var w = this.pixelWidth / 2;\r\n var h = this.pixelHeight / 2;\r\n this.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 };\r\n /**\r\n * Copies all proprities and related stuff from another instance of\r\n * [[ErrorBullet]].\r\n *\r\n * @param source Source element\r\n */\r\n ErrorBullet.prototype.copyFrom = function (source) {\r\n _super.prototype.copyFrom.call(this, source);\r\n this.errorLine.copyFrom(source.errorLine);\r\n };\r\n return ErrorBullet;\r\n}(Bullet));\r\nexport { ErrorBullet };\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//# sourceMappingURL=ErrorBullet.js.map","/**\r\n * Functionality for drawing simple NavigationBar.\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Component } from \"../../core/Component\";\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 * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Defines a [[DataItem]] for [[NavigationBar]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nvar NavigationBarDataItem = /** @class */ (function (_super) {\r\n __extends(NavigationBarDataItem, _super);\r\n /**\r\n * Constructor\r\n */\r\n function NavigationBarDataItem() {\r\n var _this = _super.call(this) || this;\r\n _this.className = \"NavigationBarDataItem\";\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n Object.defineProperty(NavigationBarDataItem.prototype, \"name\", {\r\n /**\r\n * @return Name\r\n */\r\n get: function () {\r\n return this.properties[\"name\"];\r\n },\r\n /**\r\n * Name of the navigation bar item.\r\n *\r\n * @param value Name\r\n */\r\n set: function (value) {\r\n this.setProperty(\"name\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return NavigationBarDataItem;\r\n}(DataItem));\r\nexport { NavigationBarDataItem };\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar NavigationBar = /** @class */ (function (_super) {\r\n __extends(NavigationBar, _super);\r\n /**\r\n * Constructor\r\n */\r\n function NavigationBar() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"NavigationBar\";\r\n var interfaceColors = new InterfaceColorSet();\r\n var textLink = new TextLink();\r\n textLink.valign = \"middle\";\r\n textLink.paddingTop = 8;\r\n textLink.paddingBottom = 8;\r\n _this.paddingBottom = 2;\r\n _this.links = new ListTemplate(textLink);\r\n _this._disposers.push(new ListDisposer(_this.links));\r\n _this._disposers.push(textLink);\r\n _this._linksIterator = new $iter.ListIterator(_this.links, function () { return _this.links.create(); });\r\n _this._linksIterator.createNewItems = true;\r\n var triangle = new Triangle();\r\n triangle.direction = \"right\";\r\n triangle.width = 8;\r\n triangle.height = 12;\r\n triangle.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n triangle.fillOpacity = 0.5;\r\n triangle.valign = \"middle\";\r\n triangle.marginLeft = 10;\r\n triangle.marginRight = 10;\r\n _this.separators = new ListTemplate(triangle);\r\n _this._disposers.push(new ListDisposer(_this.separators));\r\n _this._disposers.push(triangle);\r\n var activeLink = new TextLink();\r\n _this.activeLink = activeLink;\r\n activeLink.copyFrom(textLink);\r\n activeLink.valign = \"middle\";\r\n activeLink.fontWeight = \"bold\";\r\n _this.width = percent(100);\r\n _this.layout = \"grid\";\r\n _this.dataFields.name = \"name\";\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Completely redraws the navigation bar.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n NavigationBar.prototype.validateDataElements = function () {\r\n this.removeChildren();\r\n this._linksIterator.reset();\r\n _super.prototype.validateDataElements.call(this);\r\n //@todo: dispose\r\n };\r\n /**\r\n * Creates a visual element for a data item (nav item).\r\n *\r\n * @ignore Exclude from docs\r\n * @param dataItem Data item\r\n */\r\n NavigationBar.prototype.validateDataElement = function (dataItem) {\r\n _super.prototype.validateDataElement.call(this, dataItem);\r\n var textLink;\r\n if (dataItem.index < this.dataItems.length - 1) {\r\n textLink = this._linksIterator.getLast();\r\n textLink.parent = this;\r\n var separator = this.separators.create();\r\n separator.parent = this;\r\n separator.valign = \"middle\";\r\n }\r\n else {\r\n textLink = this.activeLink;\r\n textLink.events.copyFrom(this.links.template.events);\r\n textLink.hide(0);\r\n textLink.show();\r\n textLink.parent = this;\r\n }\r\n textLink.dataItem = dataItem;\r\n textLink.text = dataItem.name;\r\n textLink.validate();\r\n };\r\n return NavigationBar;\r\n}(Component));\r\nexport { NavigationBar };\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//# sourceMappingURL=NavigationBar.js.map","/**\r\n * Cursor module\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container } from \"../../core/Container\";\r\nimport { getInteraction } from \"../../core/interaction/Interaction\";\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 * as $dom from \"../../core/utils/DOM\";\r\nimport { system } from \"../../core/System\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar Cursor = /** @class */ (function (_super) {\r\n __extends(Cursor, _super);\r\n /**\r\n * Constructor\r\n */\r\n function Cursor() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Current cursor position during selection.\r\n *\r\n * @todo Better description\r\n */\r\n _this.point = { x: 0, y: 0 };\r\n /**\r\n * Specifies the rules when cursor needs to be moved or hidden.\r\n */\r\n _this._stick = \"none\";\r\n _this.className = \"Cursor\";\r\n // Set defaults\r\n _this.width = percent(100);\r\n _this.height = percent(100);\r\n _this.shouldClone = false;\r\n _this.hide(0);\r\n _this.trackable = true;\r\n _this.clickable = true;\r\n _this.isMeasured = false;\r\n // Add events on body to trigger down and up events (to start zooming or\r\n // selection)\r\n var interaction = getInteraction();\r\n _this._disposers.push(interaction.body.events.on(\"down\", _this.handleCursorDown, _this));\r\n _this._disposers.push(interaction.body.events.on(\"up\", _this.handleCursorUp, _this));\r\n _this._disposers.push(interaction.body.events.on(\"track\", _this.handleCursorMove, _this));\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Handle pointer movement in document and update cursor position as needed.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Event\r\n */\r\n Cursor.prototype.handleCursorMove = function (event) {\r\n if (!this.interactionsEnabled || (this.interactions.isTouchProtected && event.touch)) {\r\n return;\r\n }\r\n if (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n // We want to let zoom/pan continue even if cursor is outside chart area\r\n if (!this.isHidden || !this.isHiding) {\r\n this.hide();\r\n }\r\n return;\r\n }\r\n var local = $utils.documentPointToSprite(event.pointer.point, this);\r\n if (this._stick == \"hard\" && this._stickPoint) {\r\n local = this._stickPoint;\r\n }\r\n if (this._stick == \"soft\" && this._stickPoint) {\r\n if (!this.fitsToBounds(local)) {\r\n local = this._stickPoint;\r\n }\r\n }\r\n if (this._adapterO) {\r\n this._adapterO.apply(\"cursorPoint\", local);\r\n }\r\n this.triggerMove(local);\r\n return local;\r\n };\r\n /**\r\n * Hides actual SVG elements and handles hiding animations.\r\n *\r\n * @param duration Fade out duration (ms)\r\n * @return Fade out duration (ms)\r\n * @ignore\r\n */\r\n Cursor.prototype.hideReal = function (duration) {\r\n if ((this._stick == \"hard\" || this._stick == \"soft\") && this._stickPoint) {\r\n return;\r\n }\r\n return _super.prototype.hideReal.call(this, duration);\r\n };\r\n /**\r\n * Places the cursor at specific point.\r\n *\r\n * The second parameter has following options:\r\n *\r\n * `\"none\"` - placed cursor will only be there until mouse/touch moves, then\r\n * it either moves to a new place (if pointer over plot area) or is hidden.\r\n *\r\n * `\"soft\"` - cursor will stay in the place if mouse/touch is happening\r\n * outside chart, but will move to a new place whe plot area is hovered or\r\n * touched.\r\n *\r\n * `\"hard\"` - cursor will stay in place no matter what, until it is moved by\r\n * another `triggerMove()` call.\r\n *\r\n * The third parameter - `force` (since `4.9.5`) - if set to `true` will\r\n * make cursor execute all of the actions associated with cursor move,\r\n * including line redraws, tooltip updates, etc. Useful when underlying\r\n * chart data is dynamically being updated.\r\n *\r\n * @param point Point to place cursor at\r\n * @param stick Level of cursor stickiness to the place\r\n * @param force Force cursor move\r\n */\r\n Cursor.prototype.triggerMove = function (point, stick, force) {\r\n point.x = $math.round(point.x, 1);\r\n point.y = $math.round(point.y, 1);\r\n if (stick) {\r\n this._stick = stick;\r\n }\r\n if (stick == \"hard\" || stick == \"soft\") {\r\n this._stickPoint = point;\r\n }\r\n this.triggerMoveReal(point, force);\r\n };\r\n /**\r\n * Places the cursor at specific point.\r\n *\r\n * @param point Point to place cursor at\r\n */\r\n Cursor.prototype.triggerMoveReal = function (point, force) {\r\n if (this.point.x != point.x || this.point.y != point.y || force) {\r\n this.point = point;\r\n this.invalidatePosition();\r\n // hide cursor if it's out of bounds\r\n if (this.fitsToBounds(point)) {\r\n this.show(0);\r\n }\r\n else {\r\n // unless we are selecting (mouse is down)\r\n if (!this.downPoint) {\r\n this.hide(0);\r\n }\r\n }\r\n if (this.visible) {\r\n this.getPositions();\r\n this.dispatch(\"cursorpositionchanged\"); // not good to dispatch later (check step count example)\r\n }\r\n }\r\n };\r\n /**\r\n * Simulates pressing down (click/touch) action by a cursor.\r\n *\r\n * @param point Point of action\r\n */\r\n Cursor.prototype.triggerDown = function (point) {\r\n this.triggerDownReal(point);\r\n };\r\n /**\r\n * Simulates pressing down (click/touch) action by a cursor.\r\n *\r\n * @param point Point of action\r\n */\r\n Cursor.prototype.triggerDownReal = function (point) {\r\n switch (this._generalBehavior) {\r\n case \"zoom\":\r\n this.dispatchImmediately(\"zoomstarted\");\r\n break;\r\n case \"select\":\r\n this.dispatchImmediately(\"selectstarted\");\r\n break;\r\n case \"pan\":\r\n this.dispatchImmediately(\"panstarted\");\r\n getInteraction().setGlobalStyle(MouseCursorStyle.grabbing);\r\n break;\r\n }\r\n };\r\n /**\r\n * Simulates the action of release of the mouse down / touch.\r\n *\r\n * @param point Point of action\r\n */\r\n Cursor.prototype.triggerUp = function (point) {\r\n this.triggerUpReal(point);\r\n };\r\n /**\r\n * Simulates the action of release of the mouse down / touch.\r\n *\r\n * @param point Point of action\r\n */\r\n Cursor.prototype.triggerUpReal = function (point) {\r\n system.requestFrame();\r\n this.updatePoint(this.upPoint);\r\n var interaction = getInteraction();\r\n if ($math.getDistance(this._upPointOrig, this._downPointOrig) > interaction.getHitOption(this.interactions, \"hitTolerance\")) {\r\n switch (this._generalBehavior) {\r\n case \"zoom\":\r\n this.dispatch(\"zoomended\");\r\n break;\r\n case \"select\":\r\n this.dispatch(\"selectended\");\r\n break;\r\n case \"pan\":\r\n this.dispatch(\"panended\");\r\n interaction.setGlobalStyle(MouseCursorStyle.default);\r\n break;\r\n }\r\n this.downPoint = undefined;\r\n this.updateSelection();\r\n }\r\n /*\r\n else {\r\n \r\n if(this._generalBehavior == \"select\"){\r\n this.dispatchImmediately(\"selectended\");\r\n }\r\n this.dispatchImmediately(\"behaviorcanceled\");\r\n interaction.setGlobalStyle(MouseCursorStyle.default);\r\n this.downPoint = undefined;\r\n }*/\r\n };\r\n /**\r\n * Updates selection dimensions on size change.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n Cursor.prototype.updateSelection = function () {\r\n };\r\n /**\r\n * Updates cursors current positions.\r\n */\r\n Cursor.prototype.getPositions = function () {\r\n // positions are used by axes or series\r\n this.xPosition = this.point.x / this.innerWidth;\r\n this.yPosition = 1 - this.point.y / this.innerHeight;\r\n };\r\n /**\r\n * Handles pointer down event so we can start zoom or selection.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Original event\r\n */\r\n Cursor.prototype.handleCursorDown = function (event) {\r\n if (!this.interactionsEnabled || (this.interactions.isTouchProtected && event.touch) || !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n return;\r\n }\r\n // Initiate blur so that whatever focused element on the page is unselected\r\n $dom.blur();\r\n // Get local point\r\n var local = $utils.documentPointToSprite(event.pointer.point, this);\r\n if (this._stick == \"hard\" && this._stickPoint) {\r\n local = this._stickPoint;\r\n }\r\n if (this._adapterO) {\r\n this._adapterO.apply(\"cursorPoint\", local);\r\n }\r\n if (!this.fitsToBounds(local)) {\r\n return;\r\n }\r\n this._downPointOrig = { x: local.x, y: local.y };\r\n // We need to cancel the event to prevent gestures on touch devices\r\n if (event.event.cancelable && this.shouldPreventGestures(event.touch) && this.fitsToBounds(local)) {\r\n event.event.preventDefault();\r\n }\r\n // Make this happen\r\n this.triggerMove(local);\r\n this.triggerDown(local);\r\n };\r\n /**\r\n * Determines whether Cursor should prevent default action on move.\r\n *\r\n * Child classes should override this as necessary.\r\n *\r\n * @return Prevent default?\r\n */\r\n Cursor.prototype.shouldPreventGestures = function (touch) {\r\n return true;\r\n };\r\n /**\r\n * Updates the coordinates of where pointer down event occurred\r\n * (was pressed).\r\n */\r\n Cursor.prototype.updatePoint = function (point) {\r\n };\r\n /**\r\n * Handles pointer up event - finishes zoom or selection action.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Original event\r\n */\r\n Cursor.prototype.handleCursorUp = function (event) {\r\n if (!this.interactionsEnabled) {\r\n return;\r\n }\r\n if (!this.downPoint && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n return;\r\n }\r\n var local = $utils.documentPointToSprite(event.pointer.point, this);\r\n if (this._adapterO) {\r\n this._adapterO.apply(\"cursorPoint\", local);\r\n }\r\n if (!this.downPoint || !this.fitsToBounds(this.downPoint)) {\r\n return;\r\n }\r\n if (this._stick == \"hard\" && this._stickPoint) {\r\n local = this._stickPoint;\r\n }\r\n this._upPointOrig = { x: local.x, y: local.y };\r\n this.triggerMove(local);\r\n this.triggerUp(local);\r\n };\r\n Object.defineProperty(Cursor.prototype, \"chart\", {\r\n /**\r\n * @return Chart\r\n */\r\n get: function () {\r\n return this._chart;\r\n },\r\n /**\r\n * A reference to a [[Chart]] the cursor belongs to.\r\n *\r\n * @param value Chart\r\n */\r\n set: function (value) {\r\n this._chart = value;\r\n if ($type.hasValue(this._chart.plotContainer)) {\r\n getInteraction().lockElement(this._chart.plotContainer.interactions);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Cursor;\r\n}(Container));\r\nexport { Cursor };\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//# sourceMappingURL=Cursor.js.map","/**\r\n * Cursor for XY chart\r\n */\r\nimport { __extends } from \"tslib\";\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Cursor } from \"./Cursor\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { getInteraction } from \"../../core/interaction/Interaction\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * A cursor used on [[XYChart]].\r\n *\r\n * @see {@link IXYCursorEvents} for a list of available events\r\n * @see {@link IXYCursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n */\r\nvar XYCursor = /** @class */ (function (_super) {\r\n __extends(XYCursor, _super);\r\n /**\r\n * Constructor\r\n */\r\n function XYCursor() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n /**\r\n * Vertical cursor line element.\r\n */\r\n _this._lineX = new MutableValueDisposer();\r\n /**\r\n * Horizontal cursor line element.\r\n */\r\n _this._lineY = new MutableValueDisposer();\r\n /**\r\n * Horizontal [[Axis]].\r\n */\r\n _this._xAxis = new MutableValueDisposer();\r\n /**\r\n * Vertical [[Axis]].\r\n */\r\n _this._yAxis = new MutableValueDisposer();\r\n _this._snapToDisposers = [];\r\n _this.className = \"XYCursor\";\r\n // Defaults\r\n _this.behavior = \"zoomX\";\r\n _this.maxPanOut = 0.1;\r\n var interfaceColors = new InterfaceColorSet();\r\n _this.snapOnPan = true;\r\n // Create selection element\r\n var selection = _this.createChild(Sprite);\r\n selection.shouldClone = false;\r\n selection.fillOpacity = 0.2;\r\n selection.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n selection.isMeasured = false;\r\n selection.visible = false;\r\n selection.interactionsEnabled = false;\r\n _this.selection = selection;\r\n _this._disposers.push(_this.selection);\r\n // Create cursor's vertical line\r\n var lineX = _this.createChild(Sprite);\r\n lineX.shouldClone = false;\r\n lineX.stroke = interfaceColors.getFor(\"grid\");\r\n lineX.fill = color();\r\n lineX.strokeDasharray = \"3,3\";\r\n lineX.isMeasured = false;\r\n lineX.strokeOpacity = 0.4;\r\n lineX.interactionsEnabled = false;\r\n lineX.y = 0; // important\r\n _this.lineX = lineX;\r\n _this._disposers.push(_this.lineX);\r\n // Create cursor's horizontal line\r\n var lineY = _this.createChild(Sprite);\r\n lineY.shouldClone = false;\r\n lineY.stroke = interfaceColors.getFor(\"grid\");\r\n lineY.fill = color();\r\n lineY.strokeDasharray = \"3,3\";\r\n lineY.isMeasured = false;\r\n lineY.strokeOpacity = 0.4;\r\n lineY.interactionsEnabled = false;\r\n lineY.x = 0; // important\r\n _this.lineY = lineY;\r\n _this._disposers.push(_this.lineY);\r\n // Add handler for size changes\r\n _this.events.on(\"sizechanged\", _this.updateSize, _this, false);\r\n _this._disposers.push(_this._lineX);\r\n _this._disposers.push(_this._lineY);\r\n _this._disposers.push(_this._xAxis);\r\n _this._disposers.push(_this._yAxis);\r\n _this.mask = _this;\r\n _this.hideSeriesTooltipsOnSelection = true;\r\n // Apply theme\r\n _this.applyTheme();\r\n return _this;\r\n }\r\n /**\r\n * Updates cursor element dimensions on size change.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYCursor.prototype.updateSize = function () {\r\n if (this.lineX) {\r\n this.lineX.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.innerHeight });\r\n }\r\n if (this.lineY) {\r\n this.lineY.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.innerWidth, y: 0 });\r\n }\r\n };\r\n /**\r\n * Updates selection dimensions on size change.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYCursor.prototype.updateSelection = function () {\r\n if (this._usesSelection) {\r\n var downPoint = this.downPoint;\r\n var behavior = this.behavior;\r\n if (downPoint) {\r\n var point = this.point;\r\n if (this.lineX) {\r\n point.x = this.lineX.pixelX;\r\n }\r\n if (this.lineY) {\r\n point.y = this.lineY.pixelY;\r\n }\r\n var selection = this.selection;\r\n var x = Math.min(point.x, downPoint.x);\r\n var y = Math.min(point.y, downPoint.y);\r\n var w = $math.round(Math.abs(downPoint.x - point.x), this._positionPrecision);\r\n var h = $math.round(Math.abs(downPoint.y - point.y), this._positionPrecision);\r\n switch (behavior) {\r\n case \"zoomX\":\r\n y = 0;\r\n h = this.pixelHeight;\r\n break;\r\n case \"zoomY\":\r\n x = 0;\r\n w = this.pixelWidth;\r\n break;\r\n case \"selectX\":\r\n y = 0;\r\n h = this.pixelHeight;\r\n break;\r\n case \"selectY\":\r\n x = 0;\r\n w = this.pixelWidth;\r\n break;\r\n }\r\n selection.x = x;\r\n selection.y = y;\r\n selection.path = $path.rectangle(w, h);\r\n selection.validatePosition(); // otherwise Edge shoes some incorrect size rectangle\r\n }\r\n else {\r\n if (this._generalBehavior != \"select\") {\r\n this.selection.hide();\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYCursor.prototype.fixPoint = function (point) {\r\n point.x = Math.max(0, point.x);\r\n point.y = Math.max(0, point.y);\r\n point.x = Math.min(this.pixelWidth, point.x);\r\n point.y = Math.min(this.pixelHeight, point.y);\r\n return point;\r\n };\r\n /**\r\n * Places the cursor at specific point.\r\n *\r\n * @param point Point to place cursor at\r\n */\r\n XYCursor.prototype.triggerMoveReal = function (point, force) {\r\n _super.prototype.triggerMoveReal.call(this, point, force);\r\n var snapToSeries = this.snapToSeries;\r\n if ((snapToSeries && !this.downPoint)) {\r\n if (snapToSeries instanceof XYSeries) {\r\n if (snapToSeries.isHidden) {\r\n this.updateLinePositions(point);\r\n }\r\n }\r\n else {\r\n var allHidden_1 = true;\r\n $array.each(snapToSeries, function (s) {\r\n if (!s.isHidden) {\r\n allHidden_1 = false;\r\n }\r\n });\r\n if (allHidden_1) {\r\n this.updateLinePositions(point);\r\n }\r\n }\r\n }\r\n else {\r\n this.updateLinePositions(point);\r\n }\r\n if (this.downPoint && $math.getDistance(this.downPoint, point) > 3) {\r\n if (this._generalBehavior == \"pan\") {\r\n this.getPanningRanges();\r\n this.dispatch(\"panning\");\r\n }\r\n }\r\n };\r\n /**\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n XYCursor.prototype.updateLinePositions = function (point) {\r\n point = this.fixPoint(this.point);\r\n if (this.lineX && this.lineX.visible && !this.xAxis) {\r\n this.lineX.x = point.x;\r\n }\r\n if (this.lineY && this.lineY.visible && !this.yAxis) {\r\n this.lineY.y = point.y;\r\n }\r\n this.updateSelection();\r\n };\r\n XYCursor.prototype.triggerDownReal = function (point) {\r\n if (this.visible && !this.isHiding) {\r\n if (this._generalBehavior == \"select\") {\r\n this.selection.parent = this.parent;\r\n }\r\n if (this.fitsToBounds(point)) {\r\n this.downPoint = { x: point.x, y: point.y };\r\n this.updatePoint(point);\r\n //this.updateLinePositions(point); // otherwise lines won't be in correct position and touch won't work fine\r\n this.point.x = this.downPoint.x;\r\n this.point.y = this.downPoint.y;\r\n var selection = this.selection;\r\n var selectionX = this.downPoint.x;\r\n var selectionY = this.downPoint.y;\r\n if (this._usesSelection) {\r\n selection.x = selectionX;\r\n selection.y = selectionY;\r\n selection.path = \"\";\r\n selection.show();\r\n }\r\n _super.prototype.triggerDownReal.call(this, point);\r\n }\r\n else {\r\n this.downPoint = undefined;\r\n }\r\n }\r\n else {\r\n this.downPoint = undefined;\r\n }\r\n };\r\n /**\r\n * Updates the coordinates of where pointer down event occurred\r\n * (was pressed).\r\n */\r\n XYCursor.prototype.updatePoint = function (point) {\r\n if (this.lineX) {\r\n point.x = this.lineX.pixelX;\r\n }\r\n if (this.lineY) {\r\n point.y = this.lineY.pixelY;\r\n }\r\n };\r\n /**\r\n * Handle action when cursor is released, which should perform an operation\r\n * based on its `behavior`, like zoom.\r\n *\r\n * @param point Release point\r\n */\r\n XYCursor.prototype.triggerUpReal = function (point) {\r\n if (this.hasMoved()) {\r\n if (this.downPoint) {\r\n this.upPoint = point;\r\n this.updatePoint(this.upPoint);\r\n if (this._generalBehavior != \"pan\") {\r\n this.getRanges();\r\n }\r\n if (this._generalBehavior != \"select\") {\r\n this.selection.hide();\r\n }\r\n _super.prototype.triggerUpReal.call(this, point);\r\n }\r\n }\r\n else {\r\n if (this._generalBehavior != \"select\") {\r\n this.selection.hide(0);\r\n }\r\n else {\r\n this.xRange = undefined;\r\n this.yRange = undefined;\r\n this.dispatchImmediately(\"selectended\");\r\n }\r\n // reset cursor style, just in case\r\n if (this._generalBehavior == \"pan\") {\r\n var interaction = getInteraction();\r\n interaction.setGlobalStyle(MouseCursorStyle.default);\r\n }\r\n this.dispatchImmediately(\"behaviorcanceled\");\r\n }\r\n this.downPoint = undefined;\r\n this.dispatch(\"cursorpositionchanged\");\r\n };\r\n /**\r\n * Calculates if the cursor has moved enough based on its `behavior`.\r\n *\r\n * @return Moved?\r\n */\r\n XYCursor.prototype.hasMoved = function () {\r\n var distance;\r\n if (this.behavior == \"zoomX\" || this.behavior == \"panX\") {\r\n distance = $math.getHorizontalDistance(this._upPointOrig, this._downPointOrig);\r\n }\r\n else if (this.behavior == \"zoomY\" || this.behavior == \"panY\") {\r\n distance = $math.getVerticalDistance(this._upPointOrig, this._downPointOrig);\r\n }\r\n else {\r\n distance = $math.getDistance(this._upPointOrig, this._downPointOrig);\r\n }\r\n return distance > getInteraction().getHitOption(this.interactions, \"hitTolerance\");\r\n };\r\n /**\r\n * [getRanges description]\r\n *\r\n * @todo Description\r\n */\r\n XYCursor.prototype.getPanningRanges = function () {\r\n var startX = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n var startY = 1 - $math.round(this.downPoint.y / this.innerHeight, 5);\r\n var currentX = $math.round(this.point.x / this.innerWidth, 5);\r\n var currentY = 1 - $math.round(this.point.y / this.innerHeight, 5);\r\n var deltaX = startX - currentX;\r\n var deltaY = startY - currentY;\r\n this.xRange = { start: deltaX, end: 1 + deltaX };\r\n this.yRange = { start: deltaY, end: 1 + deltaY };\r\n if (this.behavior == \"panX\") {\r\n this.yRange.start = 0;\r\n this.yRange.end = 1;\r\n }\r\n if (this.behavior == \"panY\") {\r\n this.xRange.start = 0;\r\n this.xRange.end = 1;\r\n }\r\n };\r\n /**\r\n * [getRanges description]\r\n *\r\n * @todo Description\r\n */\r\n XYCursor.prototype.getRanges = function () {\r\n if (this.lineX) {\r\n this.upPoint.x = this.lineX.pixelX;\r\n }\r\n if (this.lineY) {\r\n this.upPoint.y = this.lineY.pixelY;\r\n }\r\n // @todo Is this needed?\r\n $utils.used(this.selection);\r\n var startX = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n var endX = $math.round((this.upPoint.x) / this.innerWidth, 5);\r\n var startY = 1 - $math.round(this.downPoint.y / this.innerHeight, 5);\r\n var endY = 1 - $math.round((this.upPoint.y) / this.innerHeight, 5);\r\n this.xRange = { start: $math.min(startX, endX), end: $math.max(startX, endX) };\r\n this.yRange = { start: $math.min(startY, endY), end: $math.max(startY, endY) };\r\n };\r\n Object.defineProperty(XYCursor.prototype, \"behavior\", {\r\n /**\r\n * Behavior\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"behavior\");\r\n },\r\n /**\r\n * Cursor's behavior when it's moved with pointer down:\r\n *\r\n * * `\"zoomX\"` - zooms horizontally.\r\n * * `\"zoomY\"` - zooms vertically.\r\n * * `\"zoomXY\"` - zooms both horizontally and vertically.\r\n * * `\"selectX\"` - selects a range horizontally.\r\n * * `\"selectY\"` - selects a range vertically.\r\n * * `\"selectXY\"` - selects a range both horizontally and vertically.\r\n * * `\"panX\"` - moves (pans) current selection horizontally.\r\n * * `\"panY\"` - moves (pans) current selection vertically.\r\n * * `\"panXY\"` - moves (pans) current selection both horizontally and vertically.\r\n * * `\"none\"` - does nothing with pointer down.\r\n *\r\n * E.g. \"zoomXY\" will mean that pressing a mouse (or touching) over plot area\r\n * and dragging it will start zooming the chart.\r\n *\r\n * NOTE: `\"zoomXY\"` acts differently when used on a `DateAxis`.\r\n * See [this note](https://www.amcharts.com/docs/v4/concepts/chart-cursor/#zoomXY_behavior_and_DateAxis).\r\n *\r\n * @param value Bheavior\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"behavior\", value, true);\r\n this._usesSelection = false;\r\n if (value.indexOf(\"zoom\") != -1) {\r\n this._generalBehavior = \"zoom\";\r\n this._usesSelection = true;\r\n }\r\n if (value.indexOf(\"select\") != -1) {\r\n this._generalBehavior = \"select\";\r\n this._usesSelection = true;\r\n }\r\n if (value.indexOf(\"pan\") != -1) {\r\n this._generalBehavior = \"pan\";\r\n this._usesSelection = false;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Determines whether Cursor should prevent default action on move.\r\n *\r\n * If cursor's behavior is \"none\", it should not obstruct the page scrolling.\r\n *\r\n * @return Prevent default?\r\n */\r\n XYCursor.prototype.shouldPreventGestures = function (touch) {\r\n return (!this.interactions.isTouchProtected || !touch) && this.behavior != \"none\";\r\n };\r\n Object.defineProperty(XYCursor.prototype, \"fullWidthLineX\", {\r\n /**\r\n * @return Full width?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"fullWidthLineX\");\r\n },\r\n /**\r\n * Cursor's horizontal line is expanded to take full width of the related\r\n * Axis' cell/category.\r\n *\r\n * NOTE: this setting will work properly if `xAxis` is set and only in case\r\n * `xAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n *\r\n * @param value Full width?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"fullWidthLineX\", value);\r\n if (!value) {\r\n this.updateSize();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"fullWidthLineY\", {\r\n /**\r\n * @return Full width?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"fullWidthLineY\");\r\n },\r\n /**\r\n * Cursor's vertical line is expanded to take full width of the related\r\n * Axis' cell/category.\r\n *\r\n * NOTE: this setting will work properly if `yAxis` is set and only in case\r\n * `yAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n *\r\n * @param value Full width?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"fullWidthLineY\", value);\r\n if (!value) {\r\n this.updateSize();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"hideSeriesTooltipsOnSelection\", {\r\n /**\r\n * @return hide tooltip?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"hideSeriesTooltipsOnSelection\");\r\n },\r\n /**\r\n * If set to `true` this will hide series tooltips when selecting with cursor.\r\n *\r\n * @since 4.5.15\r\n * @param value hide tooltips?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"hideSeriesTooltipsOnSelection\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"maxTooltipDistance\", {\r\n /**\r\n * @return Distance\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxTooltipDistance\");\r\n },\r\n /**\r\n * If set to a numeric value, cursor will display closest series' tooltips\r\n * plus tooltips from series that are closer to than `maxTooltipDistance` to\r\n * it.\r\n *\r\n * Set it to `-1` to always force one tooltip, even if there are multiple\r\n * data items in exactly same place.\r\n *\r\n * @since 4.7.18\r\n * @param value Distance\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maxTooltipDistance\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"maxPanOut\", {\r\n /**\r\n * @return Full width?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"maxPanOut\");\r\n },\r\n /**\r\n * 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 * This setting specifies relative value by how much we can pan out the plot\r\n *\r\n * @param value\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"maxPanOut\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"xAxis\", {\r\n /**\r\n * @return X axis\r\n */\r\n get: function () {\r\n return this._xAxis.get();\r\n },\r\n /**\r\n * A reference to X [[Axis]].\r\n *\r\n * An XY cursor can live without `xAxis` set. You set xAxis for cursor when\r\n * you have axis tooltip enabled and you want cursor line to be at the same\r\n * position as tooltip.\r\n *\r\n * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n * [[ValueAxis]].\r\n *\r\n * @todo Description (review)\r\n * @param axis X axis\r\n */\r\n set: function (axis) {\r\n var _this = this;\r\n if (this._xAxis.get() != axis) {\r\n this._xAxis.set(axis, new MultiDisposer([\r\n axis.tooltip.events.on(\"positionchanged\", this.handleXTooltipPosition, this, false),\r\n axis.events.on(\"rangechangestarted\", function (event) {\r\n _this.hide(0);\r\n _this.preventShow = true;\r\n }, undefined, false),\r\n axis.events.on(\"rangechangeended\", function (event) {\r\n _this.preventShow = false;\r\n _this.hide(0);\r\n _this.dispatch(\"cursorpositionchanged\");\r\n }, undefined, false)\r\n ]));\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"yAxis\", {\r\n /**\r\n * @return Y Axis\r\n */\r\n get: function () {\r\n return this._yAxis.get();\r\n },\r\n /**\r\n * A reference to Y [[Axis]].\r\n *\r\n * An XY cursor can live without `yAxis` set. You set xAxis for cursor when\r\n * you have axis tooltip enabled and you want cursor line to be at the same\r\n * position as tooltip.\r\n *\r\n * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n * [[ValueAxis]].\r\n *\r\n * @todo Description (review)\r\n * @param axis Y axis\r\n */\r\n set: function (axis) {\r\n var _this = this;\r\n if (this._yAxis.get() != axis) {\r\n this._yAxis.set(axis, new MultiDisposer([\r\n axis.tooltip.events.on(\"positionchanged\", this.handleYTooltipPosition, this, false),\r\n axis.events.on(\"rangechangestarted\", function (event) {\r\n _this.hide(0);\r\n _this.__disabled = true;\r\n }, undefined, false),\r\n axis.events.on(\"rangechangeended\", function (event) {\r\n _this.__disabled = false;\r\n _this.hide(0);\r\n _this.dispatch(\"cursorpositionchanged\");\r\n }, undefined, false)\r\n ]));\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Updates Cursor's position when axis tooltip changes position.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Original Axis event\r\n */\r\n XYCursor.prototype.handleXTooltipPosition = function (event) {\r\n var tooltip = this.xAxis.tooltip;\r\n var point = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n var x = point.x;\r\n point.y = 1;\r\n if (this.lineX) {\r\n this.lineX.x = x;\r\n if (!this.fitsToBounds(point)) {\r\n this.hide();\r\n }\r\n }\r\n if (this.xAxis && this.fullWidthLineX) {\r\n var startPoint = this.xAxis.currentItemStartPoint;\r\n var endPoint = this.xAxis.currentItemEndPoint;\r\n if (startPoint && endPoint) {\r\n this.lineX.x = x;\r\n var width = endPoint.x - startPoint.x;\r\n this.lineX.path = $path.rectangle(width, this.innerHeight, -width / 2);\r\n }\r\n }\r\n };\r\n /**\r\n * Updates Cursor's position when Y axis changes position or scale.\r\n *\r\n * @ignore Exclude from docs\r\n * @param event Original Axis event\r\n */\r\n XYCursor.prototype.handleYTooltipPosition = function (event) {\r\n var tooltip = this.yAxis.tooltip;\r\n var point = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n var y = point.y;\r\n point.x = 1;\r\n if (this.lineY) {\r\n this.lineY.y = y;\r\n if (!this.fitsToBounds(point)) {\r\n this.hide();\r\n }\r\n }\r\n if (this.yAxis && this.fullWidthLineY) {\r\n var startPoint = this.yAxis.currentItemStartPoint;\r\n var endPoint = this.yAxis.currentItemEndPoint;\r\n if (startPoint && endPoint) {\r\n this.lineY.y = y;\r\n var height = endPoint.y - startPoint.y;\r\n this.lineY.path = $path.rectangle(this.innerWidth, height, 0, -height / 2);\r\n }\r\n }\r\n };\r\n Object.defineProperty(XYCursor.prototype, \"lineX\", {\r\n /**\r\n * @return Line element\r\n */\r\n get: function () {\r\n return this._lineX.get();\r\n },\r\n /**\r\n * A Line element to use for X axis.\r\n *\r\n * @param lineX Line\r\n */\r\n set: function (lineX) {\r\n if (lineX) {\r\n lineX.setElement(this.paper.add(\"path\"));\r\n this._lineX.set(lineX, lineX.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n lineX.interactionsEnabled = false;\r\n lineX.parent = this;\r\n }\r\n else {\r\n this._lineX.reset();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"lineY\", {\r\n /**\r\n * @return Line element\r\n */\r\n get: function () {\r\n return this._lineY.get();\r\n },\r\n /**\r\n * A Line element to use Y axis.\r\n *\r\n * @param lineY Line\r\n */\r\n set: function (lineY) {\r\n if (lineY) {\r\n lineY.setElement(this.paper.add(\"path\"));\r\n this._lineY.set(lineY, lineY.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n lineY.parent = this;\r\n lineY.interactionsEnabled = false;\r\n }\r\n else {\r\n this._lineY.reset();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"selection\", {\r\n /**\r\n * @return Selection rectangle\r\n */\r\n get: function () {\r\n return this._selection;\r\n },\r\n /**\r\n * A selection element ([[Sprite]]).\r\n *\r\n * @param selection Selection rectangle\r\n */\r\n set: function (selection) {\r\n this._selection = selection;\r\n if (selection) {\r\n selection.element = this.paper.add(\"path\");\r\n selection.parent = this;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * Looks if `xAxis` and `yAxis` is set via ID in JSON config, and replaces\r\n * with real references.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n XYCursor.prototype.processConfig = function (config) {\r\n var _this = this;\r\n if (config) {\r\n // Set up axes\r\n if ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n if (this.map.hasKey(config.xAxis)) {\r\n config.xAxis = this.map.getKey(config.xAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.xAxis + \"\\\" found for `xAxis`\");\r\n delete config.xAxis;\r\n }\r\n }\r\n if ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n if (this.map.hasKey(config.yAxis)) {\r\n config.yAxis = this.map.getKey(config.yAxis);\r\n }\r\n else {\r\n this.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.yAxis + \"\\\" found for `yAxis`\");\r\n delete config.yAxis;\r\n }\r\n }\r\n if ($type.hasValue(config.snapToSeries)) {\r\n var snapTo_1 = $type.isArray(config.snapToSeries) ? config.snapToSeries : [config.snapToSeries];\r\n var snapError_1 = false;\r\n $array.each(snapTo_1, function (snap, index) {\r\n if ($type.isString(snap)) {\r\n if (_this.map.hasKey(snap)) {\r\n snapTo_1[index] = _this.map.getKey(snap);\r\n }\r\n else {\r\n _this.processingErrors.push(\"[XYCursor] No series with id \\\"\" + snap + \"\\\" found for `series`\");\r\n snapError_1 = true;\r\n }\r\n }\r\n });\r\n if (snapError_1) {\r\n delete config.snapToSeries;\r\n }\r\n else {\r\n config.snapToSeries = snapTo_1;\r\n }\r\n }\r\n }\r\n _super.prototype.processConfig.call(this, config);\r\n };\r\n Object.defineProperty(XYCursor.prototype, \"snapToSeries\", {\r\n /**\r\n * @return {XYSeries | XYSeries[]}\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"snapToSeries\");\r\n },\r\n /**\r\n * Specifies to which series cursor lines should be snapped.\r\n *\r\n * Can be a single series instance or an array of series.\r\n *\r\n * @param {XYSeries | XYSeries[]}\r\n */\r\n set: function (series) {\r\n var _this = this;\r\n if (this.setPropertyValue(\"snapToSeries\", series)) {\r\n if (series instanceof XYSeries) {\r\n series = [series];\r\n }\r\n if (this._snapToDisposers) {\r\n $array.each(this._snapToDisposers, function (disposer) {\r\n disposer.dispose();\r\n });\r\n }\r\n this._snapToDisposers = [];\r\n if (series) {\r\n $array.each(series, function (s) {\r\n _this._snapToDisposers.push(s.events.on(\"tooltipshownat\", function () { _this.handleSnap(s); }, undefined, false));\r\n });\r\n }\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(XYCursor.prototype, \"snapOnPan\", {\r\n /**\r\n * Should zoom selection \"snap\" into equal categories/intervals after panning\r\n * the chart? (when `behavior == \"panX\"`)\r\n *\r\n * @default true\r\n * @since 4.10.17\r\n * @return Snap on pan?\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"snapOnPan\");\r\n },\r\n /**\r\n * @param value Snap on pan?\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"snapOnPan\", value);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Snaps the zoom selection after chart is panned.\r\n *\r\n * @ignore\r\n */\r\n XYCursor.prototype.handleSnap = function (series) {\r\n if (!this.downPoint) {\r\n var x = series.getTooltipX() + series.xAxis.pixelX;\r\n var y = series.getTooltipY() + series.yAxis.pixelY;\r\n var xAxis = series.xAxis;\r\n var yAxis = series.yAxis;\r\n if (xAxis) {\r\n if (xAxis.renderer.opposite) {\r\n y -= this.pixelHeight;\r\n }\r\n }\r\n this.point = { x: x, y: y };\r\n this.getPositions();\r\n var xx = x;\r\n var yy = y;\r\n x -= this.pixelWidth;\r\n if (yAxis) {\r\n if (yAxis.renderer.opposite) {\r\n x += this.pixelWidth;\r\n }\r\n }\r\n var tooltip = series.tooltip;\r\n var duration = tooltip.animationDuration;\r\n var easing = tooltip.animationEasing;\r\n if (xAxis instanceof ValueAxis && !(xAxis instanceof DateAxis) && yAxis instanceof ValueAxis && !(yAxis instanceof DateAxis)) {\r\n series.yAxis.showTooltipAtPosition(this.yPosition);\r\n series.xAxis.showTooltipAtPosition(this.xPosition);\r\n }\r\n else {\r\n if (series.baseAxis == series.xAxis) {\r\n series.yAxis.showTooltipAtPosition(this.yPosition);\r\n }\r\n if (series.baseAxis == series.yAxis) {\r\n series.xAxis.showTooltipAtPosition(this.xPosition);\r\n }\r\n }\r\n //\tthis.lineX.animate([{ property: \"y\", to: y }], duration, easing);\r\n //\tthis.lineY.animate([{ property: \"x\", to: x }], duration, easing);\r\n this.lineY.x = x;\r\n this.lineX.y = y;\r\n if (!this.xAxis) {\r\n this.lineX.animate([{ property: \"x\", to: xx }], duration, easing);\r\n }\r\n if (!this.yAxis) {\r\n this.lineY.animate([{ property: \"y\", to: yy }], duration, easing);\r\n }\r\n }\r\n };\r\n /**\r\n * Destroys this object and all related data.\r\n */\r\n XYCursor.prototype.dispose = function () {\r\n this.hide(0);\r\n _super.prototype.dispose.call(this);\r\n };\r\n return XYCursor;\r\n}(Cursor));\r\nexport { XYCursor };\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//# sourceMappingURL=XYCursor.js.map","import { __extends } from \"tslib\";\r\nimport { XYCursor } from \"./XYCursor\";\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 * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\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\nvar RadarCursor = /** @class */ (function (_super) {\r\n __extends(RadarCursor, _super);\r\n /**\r\n * Constructor\r\n */\r\n function RadarCursor() {\r\n var _this = \r\n // Init\r\n _super.call(this) || this;\r\n _this.className = \"RadarCursor\";\r\n _this.radius = percent(100);\r\n _this.innerRadius = percent(0);\r\n // Apply theme\r\n _this.applyTheme();\r\n _this.mask = undefined;\r\n return _this;\r\n }\r\n /**\r\n * Checks if point is within bounds of a container.\r\n *\r\n * @ignore Exclude from docs\r\n * @param point Point to check\r\n * @return Fits within container?\r\n */\r\n RadarCursor.prototype.fitsToBounds = function (point) {\r\n var radius = $math.getDistance(point);\r\n //if(!$math.isAngleInRange(angle, this.startAngle, this.endAngle)){\r\n //return false;\r\n //}\r\n if (radius < this.truePixelRadius + 1 && radius > this.pixelInnerRadius - 1) { // ok to add/remove some\r\n return true;\r\n }\r\n return false;\r\n };\r\n Object.defineProperty(RadarCursor.prototype, \"startAngle\", {\r\n /**\r\n * @return Start angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"startAngle\");\r\n },\r\n /**\r\n * Starting angle of the cursor's radial line.\r\n *\r\n * @param value Start angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"startAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarCursor.prototype, \"endAngle\", {\r\n /**\r\n * @return End angle\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"endAngle\");\r\n },\r\n /**\r\n * End angle of the cursor's radial line.\r\n *\r\n * @param value End angle\r\n */\r\n set: function (value) {\r\n this.setPropertyValue(\"endAngle\", value, true);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n RadarCursor.prototype.triggerMoveReal = function (point, force) {\r\n if (!this.xAxis || (this.xAxis && (!this.xAxis.cursorTooltipEnabled || this.xAxis.tooltip.disabled))) {\r\n this.updateLineX(this.point);\r\n }\r\n if (!this.yAxis || (this.yAxis && (!this.yAxis.cursorTooltipEnabled || this.yAxis.tooltip.disabled))) {\r\n this.updateLineY(this.point);\r\n }\r\n this.updateSelection();\r\n _super.prototype.triggerMoveReal.call(this, point, force);\r\n };\r\n /**\r\n * (Re)draws the horizontal (circular) cursor's line.\r\n *\r\n * @param point New target point\r\n */\r\n RadarCursor.prototype.updateLineX = function (point) {\r\n var radius = this.pixelRadius;\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var innerRadius = this.pixelInnerRadius;\r\n if (radius > 0 && $type.isNumber(startAngle) && $type.isNumber(endAngle) && $type.isNumber(innerRadius)) {\r\n var angle = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n var path = void 0;\r\n if (this.lineX && this.lineX.visible) {\r\n this.lineX.moveTo({ x: 0, y: 0 });\r\n // fill\r\n if (this.xAxis && this.fullWidthLineX) {\r\n var startPoint = this.xAxis.currentItemStartPoint;\r\n var endPoint = this.xAxis.currentItemEndPoint;\r\n if (startPoint && endPoint) {\r\n var fillStartAngle = $math.fitAngleToRange($math.getAngle(startPoint), startAngle, endAngle);\r\n var fillEndAngle = $math.fitAngleToRange($math.getAngle(endPoint), startAngle, endAngle);\r\n var arc = fillEndAngle - fillStartAngle;\r\n // clockwise\r\n // this is needed, normalizeAngle doesn't solve it\r\n if (startAngle < endAngle) {\r\n if (arc < 0) {\r\n arc += 360;\r\n }\r\n }\r\n // ccw\r\n else {\r\n if (arc > 0) {\r\n arc -= 360;\r\n }\r\n }\r\n angle -= arc / 2;\r\n path = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) })\r\n + $path.arcTo(angle, arc, radius)\r\n + $path.lineTo({ x: innerRadius * $math.cos(angle + arc), y: innerRadius * $math.sin(angle + arc) })\r\n + $path.arcTo(angle + arc, -arc, innerRadius);\r\n }\r\n }\r\n // line\r\n if (!path) {\r\n 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 }\r\n this.lineX.path = path;\r\n }\r\n }\r\n };\r\n /**\r\n * (Re)draws the vertical (radial) cursor's line.\r\n *\r\n * @param point New target point\r\n */\r\n RadarCursor.prototype.updateLineY = function (point) {\r\n if (this.lineY && this.lineY.visible) {\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var truePixelRadius = this.truePixelRadius;\r\n var radius = $math.fitToRange($math.getDistance(point), 0, this.truePixelRadius);\r\n if ($type.isNumber(radius) && $type.isNumber(startAngle)) {\r\n this.lineY.moveTo({ x: 0, y: 0 });\r\n var path = void 0;\r\n var arc = endAngle - startAngle;\r\n if (this.yAxis && this.fullWidthLineY) {\r\n // fill\r\n var startPoint = this.yAxis.currentItemStartPoint;\r\n var endPoint = this.yAxis.currentItemEndPoint;\r\n if (startPoint && endPoint) {\r\n var innerRadius = $math.fitToRange($math.getDistance(startPoint), 0, truePixelRadius);\r\n radius = $math.fitToRange($math.getDistance(endPoint), 0, truePixelRadius);\r\n path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius);\r\n path += $path.moveTo({ x: innerRadius * $math.cos(endAngle), y: innerRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, -arc, innerRadius);\r\n }\r\n }\r\n if (!path) {\r\n path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius);\r\n }\r\n this.lineY.path = path;\r\n }\r\n }\r\n };\r\n /**\r\n * Updates selection dimensions on size change.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RadarCursor.prototype.updateSelection = function () {\r\n if (this._usesSelection) {\r\n var downPoint = this.downPoint;\r\n if (downPoint) {\r\n var point = this.point;\r\n var radius = this.pixelRadius;\r\n var truePixelRadius = this.truePixelRadius;\r\n var innerRadius = this.pixelInnerRadius;\r\n var startAngle = Math.min(this.startAngle, this.endAngle);\r\n var endAngle = Math.max(this.startAngle, this.endAngle);\r\n var downAngle = $math.fitAngleToRange($math.getAngle(downPoint), startAngle, endAngle);\r\n var angle = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n var downRadius = $math.getDistance(downPoint);\r\n if (downRadius < truePixelRadius) {\r\n var currentRadius = $math.fitToRange($math.getDistance(point), 0, truePixelRadius);\r\n this._prevAngle = angle;\r\n var path = $path.moveTo({ x: 0, y: 0 });\r\n var downSin = $math.sin(downAngle);\r\n var downCos = $math.cos(downAngle);\r\n var sin = $math.sin(angle);\r\n var cos = $math.cos(angle);\r\n var behavior = this.behavior;\r\n if (behavior == \"zoomX\" || behavior == \"selectX\") {\r\n path += $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 }\r\n else if (behavior == \"zoomY\" || behavior == \"selectY\") {\r\n path = $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 }\r\n else if (behavior == \"zoomXY\") {\r\n path = $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 }\r\n this.selection.path = path;\r\n }\r\n this.selection.moveTo({ x: 0, y: 0 });\r\n }\r\n }\r\n };\r\n /**\r\n * Updates cursors current positions.\r\n */\r\n RadarCursor.prototype.getPositions = function () {\r\n // positions are used by axes or series\r\n var chart = this.chart;\r\n if (chart) {\r\n var innerRadius = this.pixelInnerRadius;\r\n var radius = this.truePixelRadius - innerRadius;\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var angle = $math.fitAngleToRange($math.getAngle(this.point), startAngle, endAngle);\r\n var xPosition = ((angle - startAngle) / (endAngle - startAngle));\r\n this.xPosition = xPosition;\r\n this.yPosition = $math.fitToRange(($math.getDistance(this.point) - innerRadius) / radius, 0, 1);\r\n }\r\n };\r\n /**\r\n * Overriding inherited method, so that nothing happens when it's triggered.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RadarCursor.prototype.updatePoint = function (point) {\r\n };\r\n /**\r\n * Updates Cursor's position when axis tooltip changes horizontal position.\r\n *\r\n * @param event Axis event\r\n */\r\n RadarCursor.prototype.handleXTooltipPosition = function (event) {\r\n if (this.xAxis.cursorTooltipEnabled) {\r\n var tooltip = this.xAxis.tooltip;\r\n this.updateLineX($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n }\r\n };\r\n /**\r\n * Updates Cursor's position when axis tooltip changes vertical position.\r\n *\r\n * @todo Description\r\n * @param event Axis event\r\n */\r\n RadarCursor.prototype.handleYTooltipPosition = function (event) {\r\n if (this.yAxis.cursorTooltipEnabled) {\r\n var tooltip = this.yAxis.tooltip;\r\n this.updateLineY($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n }\r\n };\r\n /**\r\n * needs to be overriden\r\n * @ignore\r\n */\r\n RadarCursor.prototype.updateLinePositions = function (point) {\r\n };\r\n /**\r\n * [getRanges description]\r\n *\r\n * @todo Description\r\n */\r\n RadarCursor.prototype.getRanges = function () {\r\n var downPoint = this.downPoint;\r\n if (downPoint) {\r\n var upPoint = this.upPoint;\r\n var chart = this.chart;\r\n if (chart) {\r\n var radius = this.pixelRadius;\r\n var startAngle = this.startAngle;\r\n var endAngle = this.endAngle;\r\n var downAngle = $math.fitAngleToRange($math.getAngle(downPoint), this.startAngle, this.endAngle);\r\n var upAngle = $math.fitAngleToRange($math.getAngle(upPoint), this.startAngle, this.endAngle);\r\n var downRadius = $math.fitToRange($math.getDistance(downPoint), 0, radius);\r\n var upRadius = $math.fitToRange($math.getDistance(upPoint), 0, radius);\r\n var startX = 0;\r\n var endX = 1;\r\n var startY = 0;\r\n var endY = 1;\r\n var behavior = this.behavior;\r\n if (behavior == \"zoomX\" || behavior == \"selectX\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n var arc = endAngle - startAngle;\r\n startX = $math.round((downAngle - startAngle) / arc, 5);\r\n endX = $math.round((upAngle - startAngle) / arc, 5);\r\n }\r\n if (behavior == \"zoomY\" || behavior == \"selectY\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n startY = $math.round(downRadius / radius, 5);\r\n endY = $math.round(upRadius / radius, 5);\r\n }\r\n this.xRange = { start: Math.min(startX, endX), end: Math.max(startX, endX) };\r\n this.yRange = { start: Math.min(startY, endY), end: Math.max(startY, endY) };\r\n if (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n // void\r\n }\r\n else {\r\n this.selection.hide();\r\n }\r\n }\r\n }\r\n };\r\n /**\r\n * Overriding inherited method, so that nothing happens when `updateSize`\r\n * is triggered.\r\n *\r\n * RadarCursor is quite complicated and needs own sizing logic.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RadarCursor.prototype.updateSize = function () { };\r\n Object.defineProperty(RadarCursor.prototype, \"radius\", {\r\n /**\r\n * @return Outer radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"radius\");\r\n },\r\n /**\r\n * Outer radius of the cursor's circular line.\r\n * Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Outer radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarCursor.prototype, \"pixelRadius\", {\r\n /**\r\n * Outer radius of the circular line in pixels.\r\n *\r\n * @return Outer radius (px)\r\n * @readonly\r\n */\r\n get: function () {\r\n return $utils.relativeRadiusToValue(this.radius, this.truePixelRadius);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarCursor.prototype, \"truePixelRadius\", {\r\n /**\r\n * [truePixelRadius description]\r\n *\r\n * @todo Description\r\n * @return Outer radius (px)\r\n * @readonly\r\n */\r\n get: function () {\r\n return $utils.relativeToValue(percent(100), $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarCursor.prototype, \"innerRadius\", {\r\n /**\r\n * @return Inner radius\r\n */\r\n get: function () {\r\n return this.getPropertyValue(\"innerRadius\");\r\n },\r\n /**\r\n * Inner radius of the cursor's circular line.\r\n * Absolute (px) or relative ([[Percent]]).\r\n *\r\n * @param value Inner radius\r\n */\r\n set: function (value) {\r\n this.setPercentProperty(\"innerRadius\", value, false, false, 10, false);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(RadarCursor.prototype, \"pixelInnerRadius\", {\r\n /**\r\n * Inner radius of the circular line in pixels.\r\n *\r\n * @return Inner radius (px)\r\n * @readonly\r\n */\r\n get: function () {\r\n var innerRadius = this.innerRadius;\r\n if (innerRadius instanceof Percent) {\r\n innerRadius = percent(100 * innerRadius.value * this.chart.innerRadiusModifyer);\r\n }\r\n return $utils.relativeRadiusToValue(innerRadius, this.truePixelRadius) || 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n *\r\n * @ignore Exclude from docs\r\n */\r\n RadarCursor.prototype.fixPoint = function (point) {\r\n // overriding xy method\r\n return point;\r\n };\r\n return RadarCursor;\r\n}(XYCursor));\r\nexport { RadarCursor };\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//# sourceMappingURL=RadarCursor.js.map"],"sourceRoot":""}