AnonSec Shell
Server IP : 85.193.89.191  /  Your IP : 3.128.205.47
Web Server : Apache
System : Linux 956367-cx40159.tmweb.ru 3.10.0-1160.105.1.el7.x86_64 #1 SMP Thu Dec 7 15:39:45 UTC 2023 x86_64
User : bitrix ( 600)
PHP Version : 8.1.27
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/bitrix/www/bitrix/js/main/amcharts/4.8.5/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/bitrix/www/bitrix/js/main/amcharts/4.8.5/charts.js.map
{"version":3,"sources":["webpack:///../../../../../src/.internal/charts/series/RadarSeries.ts","webpack:///../../../../../src/.internal/charts/axes/AxisFillCircular.ts","webpack:///../../../../../src/.internal/charts/axes/GridCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","webpack:///../../../../../src/.internal/charts/types/RadarChart.ts","webpack:///../../../../../src/.internal/charts/elements/ClockHand.ts","webpack:///../../../../../src/.internal/charts/types/GaugeChart.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/PieChart3D.ts","webpack:///../../../../../src/.internal/charts/types/SlicedChart.ts","webpack:///../../../../../src/.internal/charts/elements/FlowDiagramNode.ts","webpack:///../../../../../src/.internal/charts/elements/FlowDiagramLink.ts","webpack:///../../../../../src/.internal/charts/types/FlowDiagram.ts","webpack:///../../../../../src/.internal/charts/elements/LabelBullet.ts","webpack:///../../../../../src/.internal/charts/elements/SankeyNode.ts","webpack:///../../../../../src/.internal/charts/elements/SankeyLink.ts","webpack:///../../../../../src/.internal/charts/types/SankeyDiagram.ts","webpack:///../../../../../src/.internal/charts/elements/ChordNode.ts","webpack:///../../../../../src/.internal/core/elements/QuadraticCurve.ts","webpack:///../../../../../src/.internal/charts/elements/ChordLink.ts","webpack:///../../../../../src/.internal/charts/types/ChordDiagram.ts","webpack:///../../../../../src/.internal/charts/series/TreeMapSeries.ts","webpack:///../../../../../src/.internal/charts/types/TreeMap.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","webpack:///../../../../../src/.internal/charts/elements/Column3D.ts","webpack:///../../../../../src/.internal/charts/series/ColumnSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/XYChart3D.ts","webpack:///../../../../../src/.internal/charts/elements/Candlestick.ts","webpack:///../../../../../src/.internal/charts/series/CandlestickSeries.ts","webpack:///../../../../../src/.internal/charts/elements/OHLC.ts","webpack:///../../../../../src/.internal/charts/series/OHLCSeries.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeries.ts","webpack:///../../../../../src/.internal/charts/elements/RadarColumn.ts","webpack:///../../../../../src/.internal/charts/series/RadarColumnSeries.ts","webpack:///../../../../../src/.internal/charts/elements/FunnelSlice.ts","webpack:///../../../../../src/.internal/charts/elements/FunnelTick.ts","webpack:///../../../../../src/.internal/charts/series/FunnelSeries.ts","webpack:///../../../../../src/.internal/charts/series/PyramidSeries.ts","webpack:///../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","webpack:///../../../../../src/.internal/charts/elements/ConeColumn.ts","webpack:///../../../../../src/.internal/charts/series/ConeSeries.ts","webpack:///../../../../../src/.internal/charts/elements/CurvedColumn.ts","webpack:///../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","webpack:///../../../../../src/.internal/charts/elements/CircleBullet.ts","webpack:///../../../../../src/.internal/charts/elements/ErrorBullet.ts","webpack:///../../../../../src/.internal/charts/elements/NavigationBar.ts","webpack:///../../../../../src/.internal/charts/cursors/RadarCursor.ts","webpack:///./charts.js"],"names":["RadarSeries_RadarSeriesDataItem","_super","RadarSeriesDataItem","_this","call","this","className","setLocation","applyTheme","Object","tslib_es6","LineSeries","RadarSeries_RadarSeries","RadarSeries","connectEnds","prototype","validate","chart","invalid","createDataItem","getPoint","dataItem","xKey","yKey","locationX","locationY","stackKeyX","stackKeyY","x","yAxis","getX","y","getY","radius","utils_Math","angle","xAxis","getAngle","startAngle","endAngle","addPoints","points","xField","yField","backwards","point","locations","push","getMaskPath","renderer","Path","pixelRadius","pixelInnerRadius","drawSegment","segment","closePoints","Math","abs","dataFields","_xOpenField","_yOpenField","stacked","length","unshift","defineProperty","getPropertyValue","value","setPropertyValue","positionBulletReal","bullet","positionX","positionY","start","end","visible","moveTo","positionToPoint","setXAxis","axis","updateRendererRefs","setYAxis","rendererX","rendererY","axisRendererY","Registry","registeredClasses","AxisFillCircular_AxisFillCircular","AxisFillCircular","element","paper","add","Percent","draw","__disabled","disabled","fillPath","getPositionRangePath","startPosition","endPosition","Type","innerRadius","cornerRadius","path","setPercentProperty","AxisFill","GridCircular_GridCircular","GridCircular","pixelPerfect","Grid","AxisRendererCircular_AxisRendererCircular","AxisRendererCircular","pixelRadiusReal","layout","isMeasured","useChartAngles","grid","template","location","labels","ticks","tooltipLocation","line","strokeOpacity","setAxis","tooltip","adapter","target","Utils","pixelX","pixelY","cos","atan2","sin","PI","invalidate","position","position2","coordinate","positionToCoordinate","axisLength","realRadius","Infinity","positionToAngle","arc","inversed","updateAxisLine","updateGridElement","gridInnerRadius","zIndex","toggleVisibility","updateTickElement","tick","tickLength","inside","updateBullet","AxisBullet","positionItem","updateLabelElement","label","fixPosition","minLabelPosition","maxLabelPosition","fitsToBounds","invalidateAxisItems","invalidateSeries","createGrid","createFill","createLabel","AxisLabelCircular","pointToPosition","coordinateToPosition","AxisRenderer","AxisRendererRadial_AxisRendererRadial","AxisRendererRadial","_chart","Disposer","minGridDistance","gridType","axisAngle","horizontalCenter","_disposers","get","set","title","valign","verticalCenter","rotation","opposite","xAxes","getIndex","count","series","dataItems","CategoryAxis","gridLocation","i","cellEndLocation","updateBaseGridElement","updateBreakElement","axisBreak","startLine","endLine","fillShape","startPoint","endPoint","createBreakSprites","WavedCircle","updateTooltip","tooltipOrientation","width","bigNum","height","round","axisFullLength","AxisRendererY","RadarChart_RadarChartDataItem","RadarChartDataItem","XYChart","RadarChart_RadarChart","RadarChart","_axisRendererX","_axisRendererY","innerRadiusModifyer","radarContainer","plotContainer","createChild","Container","shouldClone","align","seriesContainer","parent","bulletsContainer","axisBulletsContainer","_cursorContainer","_bulletMask","Circle","opacity","applyInternalDefaults","readerTitle","language","translate","processAxis","gridContainer","breakContainer","toBack","handleXAxisRangeChange","Iterator","yAxes","iterator","handleYAxisRangeChange","processConfig","config","cursor","type","len","beforeDraw","rect","innerRect","wr","innerWidth","hr","innerHeight","mr","min","max","maxRadius","diameter","_pixelInnerRadius","definedBBox","validatePosition","createSeries","updateXAxis","processRenderer","updateYAxis","ClockHand_ClockHand","ClockHand","_axis","interfaceColors","InterfaceColorSet","fill","getFor","stroke","pin","startWidth","endWidth","hand","Trapezoid","pixelWidth","h","leftSide","rightSide","x0","x1","_pin","removeDispose","_hand","showValue","duration","easing","_value","undefined","newAngle","anyToPosition","currentAngle","rotationDirection","animate","property","to","events","on","updateValue","map","hasKey","getKey","GaugeChart_GaugeChartDataItem","GaugeChartDataItem","GaugeChart_GaugeChart","GaugeChart","hands","List","processHand","event","newValue","configOrder","a","b","PieSeries3D_PieSeries3DDataItem","PieSeries3DDataItem","values","depthValue","setValue","PieSeries","PieSeries3D_PieSeries3D","PieSeries3D","createSlice","Slice3D","validateDataElement","slice","depth","depthPercent","percent","_workingStartIndex","_workingEndIndex","toFront","positionBullet","PieChart3D_PieChart3DDataItem","PieChart3DDataItem","PieChart","PieChart3D_PieChart3D","PieChart3D","invalidateDataUsers","SlicedChart_SlicedChartDataItem","SlicedChartDataItem","PercentChart","SlicedChart_SlicedChart","SlicedChart","padding","FlowDiagramNode_FlowDiagramNode","FlowDiagramNode","legendSettings","Legend","draggable","inert","setStateOnChildren","invalidateLinks","handleHit","isHidden","isHiding","show","hide","animation","outgoingDataItems","each","toNode","setWorkingValue","getValue","incomingDataItems","fromNode","isDisposed","link","colorMode","color","gradient","stop_1","stops","stop_2","_incomingDataItems","sortBy","_incomingSorted","utils_String","fromName","Order","utils_Number","_outgoingDataItems","_outgoingSorted","setColorProperty","_background","createLegendMarker","marker","w","pixelHeight","removeChildren","column","RoundedRectangle","utils_Object","Sprite","copyFrom","legendDataItem","colorOrig","_legendDataItem","itemContainer","deepInvalidate","FlowDiagramLink_FlowDiagramLink","FlowDiagramLink","maskBullets","tooltipText","setElement","fillOpacity","positionBullets","bullets","maxWidth","maxHeight","_bulletsContainer","_bulletsMask","bulletsMask","middleLine","rotationField","propertyFields","dataContext","clear","Color","addColor","setFill","_gradient","measureElement","_bullets","Bullet","source","Line","Polyline","getTooltipX","getTooltipY","LinearGradient","FlowDiagram_FlowDiagramDataItem","FlowDiagramDataItem","properties","setProperty","toName","_link","link_1","component","links","create","addSprite","removeValue","Chart","FlowDiagram_FlowDiagram","FlowDiagram","colors","ColorSet","nodePadding","sequencedInterpolation","step","minNodeSize","linksContainer","chartContainer","nodesContainer","dispose","validateData","_parseDataFrom","nodes","sortNodes","reset","low","high","sum","node","name","strokeModifier","LinearGradientModifier","opacities","fillModifier","key","setCalculatedValue","strNode","next","getNodeValue","feedLegend","handleDataItemWorkingValueChange","_sorted","sortedIterator","total","incomingTotal","outgoingTotal","getWorkingValue","totalIncoming","totalOutgoing","changeSorting","_nodes","createNode","Dictionary","_links","createLink","legend","legendData_1","data","disposeData","LabelBullet_LabelBullet","LabelBullet","Label","truncate","hideOversized","handleMaxSize","SankeyNode_SankeyNode","SankeyNode","nextInCoord","nextOutCoord","nameLabel","text","valueLabel","hiddenState","background","orientation_1","orientation","dx","dy","endX","endY","linkWidth","valueHeight","startX","startY","measuredWidth","measuredHeight","SankeyLink_SankeyLink","SankeyLink","tension","controlPointDistance","Polyspline","isTemplate","y0","y1","xt0","yt0","xt1","yt1","xb0","xb1","yb0","yb1","xm0","xm1","ym0","ym1","index","tensionX","tensionY","minX","minY","maxX","maxY","_bbox","cpd","kxt0","kyt0","kxt1","kyt1","kxm0","kym0","kxm1","kym1","kxb0","kyb0","kxb1","kyb1","segments","Smoothing","smooth","mask","SankeyDiagram_SankeyDiagramDataItem","SankeyDiagramDataItem","SankeyDiagram_SankeyDiagram","SankeyDiagram","nodeAlign","_levelCount","level","getNodeLevel","levels","apply","calculateValueHeight","_levelSum","_levelNodesCount","maxSum","availableHeight","maxSumLevel","minHeight","realValue","levelNodeCount","_maxSumLevel","maxSumLevelNodeCount","finalHeight","_heightAnimation","animationOptions","err","interpolationDuration","states","transitionDuration","Animation","from","interpolationEasing","container","nextCoordinate","delta","levelCoordinate","nodeCount","showReal","preventShow","container_1","i_1","delay","sequencedInterpolationDelay","isFinished","nodeHeight","_valueHeight","ChordNode_ChordNode","ChordNode","updateRotation","Slice","tooltipX","ix","tooltipY","iy","arc_1","sliceStartAngle_1","children","child","childAngle","childRadius","labelAngle","adjustedTotal","nextAngle","nonRibbon","percentWidth","valueAngle","mAngle","trueStartAngle","tx","ty","QuadraticCurve_QuadraticCurve","QuadraticCurve","x2","y2","cpx","cpy","p1","p2","cp","d","point1","point2","ChordLink_ChordLink","ChordLink","fromX","fromY","toX","toY","mAngle1","mAngle2","ChordDiagram_ChordDiagramDataItem","ChordDiagramDataItem","ChordDiagram_ChordDiagram","ChordDiagram","chordContainer","newTotal","invalidateLayout","TreeMapSeries_TreeMapSeriesDataItem","TreeMapSeriesDataItem","treeMapDataItem","_dataContext","toValue","fields","ColumnSeries","TreeMapSeries_TreeMapSeries","TreeMapSeries","minBulletDistance","columns","configField","openValueX","valueX","openValueY","valueY","showOnInit","processDataItem","seriesDataItem","defaultState","hideReal","processValues","getStartLocation","getEndLocation","dataChangeUpdate","disableUnusedColumns","TreeMap_TreeMapDataItem","TreeMapDataItem","rows","hasChildren","getDuration","childValue","workingValue","_series","TreeMap_TreeMap","TreeMap","layoutAlgorithm","squarify","zoomable","_usesData","maxLevels","currentLevel","hideParentColumns","sorting","ValueAxis","strictMinMax","xRenderer","axisFills","baseGrid","yRenderer","seriesTemplates","virtualParent","zoomOutButton","zoomToChartDataItem","_homeDataItem","_navigationBar","navigationBar","createTreeSeries","_tempSeries","homeDataItem","clone","_homeText","getMinMax","layoutItems","sort","_updateDataItemIndexes","navigationData","parentDataItem","initSeries","reverse","createTreeSeriesReal","utils_Array","indexOf","setData","currentlyZoomed","seriesAppeared","toString","dataUsers","columnsContainer","remove","cursorOverStyle","Mouse","pointer","zoomToSeriesDataItem","toggleBullets","zoomToValues","rangeChangeAnimation","_dataDisposers","once","binaryTree","dice","sliceDice","validateLayout","validateDataItems","validateRawData","n","sums","Array","partition","j","valueOffset","valueTarget","k","hi","mid","valueLeft","valueRight","xk","yk","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","ratio","sqrt","i0","i1","row","handleSeriesAdded2","handleDataItemValueChange","invalidateDataItems","getLegendLevel","legendParent","getExporting","exporting","info","format","AxisRendererX3D_AxisRendererX3D","AxisRendererX3D","dx3D","dy3D","getHeight","handle3DChanged","AxisRendererX","AxisRendererY3D_AxisRendererY3D","AxisRendererY3D","getWidth","Column3D_Column3D","Column3D","createAssets","column3D","Rectangle3D","Column","ColumnSeries3D_ColumnSeries3DDataItem","ColumnSeries3DDataItem","ColumnSeries3D_ColumnSeries3D","ColumnSeries3D","applyOnClones","leftAxesContainer","rightAxesContainer","bottomAxesContainer","topAxesContainer","_columnsContainer","validateDataElementReal","validateDataElements","createColumnTemplate","XYChart3D_XYChart3DDataItem","XYChart3DDataItem","XYChart3D_XYChart3D","XYChart3D","updateSeriesMasks","fixLayout","fixColumns","marginTop","paddingRight","scrollbarX","scrollbarY","clustered","depthIndex","s","inversed_1","baseAxis","maskColumns","Candlestick_Candlestick","Candlestick","lowLine","highLine","CandlestickSeries_CandlestickSeriesDataItem","CandlestickSeriesDataItem","lowValueX","lowValueY","highValueX","highValueY","CandlestickSeries_CandlestickSeries","CandlestickSeries","groupFields","positiveColor","negativeColor","dropFromOpenState","riseFromOpenState","validateCandlestick","lowLine_1","highLine_1","open_1","yOpenField","close_1","yOpen","yClose","yLow","yLowField","yHigh","yHighField","open_2","xOpenField","close_2","xOpen","xClose","xLow","xLowField","xHigh","xHighField","axisRanges","axisRange","rangeColumn","rangesColumns","uid","rangeLowLine","rangehighLine","_xLowField","_yLowField","_xHighField","_yHighField","defineFields","yAxisFieldName","axisFieldName","xAxisFieldName","addValueField","_xValueFields","_yValueFields","cw","ch","OHLC_OHLC","OHLC","openLine","highLowLine","closeLine","OHLCSeries_OHLCSeriesDataItem","OHLCSeriesDataItem","OHLCSeries_OHLCSeries","OHLCSeries","openLine_1","highLowLine_1","closeLine_1","rangeOpenLine","rangeCloseLine","rangeHighLowLine","StepLineSeriesSegment_StepLineSeriesSegment","StepLineSeriesSegment","smoothnessX","smoothnessY","noRisers","vertical","strokeSprite","fillSprite","LineSeriesSegment","StepLineSeries_StepLineSeriesDataItem","StepLineSeriesDataItem","StepLineSeries_StepLineSeries","StepLineSeries","startLocation","endLocation","startLocationX","endLocationX","startLocationY","endLocationY","getAdjustedXLocation","prevPoint","point0","createSegment","RadarColumn_RadarColumn","RadarColumn","radarColumn","RadarColumnSeries_RadarColumnSeriesDataItem","RadarColumnSeriesDataItem","RadarColumnSeries_RadarColumnSeries","RadarColumnSeries","lAngle","rAngle","tRadius","bRadius","cellAngle","setColumnStates","offset","temp","contents","sprites","setKey","FunnelSlice_FunnelSlice","FunnelSlice","bottomWidth","topWidth","expandDistance","pt","pixelPaddingTop","pb","pixelPaddingBottom","pr","pixelPaddingRight","pl","pixelPaddingLeft","ed","tl","tw","tr","br","bw","bl","cpr","cpl","qp1","qp2","tickPoint","tt","tb","bt","bb","mlx","mty","FunnelTick_FunnelTick","FunnelTick","_label","_slice","p0","labelsOpposite","maxRight","maxBottom","Tick","FunnelSeries_FunnelSeriesDataItem","FunnelSeriesDataItem","_sliceLink","sliceLink_1","sliceLinks","slicesContainer","PercentSeries","FunnelSeries_FunnelSeries","FunnelSeries","_nextY","labelsContainer","bottomRatio","createTick","initSlice","scale","observe","handleSliceScale","handleSliceMove","initLabel","labelTemplate","alignLabels","interactionsEnabled","dItem","ignoreZeroValues","_total","_count","arrangeLabels","getNextValue","nextValue","nextItem","formDataElement","sliceLink","decorateSlice","linkHeight","getLastLabel","lastLabel","lastY","lastX","_sliceLinks","startIndex","endIndex","setAlignLabels","margin","labelAlign","labelValign","PyramidSeries_PyramidSeriesDataItem","PyramidSeriesDataItem","PyramidSeries_PyramidSeries","PyramidSeries","pyramidHeight","valueIs","_nextWidth","relValue","_pyramidHeight","_pyramidWidth","ticksContainer","absoluteSum","pyramidWidth","sliceTopWidth","c","tan","sliceHeight","sliceBottomWidth","square","sliceWidth","PictorialStackedSeries_PictorialStackedSeriesDataItem","PictorialStackedSeriesDataItem","PictorialStackedSeries_PictorialStackedSeries","PictorialStackedSeries","_maskSprite","maskSprite","pictureWidth","pictureHeight","newWidth","newHeight","slices","hs","ConeColumn_ConeColumn","ConeColumn","coneColumn","Cone","ConeSeries_ConeSeriesDataItem","ConeSeriesDataItem","ConeSeries_ConeSeries","ConeSeries","CurvedColumn_CurvedColumn","CurvedColumn","curvedColumn","realWidth","realHeight","realX","realY","CurvedColumnSeries_CurvedColumnSeriesDataItem","CurvedColumnSeriesDataItem","CurvedColumnSeries_CurvedColumnSeries","CurvedColumnSeries","CircleBullet_CircleBullet","CircleBullet","circle","ErrorBullet_ErrorBullet","ErrorBullet","errorLine","isDynamic","NavigationBar_NavigationBarDataItem","NavigationBarDataItem","DataItem","NavigationBar_NavigationBar","NavigationBar","textLink","TextLink","paddingTop","paddingBottom","_linksIterator","createNewItems","triangle","Triangle","direction","marginLeft","marginRight","separators","activeLink","fontWeight","getLast","separator","Component","RadarCursor_RadarCursor","RadarCursor","truePixelRadius","triggerMoveReal","cursorTooltipEnabled","updateLineX","updateLineY","updateSelection","lineX","fullWidthLineX","currentItemStartPoint","currentItemEndPoint","fillStartAngle","lineY","fullWidthLineY","_usesSelection","downPoint","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","behavior","selection","getPositions","xPosition","yPosition","updatePoint","handleXTooltipPosition","handleYTooltipPosition","updateLinePositions","getRanges","upPoint","upAngle","upRadius","xRange","yRange","updateSize","fixPoint","XYCursor","window","am4charts","charts_namespaceObject"],"mappings":"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","file":"charts.js","sourcesContent":["/**\r\n * Radar series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Sprite } from \"../../core/Sprite\";\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 * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeriesDataItem\";\r\n\r\n\t\tthis.setLocation(\"dateX\", 0, 0);\r\n\t\tthis.setLocation(\"dateY\", 0, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesProperties extends ILineSeriesProperties {\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tconnectEnds?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarSeriesAdapters extends ILineSeriesAdapters, IRadarSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a radar graph.\r\n *\r\n * @see {@link IRadarSeriesEvents} for a list of available Events\r\n * @see {@link IRadarSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IRadarSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: RadarSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeries\";\r\n\t\tthis.connectEnds = true;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new RadarSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n\t *\r\n\t * @param    dataItem   Data item\r\n\t * @param    xKey       Name of X data field\r\n\t * @param    yKey       Name of Y data field\r\n\t * @param    locationX  X location\r\n\t * @param    locationY  Y location\r\n\t * @param    stackKeyX  ?\r\n\t * @param    stackKeyY  ?\r\n\t * @returns             Coordinates\r\n\t */\r\n\tpublic getPoint(dataItem: RadarSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\r\n\t\t// hack to be able to determine angle later\r\n\t\tif (radius == 0) {\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\t//\t\tangle = $math.fitToRange(angle, startAngle, endAngle);\r\n\t\tif (angle < startAngle || angle > endAngle) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points    [description]\r\n\t * @param dataItem  [description]\r\n\t * @param xField    [description]\r\n\t * @param yField    [description]\r\n\t * @param backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.locations[xField], dataItem.locations[yField]);\r\n\t\tif (point) {\r\n\t\t\tpoints.push(point);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = <AxisRendererRadial>this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [drawSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param segment      [description]\r\n\t * @param points       [description]\r\n\t * @param closePoints  [description]\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet axis: Axis = this.yAxis;\r\n\t\tlet renderer: AxisRendererRadial = <AxisRendererRadial>axis.renderer;\r\n\r\n\t\tif (this.connectEnds && Math.abs(renderer.endAngle - renderer.startAngle) == 360) {\r\n\t\t\t// adds one point to the beginning of closePoints array, if needed\r\n\t\t\tif (this.dataFields[<keyof this[\"_dataFields\"]>this._xOpenField] ||\r\n\t\t\t\tthis.dataFields[<keyof this[\"_dataFields\"]>this._yOpenField] ||\r\n\t\t\t\tthis.stacked) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t\tif (closePoints.length > 0) {\r\n\t\t\t\t\tclosePoints.unshift(closePoints[closePoints.length - 1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsuper.drawSegment(segment, points, closePoints);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t * @param value  Connect?\r\n\t */\r\n\tpublic set connectEnds(value: boolean) {\r\n\t\tthis.setPropertyValue(\"connectEnds\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Connect?\r\n\t */\r\n\tpublic get connectEnds(): boolean {\r\n\t\treturn this.getPropertyValue(\"connectEnds\");\r\n\t}\r\n\r\n\tprotected positionBulletReal(bullet:Sprite, positionX:number, positionY:number){\r\n\t\tlet xAxis = this.xAxis;\r\n\t\tlet yAxis = this.yAxis;\r\n\r\n\t\tif(positionX < xAxis.start || positionX > xAxis.end || positionY < yAxis.start || positionY > yAxis.end){\r\n\t\t\tbullet.visible = false;\r\n\t\t}\r\n\t\t\r\n\t\tbullet.moveTo(this.xAxis.renderer.positionToPoint(positionX, positionY));\t\t\r\n\t}\r\n\r\n\r\n\tprotected setXAxis(axis: Axis) {\r\n\t\tsuper.setXAxis(axis);\r\n\t\tthis.updateRendererRefs();\r\n\t}\r\n\r\n\tprotected setYAxis(axis: Axis) {\r\n\t\tsuper.setYAxis(axis);\r\n\t\tthis.updateRendererRefs();\r\n\t}\r\n\r\n\tprotected updateRendererRefs() {\r\n\t\tlet rendererX = <AxisRendererCircular>this.xAxis.renderer;\r\n\t\tlet rendererY = <AxisRendererRadial>this.yAxis.renderer;\r\n\r\n\t\trendererX.axisRendererY = rendererY;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarSeries\"] = RadarSeries;\r\nregistry.registeredClasses[\"RadarSeriesDataItem\"] = RadarSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarSeries.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisFill, IAxisFillProperties, IAxisFillAdapters, IAxisFillEvents } from \"./AxisFill\";\r\nimport { Axis } from \"./Axis\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { AxisRendererCircular } from \"./AxisRendererCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularProperties extends IAxisFillProperties {\r\n\r\n\t/**\r\n\t * Inner radius. Relative ir absolute.\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius. Relative or absolute.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t */\r\n\tcornerRadius?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularEvents extends IAxisFillEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisFillCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisFillCircularAdapters extends IAxisFillAdapters, IAxisFillCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Provides fill element functionality for circular Axes.\r\n *\r\n * @see {@link IAxisFillCircularEvents} for a list of available events\r\n * @see {@link IAxisFillCircularAdapters} for a list of available Adapters\r\n * @todo Needs description\r\n */\r\nexport class AxisFillCircular extends AxisFill {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisFillCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisFillCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisFillCircularEvents;\r\n\r\n\t/**\r\n\t * An SVG path, used to draw fill shape.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic fillPath: string;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Axis\r\n\t */\r\n\tconstructor(axis: Axis) {\r\n\t\tsuper(axis);\r\n\r\n\t\tthis.className = \"AxisFillCircular\";\r\n\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tif(this.__disabled || this.disabled){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = <AxisRendererCircular>this.axis.renderer;\r\n\t\t\tthis.fillPath = renderer.getPositionRangePath(this.startPosition, this.endPosition, this.radius, $type.hasValue(this.innerRadius) ? this.innerRadius : renderer.innerRadius, this.cornerRadius);\r\n\t\t\tthis.path = this.fillPath;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param value  Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param value  Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t *\r\n\t * @param value  Corner radius (px)\r\n\t */\r\n\tpublic set cornerRadius(value: number) {\r\n\t\tthis.setPropertyValue(\"cornerRadius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Corner radius (px)\r\n\t */\r\n\tpublic get cornerRadius(): number {\r\n\t\treturn this.getPropertyValue(\"cornerRadius\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisFillCircular\"] = AxisFillCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisFillCircular.ts","/**\r\n * A module defining functionality for circular axis grid elements.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Grid, IGridProperties, IGridAdapters, IGridEvents } from \"./Grid\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[GridCircular]].\r\n */\r\nexport interface IGridCircularProperties extends IGridProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the circular grid. (absolute or relative)\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the circular grid. (absolute or relative)\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[GridCircular]].\r\n */\r\nexport interface IGridCircularEvents extends IGridEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GridCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGridCircularAdapters extends IGridAdapters, IGridCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a circular grid element for circular-type axis.\r\n *\r\n * @see {@link IGridCircularEvents} for a list of available events\r\n * @see {@link IGridCircularAdapters} for a list of available Adapters\r\n * @todo Review: container is better, as we'll be able to attach something to the GridCircular, also with 3d charts we might need some additional elements\r\n */\r\nexport class GridCircular extends Grid {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IGridCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IGridCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IGridCircularEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GridCircular\";\r\n\t\tthis.pixelPerfect = false;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular grid. (absolute or relative)\r\n\t *\r\n\t * @param value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GridCircular\"] = GridCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/GridCircular.ts","/**\r\n * Module, defining Axis Renderer for circular axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRenderer, IAxisRendererProperties, IAxisRendererAdapters, IAxisRendererEvents } from \"./AxisRenderer\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisFillCircular } from \"./AxisFillCircular\";\r\nimport { AxisRendererRadial } from \"./AxisRendererRadial\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { GridCircular } from \"./GridCircular\";\r\nimport { AxisLabelCircular } from \"./AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisBullet } from \"./AxisBullet\";\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularProperties extends IAxisRendererProperties {\r\n\r\n\t/**\r\n\t * Start angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the circular axis in degrees (0-360).\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Outer radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Specifies if axis should use it's own start/end angles or the ones set on chart.\r\n\t */\r\n\tuseChartAngles?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularEvents extends IAxisRendererEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererCircularAdapters extends IAxisRendererAdapters, IAxisRendererCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for circular axis.\r\n */\r\nexport class AxisRendererCircular extends AxisRenderer {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererCircularEvents;\r\n\r\n\t/**\r\n\t * Defines type of the grid elements.\r\n\t */\r\n\tpublic _gridType: GridCircular;\r\n\r\n\t/**\r\n\t * Defines type for the fill elements.\r\n\t */\r\n\tpublic _fillType: AxisFillCircular;\r\n\r\n\t/**\r\n\t * Defines type for the label elements.\r\n\t */\r\n\tpublic _labelType: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\tpublic axisRendererY: AxisRendererRadial;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\t// axis.layout = \"none\"; // does not trigger redraw when size changes\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.className = \"AxisRendererCircular\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.useChartAngles = true;\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.grid.template.location = 0;\r\n\r\n\t\tthis.labels.template.location = 0;\r\n\t\tthis.labels.template.radius = 15;\r\n\r\n\t\tthis.ticks.template.location = 0;\r\n\t\tthis.ticks.template.pixelPerfect = false;\r\n\t\tthis.tooltipLocation = 0;\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t* @ignore\r\n\t*/\r\n\tpublic setAxis(axis: Axis) {\r\n\t\tsuper.setAxis(axis);\r\n\t\taxis.isMeasured = false;\r\n\r\n\t\t// modify x and y so that tooltip would always be on circle\r\n\t\tlet tooltip = axis.tooltip;\r\n\r\n\t\ttooltip.adapter.add(\"dx\", (x, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.cos(Math.atan2(point.y, point.x)) - point.x;\r\n\t\t});\r\n\r\n\t\ttooltip.adapter.add(\"dy\", (y, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.sin(Math.atan2(point.y, point.x)) - point.y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn 2 * Math.PI * this.pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value  Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value  Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"innerRadius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if axis should use its own `startAngle` and `endAngle` or\r\n\t * inherit them from relative properties from chart.\r\n\t *\r\n\t * @default false\r\n\t * @param value  Use chart's angles\r\n\t */\r\n\tpublic set useChartAngles(value: boolean) {\r\n\t\tthis.setPropertyValue(\"useChartAngles\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use chart angles\r\n\t */\r\n\tpublic get useChartAngles(): boolean {\r\n\t\treturn this.getPropertyValue(\"useChartAngles\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position  Position (0-1)\r\n\t * @param position2  Position (0-1) Position on the second axis\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number, position2?: number): IPoint {\r\n\r\n\t\tif (!$type.isNumber(position2)) {\r\n\t\t\tposition2 = 1;\r\n\t\t}\r\n\r\n\t\tlet coordinate: number = this.positionToCoordinate(position);\r\n\t\tlet angle: number = this.startAngle + (this.endAngle - this.startAngle) * coordinate / this.axisLength;\r\n\t\tlet radius = this.pixelRadius;\r\n\t\tlet innerRadius = this.pixelInnerRadius;\r\n\r\n\t\tif (this.axisRendererY) {\r\n\t\t\tlet realRadius = $math.fitToRange(this.axisRendererY.positionToCoordinate(position2), 0, Infinity)\r\n\t\t\treturn { x: realRadius * $math.cos(angle), y: realRadius * $math.sin(angle) };\r\n\t\t}\r\n\r\n\t\treturn { x: $math.cos(angle) * innerRadius + (radius - innerRadius) * $math.cos(angle) * position2, y: $math.sin(angle) * innerRadius + (radius - innerRadius) * $math.sin(angle) * position2 };\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position (0-1) on axis to angle in degrees (0-360).\r\n\t *\r\n\t * @param position  Position (0-1)\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic positionToAngle(position: number): number {\r\n\t\tlet axis: Axis = this.axis;\r\n\r\n\t\tlet arc: number = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n\r\n\t\tlet angle: number;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tangle = this.startAngle + (axis.end - position) * arc;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tangle = this.startAngle + (position - axis.start) * arc;\r\n\t\t}\r\n\r\n\t\treturn $math.round(angle, 3);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\t\tthis.line.path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius, radius);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid         Grid element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  End position\r\n\t */\r\n\tpublic updateGridElement(grid: GridCircular, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif ($type.isNumber(point.x) && $type.isNumber(point.y) && grid.element) {\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet radius: number = $utils.relativeRadiusToValue($type.hasValue(grid.radius) ? grid.radius : percent(100), this.pixelRadius);\r\n\r\n\t\t\tlet gridInnerRadius = $utils.relativeRadiusToValue(grid.innerRadius, this.pixelRadius);\r\n\t\t\tgrid.zIndex = 0;\r\n\r\n\t\t\tlet innerRadius: number = $utils.relativeRadiusToValue($type.isNumber(gridInnerRadius) ? gridInnerRadius : this.innerRadius, this.pixelRadius, true);\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick         Tick element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  End position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number, endPosition: number) {\r\n\r\n\t\tposition = position + (endPosition - position) * tick.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (tick.element) {\r\n\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet tickLength: number = tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength = -tickLength;\r\n\t\t\t}\r\n\t\t\ttick.zIndex = 1;\r\n\t\t\ttick.path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) }) + $path.lineTo({ x: (radius + tickLength) * $math.cos(angle), y: (radius + tickLength) * $math.sin(angle) });\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions axis bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet       AxisBullet element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  End position\r\n\t */\r\n\tpublic updateBullet(bullet: Sprite, position: number, endPosition: number): void {\r\n\t\tlet location = 0.5;\r\n\t\tif (bullet instanceof AxisBullet) {\r\n\t\t\tlocation = bullet.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\r\n\t\tpoint = { x: radius * $math.cos(angle), y: radius * $math.sin(angle) }\r\n\r\n\t\tthis.positionItem(bullet, point);\r\n\r\n\t\tthis.toggleVisibility(bullet, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label        Label element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlabel.fixPosition(this.positionToAngle(position), this.pixelRadius);\r\n\t\tlabel.zIndex = 2;\r\n\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value  Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param value  End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition  Starting position\r\n\t * @param endPosition    End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number, radius?: number | Percent, innerRadius?: number | Percent, cornerRadius?: number): string {\r\n\t\tlet path: string = \"\";\r\n\t\tif ($type.isNumber(startPosition) && $type.isNumber(endPosition)) {\r\n\r\n\t\t\tif (!$type.hasValue(radius)) {\r\n\t\t\t\tradius = this.radius;\r\n\t\t\t}\r\n\r\n\t\t\tstartPosition = $math.max(startPosition, this.axis.start);\r\n\t\t\tendPosition = $math.min(endPosition, this.axis.end);\r\n\r\n\t\t\tif (endPosition < startPosition) {\r\n\t\t\t\tendPosition = startPosition;\r\n\t\t\t}\r\n\r\n\t\t\tlet pixelRadius: number = $utils.relativeRadiusToValue(radius, this.pixelRadius);\r\n\t\t\tlet pixelInnerRadius: number = $utils.relativeRadiusToValue(innerRadius, this.pixelRadius, true);\r\n\r\n\t\t\tlet startAngle: number = this.positionToAngle(startPosition);\r\n\t\t\tlet endAngle: number = this.positionToAngle(endPosition);\r\n\r\n\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\tpath = $path.arc(startAngle, arc, pixelRadius, pixelInnerRadius, pixelRadius, cornerRadius);\r\n\t\t}\r\n\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new grid element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Grid element\r\n\t */\r\n\tpublic createGrid(): this[\"_gridType\"] {\r\n\t\treturn new GridCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new fill element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Fill element\r\n\t */\r\n\tpublic createFill(axis: Axis): this[\"_fillType\"] {\r\n\t\treturn new AxisFillCircular(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new label element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return Label element\r\n\t */\r\n\tpublic createLabel(): this[\"_labelType\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point  Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet angle = $math.fitAngleToRange($math.getAngle(point), this.startAngle, this.endAngle);\r\n\t\treturn this.coordinateToPosition((angle - this.startAngle) / 360 * this.axisLength);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererCircular\"] = AxisRendererCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","/**\r\n * Module, defining Axis Renderer for radial axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"./AxisRendererY\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { WavedCircle } from \"../../core/elements/WavedCircle\";\r\nimport { PointerOrientation } from \"../../core/elements/Tooltip\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisBullet } from \"./AxisBullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialProperties extends IAxisRendererYProperties {\r\n\r\n\t/**\r\n\t * Start angle of the radial axis in degrees. (0-360)\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the radial axis in degrees. (0-360)\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * A grid type to display: \"circles\" or \"polygons\".\r\n\t *\r\n\t * @default \"circles\"\r\n\t */\r\n\tgridType?: \"circles\" | \"polygons\"; //@todo: move it to GridRadial?\r\n\r\n\t/**\r\n\t * An angle of the axis in degrees. (0-360)\r\n\t */\r\n\taxisAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * Outer radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererRadialAdapters extends IAxisRendererYAdapters, IAxisRendererRadialProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for radial axis.\r\n */\r\nexport class AxisRendererRadial extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererRadialProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererRadialAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererRadialEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer<RadarChart>();\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererRadial\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\t\tthis.minGridDistance = 30;\r\n\t\tthis.gridType = \"circles\";\r\n\t\tthis.axisAngle = -90;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.labels.template.horizontalCenter = \"middle\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn this.pixelRadius - this.pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value  Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value  Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false)\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: RadarChart) {\r\n\t\tthis._chart.set(chart, null);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): RadarChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param position  Position (0-1)\r\n\t * @param position2  Position (0-1) Position on the second axis\r\n\t * @return Point\r\n\t */\r\n\tpublic positionToPoint(position: number, position2?: number): IPoint {\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(position), 0, Infinity);\r\n\t\treturn { x: radius * $math.cos(this.axisAngle), y: radius * $math.sin(this.axisAngle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tthis.line.path = $path.moveTo({ x: this.pixelInnerRadius * $math.cos(this.axisAngle), y: this.pixelInnerRadius * $math.sin(this.axisAngle) }) + $path.lineTo({ x: this.pixelRadius * $math.cos(this.axisAngle), y: this.pixelRadius * $math.sin(this.axisAngle) });\r\n\r\n\t\tlet title = this.axis.title;\r\n\t\ttitle.valign = \"none\";\r\n\t\ttitle.horizontalCenter = \"middle\";\r\n\t\ttitle.verticalCenter = \"bottom\";\r\n\t\ttitle.y = - this.axisLength / 2;\r\n\t\tlet rotation: number = 90;\r\n\t\tif (this.opposite) {\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttitle.rotation = rotation;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid         Grid element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tlet path: string;\r\n\t\tlet radius: number = $math.getDistance(point);\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tif ($type.isNumber(radius) && grid.element) {\r\n\t\t\tlet chart = this.chart;\r\n\t\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\t\tlet count = 0;\r\n\r\n\t\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t\tif(series){\r\n\t\t\t\tcount = series.dataItems.length;\r\n\t\t\t}\r\n\r\n\t\t\t// polygons are only possible if x axis is present\r\n\t\t\t// @todo: review this\r\n\t\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\r\n\t\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius, radius);\r\n\t\t\t}\r\n\t\t\tgrid.path = path;\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param label        Label element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tthis.positionItem(label, point);\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\t// @todo? zero grid for radar chart, is it needed?\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point Point coordinates\r\n\t * @return Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param value  Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angle here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param value  End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @param value  Axis angle\r\n\t */\r\n\tpublic set axisAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"axisAngle\", $math.normalizeAngle(value));\r\n\t\tthis.invalidateAxisItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis angle\r\n\t */\r\n\tpublic get axisAngle(): number {\r\n\t\treturn this.getPropertyValue(\"axisAngle\");\r\n\t\t//return $math.fitToRange(this.getPropertyValue(\"axisAngle\"), this.startAngle, this.endAngle); // no good, as less flexible\r\n\t}\r\n\r\n\t// polygons grid type is only possible under these conditions: xAxis is available and it is CategoryAxis, also at least one series should be added to a chart\r\n\r\n\t/**\r\n\t * Grid type for radial axis.\r\n\t *\r\n\t * A grid on radia axis can either be perfect circles (\"circles\"), or\r\n\t * straight lines (\"polygons\").\r\n\t *\r\n\t * @default \"circles\"\r\n\t * @param value  Grid type\r\n\t */\r\n\tpublic set gridType(value: \"circles\" | \"polygons\") {\r\n\t\tthis.setPropertyValue(\"gridType\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Grid type\r\n\t */\r\n\tpublic get gridType(): \"circles\" | \"polygons\" {\r\n\t\tlet axis: Axis = this.chart.xAxes.getIndex(0);\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\treturn this.getPropertyValue(\"gridType\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn \"circles\";\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param startPosition  Starting position\r\n\t * @param endPosition    End position\r\n\t * @return SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number): string {\r\n\t\tlet pixelInnerRadius = this.pixelInnerRadius;\r\n\t\tlet pixelRadius = this.axisLength + pixelInnerRadius;\r\n\t\tlet innerRadius: number = $math.fitToRange(this.positionToCoordinate(startPosition), pixelInnerRadius, pixelRadius);\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(endPosition), pixelInnerRadius, pixelRadius);\r\n\r\n\t\t//let angleCount: number = this.angleCount;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\tlet path: string;\r\n\r\n\t\tlet chart = this.chart;\r\n\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\tlet count = 0;\r\n\t\tif(series){\r\n\t\t\tcount = series.dataItems.length;\t\t\r\n\t\t}\r\n\r\n\t\t// polygons are only possible if x axis is present\r\n\t\t// @todo: review this\r\n\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\r\n\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\r\n\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\r\n\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\r\n\t\t\tfor (let i = count - 1; i >= 0; i--) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpath = $path.arc(startAngle, arc, radius, innerRadius);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions an axis break element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axisBreak Break element\r\n\t */\r\n\tpublic updateBreakElement(axisBreak: AxisBreak) {\r\n\t\t// @todo: someday we might need axis break when gridType is polygons\r\n\r\n\t\tlet startLine: WavedCircle = <WavedCircle>axisBreak.startLine;\r\n\t\tlet endLine: WavedCircle = <WavedCircle>axisBreak.endLine;\r\n\t\tlet fillShape: WavedCircle = <WavedCircle>axisBreak.fillShape;\r\n\r\n\t\tlet startPoint: IPoint = axisBreak.startPoint;\r\n\t\tlet endPoint: IPoint = axisBreak.endPoint;\r\n\r\n\t\tstartLine.radius = Math.abs(startPoint.y);\r\n\t\tendLine.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.innerRadius = Math.abs(startPoint.y);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates visual elements for and axis break.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axisBreak Axis break\r\n\t */\r\n\tpublic createBreakSprites(axisBreak: AxisBreak): void {\r\n\t\taxisBreak.startLine = new WavedCircle();\r\n\t\taxisBreak.endLine = new WavedCircle();\r\n\t\taxisBreak.fillShape = new WavedCircle();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates some of the Axis tooltip's visual properties, related to\r\n\t * rendering of the Axis.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateTooltip(): void {\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tif (axis) {\r\n\r\n\t\t\tlet bigNum: number = 4000;\r\n\t\t\tlet bbx: number = -4000;\r\n\t\t\tlet bby: number = -4000;\r\n\t\t\tlet bbw: number = bigNum * 2;\r\n\t\t\tlet bbh: number = bigNum * 2;\r\n\t\t\tlet axisAngle: number = this.axisAngle;\r\n\t\t\tif (axisAngle < 0) {\r\n\t\t\t\taxisAngle += 360;\r\n\t\t\t}\r\n\t\t\tlet tooltipOrientation: PointerOrientation = \"vertical\";\r\n\t\t\tif ((axisAngle > 45 && axisAngle < 135) || (axisAngle > 225 && axisAngle < 315)) {\r\n\t\t\t\ttooltipOrientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\tthis.axis.updateTooltip(tooltipOrientation, { x: bbx, y: bby, width: bbw, height: bbh });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param tick      Tick element\r\n\t * @param position  Position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number, endPosition: number): void {\r\n\t\tposition = position + (endPosition - position) * tick.location;\r\n\t\t\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\t\r\n\t\tif (tick.element) {\r\n\t\t\tlet angle: number = $math.normalizeAngle(this.axisAngle + 90);\r\n\t\t\tif (angle / 90 != Math.round(angle / 90)) {\r\n\t\t\t\ttick.pixelPerfect = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttick.pixelPerfect = true;\r\n\t\t\t}\r\n\t\t\tlet tickLength = -tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength *= -1;\r\n\t\t\t}\r\n\t\t\ttick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: tickLength * $math.cos(angle), y: tickLength * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.positionItem(tick, point);\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates and positions axis bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet       AxisBullet element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  End position\r\n\t */\r\n\tpublic updateBullet(bullet: Sprite, position: number, endPosition: number): void {\r\n\t\tlet location = 0.5;\r\n\t\tif (bullet instanceof AxisBullet) {\r\n\t\t\tlocation = bullet.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\t\r\n\t\tthis.positionItem(bullet, point);\r\n\r\n\t\tthis.toggleVisibility(bullet, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a position on the axis to a coordinate in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position  Position (0-1)\r\n\t * @return Coordinate (px)\r\n\t */\r\n\tpublic positionToCoordinate(position: number): number {\r\n\t\tlet coordinate: number;\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tlet axisFullLength = axis.axisFullLength;\r\n\t\tlet innerRadius = this.pixelInnerRadius;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tcoordinate = (axis.end - position) * axisFullLength + innerRadius;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcoordinate = (position - axis.start) * axisFullLength + innerRadius;\r\n\t\t}\r\n\r\n\t\treturn $math.round(coordinate, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param point  Point\r\n\t * @return Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\r\n\t\tlet coordinate = ($math.getDistance(point) - this.pixelInnerRadius);\r\n\t\treturn this.coordinateToPosition(coordinate);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererRadial\"] = AxisRendererRadial;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","/**\r\n * Radar chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { RadarSeries } from \"../series/RadarSeries\";\r\nimport { RadarColumnSeries } from \"../series/RadarColumnSeries\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { RadarCursor } from \"../cursors/RadarCursor\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarChartDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarChart]].\r\n */\r\nexport interface IRadarChartDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarChart]].\r\n */\r\nexport interface IRadarChartProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Radius of the Radar face. Absolute or relative.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Radar face. Percent value is relative to radius.\r\n\t *\r\n\t * @todo review desc\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t */\r\n\tendAngle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarChart]].\r\n */\r\nexport interface IRadarChartEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarChartAdapters extends IXYChartAdapters, IRadarChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Radar chart.\r\n *\r\n * @see {@link IRadarChartEvents} for a list of available Events\r\n * @see {@link IRadarChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/radar-chart/} for documentation\r\n * @important\r\n */\r\nexport class RadarChart extends XYChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IRadarChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: RadarSeries | RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererRadial;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererCircular = AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererRadial = AxisRendererRadial;\r\n\r\n\t/**\r\n\t * [_cursor description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tpublic _cursor: RadarCursor;\r\n\r\n\t/**\r\n\t * A container that holds Radar visual elements.\r\n\t */\r\n\tpublic radarContainer: Container;\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _pixelInnerRadius: number;\r\n\r\n\r\n\t/**\r\n\t * used by cursor. We adjust innerradius if start and end angle are close to each other\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic innerRadiusModifyer: number = 1;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChart\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\t\tthis.innerRadius = 0;\r\n\r\n\t\tlet radarContainer = this.plotContainer.createChild(Container);\r\n\t\tradarContainer.shouldClone = false;\r\n\t\tradarContainer.layout = \"absolute\";\r\n\t\tradarContainer.align = \"center\";\r\n\t\tradarContainer.valign = \"middle\";\r\n\r\n\t\tthis.seriesContainer.parent = radarContainer;\r\n\t\tthis.radarContainer = radarContainer;\r\n\t\tthis.bulletsContainer.parent = radarContainer;\r\n\t\tthis.axisBulletsContainer = radarContainer;\r\n\r\n\t\tthis._cursorContainer = radarContainer;\r\n\r\n\t\tthis._bulletMask = radarContainer.createChild(Circle);\r\n\t\tthis._bulletMask.shouldClone = false;\r\n\t\tthis._bulletMask.element = this.paper.add(\"path\");\r\n\t\tthis._bulletMask.opacity = 0;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Radar chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates Axis with required properties for this chart.\r\n\t *\r\n\t * @param axis  Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\tsuper.processAxis(axis);\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\t\trenderer.gridContainer.parent = renderer;\r\n\t\trenderer.breakContainer.parent = renderer;\r\n\t\taxis.parent = this.radarContainer;\r\n\t\trenderer.toBack();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all X axes after range change event.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tsuper.handleXAxisRangeChange();\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all Y axes after range change event.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tsuper.handleYAxisRangeChange();\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config  Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"RadarCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"RadarSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axes\r\n\t\t\t/*if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.xAxes[i].type = config.xAxes[i].type || \"AxisRendererCircular\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.yAxes[i].type = config.yAxes[i].type || \"AxisRendererRadial\";\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Does calculations before drawing the chart.\r\n\t */\r\n\tprotected beforeDraw(): void {\r\n\t\tsuper.beforeDraw();\r\n\r\n\t\tlet plotContainer = this.plotContainer;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\tlet wr = plotContainer.innerWidth / rect.width;\r\n\t\tlet hr = plotContainer.innerHeight / rect.height;\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tlet value = innerRadius.value;\r\n\t\t\tlet mr = Math.min(wr, hr);\r\n\t\t\tvalue = Math.max(mr * value, mr - Math.min(plotContainer.innerHeight, plotContainer.innerWidth)) / mr;\r\n\t\t\tinnerRect = $math.getArcRect(this.startAngle, this.endAngle, value);\r\n\r\n\t\t\tthis.innerRadiusModifyer = value / innerRadius.value;\r\n\t\t\tinnerRadius = percent(value * 100);\r\n\t\t}\r\n\t\t// @todo handle this when innerRadius set in pixels (do it for pie also)\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(plotContainer.innerWidth / rect.width, plotContainer.innerHeight / rect.height);\r\n\r\n\t\tlet diameter = $utils.relativeRadiusToValue(this.radius, maxRadius) * 2 || 0;\r\n\t\tlet radius = diameter / 2;\r\n\t\tlet startAngle = this.startAngle;\r\n\t\tlet endAngle = this.endAngle;\r\n\r\n\t\tthis._pixelInnerRadius = $utils.relativeRadiusToValue(innerRadius, radius);\r\n\r\n\t\tthis._bulletMask.path = $path.arc(startAngle, endAngle - startAngle, radius, this._pixelInnerRadius);\r\n\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\tif(axis.renderer.useChartAngles){\r\n\t\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\t\taxis.renderer.endAngle = endAngle;\r\n\t\t\t}\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\taxis.renderer.endAngle = endAngle;\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\tlet cursor = this.cursor;\r\n\t\tif (cursor) {\r\n\t\t\tcursor.width = diameter;\r\n\t\t\tcursor.height = diameter;\r\n\t\t\tcursor.startAngle = startAngle;\r\n\t\t\tcursor.endAngle = endAngle;\r\n\t\t}\r\n\r\n\t\tthis.radarContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.radarContainer.validatePosition();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series, suitable for RadarChart.\r\n\t *\r\n\t * @return New Series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new RadarSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value  Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value  End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value  Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius in pixels\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn this._pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * If set in Percent, it will be relative to `radius`. (outer radius)\r\n\t *\r\n\t * @param value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\t//do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\t// do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarChart\"] = RadarChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/RadarChart.ts","/**\r\n * Functionality for drawing simple ClockHands\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { Trapezoid } from \"../../core/elements/Trapezoid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { GaugeChart } from \"../types/GaugeChart\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ClockHand]].\r\n */\r\nexport interface IClockHandProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(100)\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's tip.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\tendWidth: number;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's base.\r\n\t *\r\n\t * @default 5\r\n\t */\r\n\tstartWidth: number;\r\n\r\n\t/**\r\n\t * rotation direction\r\n\t * @default \"any\"\r\n\t */\r\n\trotationDirection: \"any\" | \"clockWise\" | \"counterClockWise\";\r\n}\r\n\r\n/**\r\n * Defines events for [[ClockHand]].\r\n */\r\nexport interface IClockHandEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ClockHand]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IClockHandAdapters extends IContainerAdapters, IClockHandProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * ClockHand class is capable of drawing a simple pointy shape with optionally\r\n * rounderd corners and an icon.\r\n *\r\n * @see {@link IClockHandEvents} for a list of available events\r\n * @see {@link IClockHandAdapters} for a list of available Adapters\r\n * @todo Improve\r\n * @important\r\n */\r\nexport class ClockHand extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IClockHandProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IClockHandAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IClockHandEvents;\r\n\r\n\t/**\r\n\t * A circle element used as hand's base.\r\n\t */\r\n\tprotected _pin: Circle;\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t */\r\n\tprotected _hand: Trapezoid;\r\n\r\n\t/**\r\n\t * An Axis hand is related to.\r\n\t */\r\n\tprotected _axis: MutableValueDisposer<Axis> = new MutableValueDisposer<Axis>();\r\n\r\n\t/**\r\n\t * Hand's current value.\r\n\t */\r\n\tprotected _value: any;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ClockHand\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tthis.stroke = this.fill;\r\n\r\n\t\tlet pin: Circle = new Circle();\r\n\t\tpin.radius = 5;\r\n\t\tthis.pin = pin;\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.startWidth = 5;\r\n\t\tthis.endWidth = 1;\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\tlet hand: Trapezoid = new Trapezoid();\r\n\t\tthis.hand = hand;\r\n\r\n\t\tthis._disposers.push(this._axis);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Re(validates) the clock hand, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\tlet hand = this.hand;\r\n\t\thand.width = this.pixelWidth;\r\n\t\tlet h: number = Math.max(this.startWidth, this.endWidth);\r\n\t\thand.height = h;\r\n\t\thand.leftSide = percent(this.startWidth / h * 100);\r\n\t\thand.rightSide = percent(this.endWidth / h * 100);\r\n\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = <AxisRendererCircular>this.axis.renderer;\r\n\r\n\t\t\tlet x0: number = $utils.relativeRadiusToValue(this.innerRadius, renderer.pixelRadius);\r\n\t\t\tlet x1: number = $utils.relativeRadiusToValue(this.radius, renderer.pixelRadius);\r\n\r\n\t\t\thand.x = x0;\r\n\t\t\thand.y = - h / 2;\r\n\r\n\t\t\thand.width = x1 - x0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A circle element used as hand's base. (pin)\r\n\t *\r\n\t * @param pin  Pin element\r\n\t */\r\n\tpublic set pin(pin: Circle) {\r\n\t\tif (this._pin) {\r\n\t\t\tthis.removeDispose(this._pin);\r\n\t\t}\r\n\t\tif (pin) {\r\n\t\t\tthis._pin = pin;\r\n\t\t\tpin.parent = this;\r\n\t\t\tthis._disposers.push(pin);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Pin element\r\n\t */\r\n\tpublic get pin(): Circle {\r\n\t\treturn this._pin;\r\n\t}\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t *\r\n\t * The shape of the trapezoid is controlled by ClockHand's `startWidth` and\r\n\t * `endWidth` properties.\r\n\t *\r\n\t * Set `endWidth` to 1 (px) to make it pointy.\r\n\t *\r\n\t * @param hand  Hand element\r\n\t */\r\n\tpublic set hand(hand: Trapezoid) {\r\n\t\tif (this._hand) {\r\n\t\t\tthis.removeDispose(this._hand);\r\n\t\t}\r\n\t\tif (hand) {\r\n\t\t\tthis._hand = hand;\r\n\t\t\thand.parent = this;\r\n\t\t\tthis._disposers.push(hand);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Hand element\r\n\t */\r\n\tpublic get hand(): Trapezoid {\r\n\t\treturn this._hand;\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param value  Radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param value  Radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's inner end. (base)\r\n\t *\r\n\t * @default 5\r\n\t * @param value  Width (px)\r\n\t */\r\n\tpublic set startWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"startWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Width (px)\r\n\t */\r\n\tpublic get startWidth(): number {\r\n\t\treturn this.getPropertyValue(\"startWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's outer end. (tip)\r\n\t *\r\n\t * @default 1\r\n\t * @param value  Width (px)\r\n\t */\r\n\tpublic set endWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"endWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Width (px)\r\n\t */\r\n\tpublic get endWidth(): number {\r\n\t\treturn this.getPropertyValue(\"endWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Rotation direction\r\n\t *\r\n\t * @default any\r\n\t * @param value\r\n\t */\r\n\tpublic set rotationDirection(value: \"any\" | \"clockWise\" | \"counterClockWise\") {\r\n\t\tthis.setPropertyValue(\"rotationDirection\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return rotationDirection\r\n\t */\r\n\tpublic get rotationDirection(): \"any\" | \"clockWise\" | \"counterClockWise\" {\r\n\t\treturn this.getPropertyValue(\"rotationDirection\");\r\n\t}\r\n\r\n\t/**\r\n\t * Moves clock hand to particular value.\r\n\t *\r\n\t * If `duration` is set to a number in milliseconds, the hand will move\r\n\t * to the new position gracefully, rather than jumping rigth to it.\r\n\t *\r\n\t * Alternatively, you can also set `value` directly.\r\n\t *\r\n\t * @param value     New value\r\n\t * @param duration  Animation duration (ms)\r\n\t * @param easing  Animation easing function\r\n\t */\r\n\tpublic showValue(value: any, duration?: number, easing?: (value: number) => number): void {\r\n\t\tthis._value = value;\r\n\t\tif (value != undefined) {\r\n\t\t\tif (!$type.isNumber(duration)) {\r\n\t\t\t\tduration = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tlet renderer = <AxisRendererCircular>this.axis.renderer;\r\n\t\t\t\tlet newAngle = renderer.positionToAngle(this.axis.anyToPosition(value));\r\n\t\t\t\tlet currentAngle = this.rotation;\r\n\r\n\t\t\t\tif (this.rotationDirection == \"clockWise\") {\r\n\t\t\t\t\tif (newAngle < currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle - 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.rotationDirection == \"counterClockWise\") {\r\n\t\t\t\t\tif (newAngle > currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle + 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.animate({ property: \"rotation\", to: newAngle }, duration, easing);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A current value clock hand is pointing to.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set value(value: any) {\r\n\t\tthis.showValue(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): any {\r\n\t\treturn this._value;\r\n\t}\r\n\r\n\t/**\r\n\t * An Axis clock hand is associated with.\r\n\t *\r\n\t * Hand's `value` relates to values on the Axis.\r\n\t *\r\n\t * @param axis  Axis\r\n\t */\r\n\tpublic set axis(axis: Axis) {\r\n\t\tif (this.axis != axis) {\r\n\t\t\tthis._axis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.events.on(\"datavalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"datarangechanged\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"dataitemsvalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"propertychanged\", this.invalidate, this, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t\tif (axis) {\r\n\t\t\tlet chart: GaugeChart = <GaugeChart>axis.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tthis.rotation = chart.startAngle;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.parent = axis.renderer;\r\n\t\tthis.zIndex = 5;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Axis\r\n\t */\r\n\tpublic get axis(): Axis {\r\n\t\treturn this._axis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers `value` accessor, so that Hand animates to new position, in case\r\n\t * value has changed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateValue() {\r\n\t\tthis.value = this.value;\r\n\t}\r\n\r\n\t/**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config  Config\r\n */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Connect clock hands with axes\r\n\t\t\tif ($type.hasValue(config.axis) && $type.isString(config.axis) && this.map.hasKey(config.axis)) {\r\n\t\t\t\tconfig.axis = this.map.getKey(config.axis);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ClockHand\"] = ClockHand;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ClockHand.ts","/**\r\n * Module for building Gauge charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart, IRadarChartProperties, IRadarChartDataFields, IRadarChartAdapters, IRadarChartEvents, RadarChartDataItem } from \"./RadarChart\";\r\nimport { ListTemplate, IListEvents, ListDisposer } from \"../../core/utils/List\";\r\nimport { ClockHand } from \"../elements/ClockHand\";\r\nimport { Ordering } from \"../../core/utils/Order\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[GaugeChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class GaugeChartDataItem extends RadarChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: GaugeChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartDataFields extends IRadarChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartProperties extends IRadarChartProperties { }\r\n\r\n/**\r\n * Defines events for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartEvents extends IRadarChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GaugeChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGaugeChartAdapters extends IRadarChartAdapters, IGaugeChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Gauge chart.\r\n *\r\n * @see {@link IGaugeChartEvents} for a list of available Events\r\n * @see {@link IGaugeChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/gauge-chart/} for documentation\r\n * @important\r\n */\r\nexport class GaugeChart extends RadarChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IGaugeChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IGaugeChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IGaugeChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IGaugeChartEvents;\r\n\r\n\t/**\r\n\t * A list of [[ClockHand]] items displayed on this Gauge chart.\r\n\t */\r\n\tpublic hands: ListTemplate<ClockHand>;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChart\";\r\n\r\n\t\tthis.startAngle = 180;\r\n\t\tthis.endAngle = 360;\r\n\r\n\t\tthis.hands = new ListTemplate<ClockHand>(new ClockHand());\r\n\t\tthis.hands.events.on(\"inserted\", this.processHand, this, false);\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.hands));\r\n\t\tthis._disposers.push(this.hands.template);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Gauge chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a [[ClockHand]] when it is added to the chart.\r\n\t *\r\n\t * @param event  Event\r\n\t */\r\n\tprotected processHand(event: IListEvents<ClockHand>[\"inserted\"]): void {\r\n\t\tlet hand: ClockHand = event.newValue;\r\n\t\tif (!hand.axis) {\r\n\t\t\thand.axis = this.xAxes.getIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * This function is used to sort element's JSON config properties, so that\r\n\t * some properties that absolutely need to be processed last, can be put at\r\n\t * the end.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param a  Element 1\r\n\t * @param b  Element 2\r\n\t * @return Sorting number\r\n\t */\r\n\tprotected configOrder(a: string, b: string): Ordering {\r\n\t\tif (a == b) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t// Must come last\r\n\t\telse if (a == \"hands\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"hands\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.configOrder(a, b);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GaugeChart\"] = GaugeChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/GaugeChart.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieSeries, PieSeriesDataItem, IPieSeriesDataFields, IPieSeriesProperties, IPieSeriesAdapters, IPieSeriesEvents } from \"../series/PieSeries\";\r\nimport { PieChart3D } from \"../types/PieChart3D\";\r\nimport { Slice3D } from \"../../core/elements/3d/Slice3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieSeries3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieSeries3DDataItem extends PieSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines type of the slice represented by this data item.\r\n\t */\r\n\tpublic _slice: Slice3D;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PieSeries3D;\r\n\r\n\t/**\r\n\t * @todo Remove?\r\n\t * @deprecated\r\n\t */\r\n\tpublic component: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3DDataItem\";\r\n\r\n\t\tthis.values.depthValue = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Slice depth (height).\r\n\t *\r\n\t * @param value  Depth\r\n\t */\r\n\tpublic set depthValue(value: number) {\r\n\t\tthis.setValue(\"depthValue\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth\r\n\t */\r\n\tpublic get depthValue(): number {\r\n\t\treturn this.values[\"depthValue\"].value;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DDataFields extends IPieSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds 3D slice depth (height).\r\n\t */\r\n\tdepthValue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DProperties extends IPieSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie.\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DEvents extends IPieSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieSeries3DAdapters extends IPieSeriesAdapters, IPieSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a slice series on a 3D pie chart.\r\n *\r\n * @see {@link IPieSeries3DEvents} for a list of available Events\r\n * @see {@link IPieSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class PieSeries3D extends PieSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPieSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPieSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPieSeries3DEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PieSeries3DDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: PieChart3D;\r\n\r\n\tpublic _slice: Slice3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3D\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PieSeries3DDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * creates slice\r\n\t */\r\n\tprotected createSlice(): this[\"_slice\"] {\r\n\t\treturn new Slice3D();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: PieSeries3DDataItem): void {\r\n\r\n\t\tlet slice: Slice3D = <Slice3D>dataItem.slice;\r\n\r\n\t\tlet depth: number = this.depth;\r\n\t\tif (!$type.isNumber(depth)) {\r\n\t\t\tdepth = this.chart.depth;\r\n\t\t}\r\n\r\n\t\tlet depthPercent: number = dataItem.values.depthValue.percent;\r\n\t\tif (!$type.isNumber(depthPercent)) {\r\n\t\t\tdepthPercent = 100;\r\n\t\t}\r\n\r\n\t\tslice.depth = depthPercent * depth / 100;\r\n\r\n\t\tlet angle: number = this.angle;\r\n\t\tif (!$type.isNumber(angle)) {\r\n\t\t\tangle = this.chart.angle;\r\n\t\t}\r\n\r\n\t\tslice.angle = angle;\r\n\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\r\n\t\tfor (let i = this._workingStartIndex; i < this._workingEndIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tlet slice: Slice3D = dataItem.slice;\r\n\r\n\t\t\tconst startAngle = slice.startAngle;\r\n\t\t\t// find quarter\r\n\t\t\t//q0 || q1\r\n\t\t\tif ((startAngle >= -90 && startAngle < 90)) {\r\n\t\t\t\tslice.toFront();\r\n\t\t\t}\r\n\t\t\t//q2 || q3\r\n\t\t\telse if ((startAngle >= 90)) {\r\n\t\t\t\tslice.toBack();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t *\r\n\t * @param value  Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie. (0-360)\r\n\t *\r\n\t * @param value  Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet  Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet): void {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = <this[\"_dataItem\"]>bullet.dataItem;\r\n\t\tlet slice = dataItem.slice;\r\n\r\n\t\tbullet.y = bullet.pixelY - slice.depth;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieSeries3D\"] = PieSeries3D;\r\nregistry.registeredClasses[\"PieSeries3DDataItem\"] = PieSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PieSeries3D.ts","/**\r\n * 3D Pie chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieChart, IPieChartProperties, IPieChartDataFields, IPieChartAdapters, IPieChartEvents, PieChartDataItem } from \"./PieChart\";\r\nimport { PieSeries3D } from \"../series/PieSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieChart3DDataItem extends PieChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PieChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DDataFields extends IPieChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DProperties extends IPieChartProperties {\r\n\r\n\t/**\r\n\t * Pie's \"depth\" or \"height\" in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Pie's angle at which we are looking at it. (degrees)\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DEvents extends IPieChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieChart3DAdapters extends IPieChartAdapters, IPieChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D Pie chart.\r\n *\r\n *  * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"Pie3DChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.Pie3DSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"Pie3DSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"Pie3DChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChart3DEvents} for a list of available Events\r\n * @see {@link IPieChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nexport class PieChart3D extends PieChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t */\r\n\tpublic _dataFields: IPieChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPieChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPieChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPieChart3DEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3D\";\r\n\r\n\t\tthis.depth = 20;\r\n\t\tthis.angle = 10;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D pie in pixels.\r\n\t *\r\n\t * This will determine \"height\" of the pie.\r\n\t *\r\n\t * @default 20\r\n\t * @param value  Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tif (this.setPropertyValue(\"depth\", value)) {\r\n\t\t\tthis.invalidateDataUsers();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * An angle of a \"point of view\" in degrees. Possible range 0 - 90.\r\n\t *\r\n\t * @default 10\r\n\t * @param value  Angle (degrees)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tvalue = $math.fitToRange(value, 0, 90);\r\n\t\tif (this.setPropertyValue(\"angle\", value)) {\r\n\t\t\tthis.invalidateDataUsers();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle (degrees)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series.\r\n\t *\r\n\t * @return New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PieSeries3D();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieChart3D\"] = PieChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PieChart3D.ts","/**\r\n * Sliced chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, IPercentChartProperties, IPercentChartDataFields, IPercentChartAdapters, IPercentChartEvents, PercentChartDataItem } from \"./PercentChart\";\r\nimport { FunnelSeries } from \"../series/FunnelSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[SlicedChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class SlicedChartDataItem extends PercentChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: SlicedChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartDataFields extends IPercentChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[SlicedChart]]\r\n */\r\nexport interface ISlicedChartProperties extends IPercentChartProperties { }\r\n\r\n/**\r\n * Defines events for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartEvents extends IPercentChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SlicedChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISlicedChartAdapters extends IPercentChartAdapters, ISlicedChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Sliced chart.\r\n *\r\n * @see {@link ISlicedChartEvents} for a list of available Events\r\n * @see {@link ISlicedChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class SlicedChart extends PercentChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ISlicedChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISlicedChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISlicedChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISlicedChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: FunnelSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChart\";\r\n\r\n\t\tthis.seriesContainer.layout = \"horizontal\";\r\n\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Sliced chart\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the chart, causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SlicedChart\"] = SlicedChart;\r\nregistry.registeredClasses[\"SlicedChartDataItem\"] = SlicedChartDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/SlicedChart.ts","/**\r\n * FlowDiagramNode module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite, AMEvent, visualProperties, ISpriteEvents } from \"../../core/Sprite\";\r\nimport { FlowDiagram, FlowDiagramDataItem } from \"../types/FlowDiagram\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $string from \"../../core/utils/String\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport { LegendSettings, LegendDataItem } from \"../Legend\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[FlowDiagramNode]].\r\n */\r\nexport interface IFlowDiagramNodeProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Name of the node.\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * Sum of all incomming+outgoing link values\r\n\t */\r\n\ttotal?: number;\r\n\r\n\t/**\r\n\t * Sum of all incoming link values\r\n\t */\r\n\ttotalIncoming?: number;\r\n\r\n\t/**\r\n\t * Sum of all outgoing link values\r\n\t */\r\n\ttotalOutgoing?: number;\r\n\r\n\t/**\r\n\t * Node's color.\r\n\t */\r\n\tcolor?: Color;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[FlowDiagramNode]].\r\n */\r\nexport interface IFlowDiagramNodeEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FlowDiagramNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFlowDiagramNodeAdapters extends IContainerAdapters, IFlowDiagramNodeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a node in a Flow Diagram.\r\n *\r\n * A Flow node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[FlowLink]] elements.\r\n *\r\n * @see {@link IFlowDiagramNodeEvents} for a list of available events\r\n * @see {@link IFlowDiagramNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class FlowDiagramNode extends Container {\r\n\r\n\t/**\r\n\t * total ajusted taken in mind chart.minNodeSize\r\n\t */\r\n\tpublic adjustedTotal: number;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFlowDiagramNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFlowDiagramNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFlowDiagramNodeEvents;\r\n\r\n\t/**\r\n\t * A list of data items of the items coming in from another node, one level\r\n\t * up.\r\n\t *\r\n\t * These are what ingoing links are build out of.\r\n\t */\r\n\tprotected _incomingDataItems: List<this[\"_dataItem\"]>;\r\n\r\n\t/**\r\n\t * A list of data items of the items going out of the node.\r\n\t *\r\n\t * These are what outgoing links are build out of.\r\n\t */\r\n\tprotected _outgoingDataItems: List<this[\"_dataItem\"]>;\r\n\r\n\t/**\r\n\t * Sorted list of incoming items.\r\n\t */\r\n\tprotected _incomingSorted: $iter.Iterator<this[\"_dataItem\"]>;\r\n\r\n\t/**\r\n\t * Sorted list of outgoing items.\r\n\t */\r\n\tprotected _outgoingSorted: $iter.Iterator<this[\"_dataItem\"]>;\r\n\r\n\t/**\r\n\t * A chart instance this node is added to.\r\n\t */\r\n\tpublic chart: FlowDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[FlowDiagramDataItem]] used in the class.\r\n\t */\r\n\tpublic _dataItem: FlowDiagramDataItem;\r\n\r\n\t/**\r\n\t * Settings for the appearance of the related legend items.\r\n\t */\r\n\tpublic legendSettings: LegendSettings = new LegendSettings();\r\n\r\n\r\n\t/**\r\n\t * A reference to the legend data item related to this node.\r\n\t */\r\n\tprotected _legendDataItem: LegendDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"FlowDiagramNode\";\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\t// TODO can this be removed ?\r\n\t\tnew InterfaceColorSet();\r\n\r\n\t\tthis.draggable = true;\r\n\t\tthis.inert = true;\r\n\r\n\t\tthis.setStateOnChildren = true;\r\n\r\n\t\tthis.events.on(\"positionchanged\", this.invalidateLinks, this, false);\r\n\t\tthis.events.on(\"sizechanged\", this.invalidateLinks, this, false);\r\n\t\t//this.events.on(\"hit\", this.handleHit, this, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic handleHit(event: AMEvent<Sprite, ISpriteEvents>[\"hit\"]) {\r\n\t\tif (this.isHidden || this.isHiding) {\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Shows hidden node.\r\n\t *\r\n\t * @param duration  Duration of reveal animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\t\tlet animation = super.show(duration);\r\n\r\n\t\tthis.outgoingDataItems.each(function(dataItem) {\r\n\t\t\tif (!dataItem.toNode || (dataItem.toNode && !dataItem.toNode.isHidden)) {\r\n\t\t\t\tdataItem.setWorkingValue(\"value\", dataItem.getValue(\"value\"), duration);\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis.incomingDataItems.each(function(dataItem) {\r\n\t\t\tif (!dataItem.fromNode || (dataItem.fromNode && !dataItem.fromNode.isHidden)) {\r\n\t\t\t\tdataItem.setWorkingValue(\"value\", dataItem.getValue(\"value\"), duration);\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides node.\r\n\t *\r\n\t * @param duration  Duration of hiding animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\t\tlet animation = super.hide(duration);\r\n\r\n\t\tthis.outgoingDataItems.each(function(dataItem) {\r\n\t\t\tdataItem.setWorkingValue(\"value\", 0, duration);\r\n\t\t})\r\n\r\n\t\tthis.incomingDataItems.each(function(dataItem) {\r\n\t\t\tdataItem.setWorkingValue(\"value\", 0, duration);\r\n\t\t})\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Marks node as invalid, for redrawal in the next update cycle.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tif(!this.isDisposed()){\r\n\t\t\tsuper.validate();\r\n\t\t\tthis.invalidateLinks();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Invalidates all links, attached to this node.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidateLinks(): void {\r\n\r\n\t\tthis.outgoingDataItems.each((dataItem) => {\r\n\t\t\tlet link = dataItem.link;\r\n\t\t\tif (link.colorMode == \"fromNode\") {\r\n\t\t\t\tlink.fill = link.dataItem.fromNode.color;\r\n\t\t\t}\r\n\r\n\t\t\tif (link.colorMode == \"gradient\") {\r\n\r\n\t\t\t\tlink.fill = link.gradient;\r\n\t\t\t\tlink.stroke = link.gradient;\r\n\r\n\t\t\t\tlet stop = link.gradient.stops.getIndex(0);\r\n\r\n\t\t\t\tif (stop) {\r\n\t\t\t\t\tstop.color = this.color;\r\n\t\t\t\t\tlink.gradient.validate();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.incomingDataItems.each((dataItem) => {\r\n\t\t\tlet link = dataItem.link;\r\n\t\t\tif (link.colorMode == \"toNode\") {\r\n\t\t\t\tlink.fill = link.dataItem.toNode.color;\r\n\t\t\t}\r\n\r\n\t\t\tif (link.colorMode == \"gradient\") {\r\n\t\t\t\tlink.fill = link.gradient;\r\n\t\t\t\tlink.stroke = link.gradient;\r\n\r\n\t\t\t\tlet stop = link.gradient.stops.getIndex(1);\r\n\r\n\t\t\t\tif (stop) {\r\n\t\t\t\t\tstop.color = this.color;\r\n\t\t\t\t\tlink.gradient.validate();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * List of incoming items (links).\r\n\t *\r\n\t * @readonly\r\n\t * @return Incoming items\r\n\t */\r\n\tpublic get incomingDataItems(): List<this[\"_dataItem\"]> {\r\n\t\tif (!this._incomingDataItems) {\r\n\t\t\tlet incomingDataItems = new List<FlowDiagramDataItem>();\r\n\t\t\tincomingDataItems.events.on(\"inserted\", () => {\r\n\t\t\t\tif (this.chart.sortBy == \"name\") {\r\n\t\t\t\t\tthis._incomingSorted = $iter.sort(this._incomingDataItems.iterator(), (x, y) => $string.order(x.fromName, y.fromName));\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.chart.sortBy == \"value\") {\r\n\t\t\t\t\tthis._incomingSorted = $iter.sort(this._incomingDataItems.iterator(), (x, y) => $order.reverse($number.order(x.value, y.value)));\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._incomingSorted = this._incomingDataItems.iterator();\r\n\t\t\t\t}\r\n\t\t\t}, undefined, false);\r\n\t\t\tthis._incomingDataItems = incomingDataItems;\r\n\t\t}\r\n\t\treturn this._incomingDataItems;\r\n\t}\r\n\r\n\t/**\r\n\t * List of outgoing items (links).\r\n\t *\r\n\t * @readonly\r\n\t * @return Outgoing items\r\n\t */\r\n\tpublic get outgoingDataItems(): List<FlowDiagramDataItem> {\r\n\t\tif (!this._outgoingDataItems) {\r\n\t\t\tlet outgoingDataItems = new List<FlowDiagramDataItem>();\r\n\t\t\toutgoingDataItems.events.on(\"inserted\", () => {\r\n\t\t\t\tif (this.chart.sortBy == \"name\") {\r\n\t\t\t\t\tthis._outgoingSorted = $iter.sort(this._outgoingDataItems.iterator(), (x, y) => $string.order(x.fromName, y.fromName));\r\n\t\t\t\t}\r\n\t\t\t\telse if (this.chart.sortBy == \"value\") {\r\n\t\t\t\t\tthis._outgoingSorted = $iter.sort(this._outgoingDataItems.iterator(), (x, y) => $order.reverse($number.order(x.value, y.value)));\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._outgoingSorted = this._outgoingDataItems.iterator();\r\n\t\t\t\t}\r\n\r\n\t\t\t}, undefined, false);\r\n\t\t\tthis._outgoingDataItems = outgoingDataItems;\r\n\t\t}\r\n\t\treturn this._outgoingDataItems;\r\n\t}\r\n\r\n\t/**\r\n\t * A name of the node.\r\n\t *\r\n\t * @param value  Name\r\n\t */\r\n\tpublic set name(value: string) {\r\n\t\tthis.setPropertyValue(\"name\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.getPropertyValue(\"name\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sum of all incoming+outgoing link values\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set total(value: number) {\r\n\t\tthis.setPropertyValue(\"total\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get total(): number {\r\n\t\treturn this.getPropertyValue(\"total\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sum of all incomming link values.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set totalIncoming(value: number) {\r\n\t\tthis.setPropertyValue(\"totalIncoming\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get totalIncoming(): number {\r\n\t\treturn this.getPropertyValue(\"totalIncoming\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sum of all outgoing link values.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set totalOutgoing(value: number) {\r\n\t\tthis.setPropertyValue(\"totalOutgoing\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get totalOutgoing(): number {\r\n\t\treturn this.getPropertyValue(\"totalOutgoing\");\r\n\t}\r\n\r\n\t/**\r\n\t * Node's color.\r\n\t *\r\n\t * @param value  Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setColorProperty(\"color\", value);\r\n\t\tif (this._background) {\r\n\t\t\tthis._background.fill = value;\r\n\t\t}\r\n\t\tthis.fill = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\treturn this.getPropertyValue(\"color\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker  Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\t\tcolumn.stroke = this.fill;\r\n\r\n\t\tcolumn.copyFrom(<any>this);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = <LegendDataItem>marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Legend data item that corresponds to this series.\r\n\t *\r\n\t * @param value  Data item\r\n\t */\r\n\tpublic set legendDataItem(value: LegendDataItem) {\r\n\t\tthis._legendDataItem = value;\r\n\t\tthis._legendDataItem.itemContainer.deepInvalidate();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Data item\r\n\t */\r\n\tpublic get legendDataItem(): LegendDataItem {\r\n\t\treturn this._legendDataItem;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FlowDiagramNode\"] = FlowDiagramNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/FlowDiagramNode.ts","/**\r\n * FlowDiagramLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Container, IContainerProperties, IContainerEvents, IContainerAdapters } from \"../../core/Container\";\r\nimport { FlowDiagramDataItem } from \"../types/FlowDiagram\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\nimport { RadialGradient } from \"../../core/rendering/fills/RadialGradient\";\r\nimport { Pattern } from \"../../core/rendering/fills/Pattern\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Polyline } from \"../../core/elements/Polyline\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[FlowDiagramLink]].\r\n */\r\nexport interface IFlowDiagramLinkProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * [tension description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * [startX description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartX?: number;\r\n\r\n\t/**\r\n\t * [startY description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartY?: number;\r\n\r\n\t/**\r\n\t * [endX description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendX?: number;\r\n\r\n\t/**\r\n\t * [endY description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendY?: number;\r\n\r\n\t/**\r\n\t * [linkWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tlinkWidth?: number;\r\n\r\n\t/**\r\n\t * [startAngle description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * [endAngle description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Should link be filled with a solid color, color of from node, color of toNode or gradient between node colors.\r\n\t */\r\n\tcolorMode?: \"solid\" | \"gradient\" | \"fromNode\" | \"toNode\";\r\n\r\n\t/**\r\n\t * [controlPointDistance description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tcontrolPointDistance?: number;\r\n\r\n\t/**\r\n\t * [maskBullets description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tmaskBullets?: boolean;\r\n\r\n\t/**\r\n\t * [tooltipLocation description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\ttooltipLocation?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[FlowDiagramLink]].\r\n */\r\nexport interface IFlowDiagramLinkEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FlowDiagramLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFlowDiagramLinkAdapters extends IContainerAdapters, IFlowDiagramLinkProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Flow Diagram.\r\n *\r\n * @see {@link IFlowDiagramLinkEvents} for a list of available events\r\n * @see {@link IFlowDiagramLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class FlowDiagramLink extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFlowDiagramLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFlowDiagramLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFlowDiagramLinkEvents;\r\n\r\n\t/**\r\n\t * Defines a type of data item used by this class.\r\n\t */\r\n\tpublic _dataItem: FlowDiagramDataItem;\r\n\r\n\t/**\r\n\t * A gradiend instance that is used to provided colored gradient fills for\r\n\t * the Flow link.\r\n\t */\r\n\tprotected _gradient: LinearGradient;\r\n\r\n\r\n\t/**\r\n\t * List of bullets\r\n\t * @ignore\r\n\t */\r\n\tprotected _bullets: ListTemplate<Bullet>;\r\n\r\n\t/**\r\n\t * Link sprite\r\n\t */\r\n\tpublic link: Sprite;\r\n\r\n\t/**\r\n\t * Bullets mask spite\r\n     */\r\n\tprotected _bulletsMask: Sprite;\r\n\r\n\t/**\r\n\t * Bullets container\r\n     */\r\n\tprotected _bulletsContainer: Container;\r\n\r\n\t/**\r\n\t * Spline which goes through the middle of a link, used to calculate bullet and tooltip positions, invisible by default\r\n     */\r\n\tpublic middleLine: Line | Polyline;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"FlowDiagramLink\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.maskBullets = false;\r\n\r\n\t\tthis.colorMode = \"fromNode\";\r\n\r\n\t\tthis.layout = \"none\";\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.startAngle = 0;\r\n\t\tthis.endAngle = 0;\r\n\r\n\t\tthis.strokeOpacity = 0;\r\n\r\n\t\t// this is very important, otherwise the container will be shifted\r\n\t\tthis.verticalCenter = \"none\";\r\n\t\tthis.horizontalCenter = \"none\";\r\n\r\n\t\tthis.tooltipText = \"{fromName}→{toName}:{value.value}\";\r\n\t\tthis.tooltipLocation = 0.5;\r\n\r\n\t\tthis.link = this.createChild(Sprite);\r\n\t\tthis.link.shouldClone = false;\r\n\t\tthis.link.setElement(this.paper.add(\"path\"));\r\n\t\tthis.link.isMeasured = false;\r\n\t\tthis.fillOpacity = 0.2;\r\n\t\tthis.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Positions bullets\r\n\t * @ignore\r\n\t */\r\n\tprotected positionBullets() {\r\n\t\t$iter.each(this.bullets.iterator(), (bullet) => {\r\n\t\t\tbullet.parent = this.bulletsContainer;\r\n\r\n\t\t\tbullet.maxWidth = this.maxWidth;\r\n\t\t\tbullet.maxHeight = this.maxHeight;\r\n\r\n\t\t\tthis.positionBullet(bullet);\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Bullets container\r\n     */\r\n\tpublic get bulletsContainer() {\r\n\t\tif (!this._bulletsContainer) {\r\n\t\t\tlet bulletsContainer = this.createChild(Container);\r\n\t\t\tbulletsContainer.shouldClone = false;\r\n\t\t\tbulletsContainer.layout = \"none\";\r\n\t\t\tthis._bulletsContainer = bulletsContainer;\r\n\t\t}\r\n\t\treturn this._bulletsContainer;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Bullets mask sprite\r\n     */\r\n\tpublic get bulletsMask() {\r\n\t\tif (!this._bulletsMask) {\r\n\t\t\tlet bulletsMask = this.createChild(Sprite);\r\n\t\t\tbulletsMask.shouldClone = false;\r\n\t\t\tbulletsMask.setElement(this.paper.add(\"path\"));\r\n\t\t\tbulletsMask.isMeasured = false;\r\n\t\t\tthis._bulletsMask = bulletsMask;\r\n\t\t}\r\n\t\treturn this._bulletsMask;\r\n\t}\r\n\r\n\t/**\r\n\t * Positions bullets at relative bullet.locationX position on the link.\r\n\t * @ignore\r\n\t */\r\n\tprotected positionBullet(bullet: Bullet) {\r\n\r\n\t\tlet location = bullet.locationX;\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = bullet.locationY;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = 0.5;\r\n\t\t}\r\n\t\tlet point = this.middleLine.positionToPoint(location);\r\n\r\n\t\tbullet.moveTo(point);\r\n\r\n\t\tlet rotationField = bullet.propertyFields.rotation;\r\n\t\tlet angle: number;\r\n\t\tif (bullet.dataItem) {\r\n\t\t\tlet dataContext: any = bullet.dataItem.dataContext;\r\n\t\t\tangle = dataContext[rotationField];\r\n\t\t}\r\n\t\tif (!$type.isNumber(angle)) {\r\n\t\t\tangle = point.angle;\r\n\t\t}\r\n\r\n\t\tbullet.rotation = angle;\r\n\t}\r\n\r\n\t/**\r\n\t * [startAngle description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value  Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * [endAngle description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value  End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Should link be filled with a solid color, color of from node, color of toNode or gradient between node colors.\r\n\t * Some of the links, like ChordLink does not support gradiens well.\r\n\t *\r\n\t * @param value  Fill mode\r\n\t */\r\n\tpublic set colorMode(value: \"solid\" | \"gradient\" | \"fromNode\" | \"toNode\") {\r\n\t\tif (value == \"gradient\") {\r\n\t\t\tlet color = this.fill;\r\n\r\n\t\t\tthis.gradient.stops.clear();\r\n\t\t\tif (color instanceof Color) {\r\n\t\t\t\tthis.gradient.addColor(color);\r\n\t\t\t\tthis.gradient.addColor(color);\r\n\t\t\t}\r\n\t\t\tthis.fill = this.gradient;\r\n\t\t\tthis.stroke = this.gradient;\r\n\t\t}\r\n\t\tthis.setPropertyValue(\"colorMode\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Fill mode\r\n\t */\r\n\tpublic get colorMode(): \"solid\" | \"gradient\" | \"fromNode\" | \"toNode\" {\r\n\t\treturn this.getPropertyValue(\"colorMode\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Should link bullets be masked or not\r\n\t *\r\n\t * @param value\r\n\t * @default false\r\n\t */\r\n\tpublic set maskBullets(value: boolean) {\r\n\t\tthis.setPropertyValue(\"maskBullets\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return mask bullets value\r\n\t */\r\n\tpublic get maskBullets(): boolean {\r\n\t\treturn this.getPropertyValue(\"maskBullets\");\r\n\t}\r\n\r\n\t/**\r\n\t * Relative location of a tooltip.\r\n\t * @default 0.5\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set tooltipLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"tooltipLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Tooltip location value\r\n\t */\r\n\tpublic get tooltipLocation(): number {\r\n\t\treturn this.getPropertyValue(\"tooltipLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Adds color steps in the link gradient.\r\n\t *\r\n\t * @param value  Fill option\r\n\t */\r\n\tprotected setFill(value: Color | Pattern | LinearGradient | RadialGradient) {\r\n\t\tsuper.setFill(value)\r\n\t\tlet gradient = this._gradient;\r\n\r\n\t\tif (gradient && value instanceof Color) {\r\n\t\t\tgradient.stops.clear();\r\n\t\t\tgradient.addColor(value);\r\n\t\t\tgradient.addColor(value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates bounding box based on element dimension settings.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic measureElement(): void {\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * List of bullets\r\n\t *\r\n\t * @return [description]\r\n\t */\r\n\tpublic get bullets(): ListTemplate<Bullet> {\r\n\t\tif (!this._bullets) {\r\n\t\t\tthis._bullets = new ListTemplate<Bullet>(new Bullet());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._bullets));\r\n\t\t\tthis._disposers.push(this._bullets.template);\r\n\t\t\tthis._bullets.events.on(\"inserted\", (event) => {\r\n\t\t\t\tevent.newValue.events.on(\"propertychanged\", (event) => {\r\n\t\t\t\t\tif (event.property == \"locationX\" || event.property == \"locationY\") {\r\n\t\t\t\t\t\tthis.positionBullet(event.target);\r\n\t\t\t\t\t}\r\n\t\t\t\t}, undefined, false)\r\n\t\t\t}, undefined, false)\r\n\t\t}\r\n\t\treturn this._bullets;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies properties from another [[FlowDiagramLink]].\r\n\t *\r\n\t * @param source  Source link\r\n\t */\r\n\tcopyFrom(source: this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.bullets.copyFrom(source.bullets);\r\n\t\tlet middleLine = this.middleLine;\r\n\t\tif (middleLine) {\r\n\t\t\tif (middleLine instanceof Line && source.middleLine instanceof Line) {\r\n\t\t\t\tmiddleLine.copyFrom(source.middleLine);\r\n\t\t\t}\r\n\r\n\t\t\tif (middleLine instanceof Polyline && source.middleLine instanceof Polyline) {\r\n\t\t\t\tmiddleLine.copyFrom(source.middleLine);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.link.copyFrom(source.link);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Tooltip X (px)\r\n\t */\r\n\tpublic getTooltipX(): number {\r\n\t\tif (this.middleLine) {\r\n\t\t\treturn this.middleLine.positionToPoint(this.tooltipLocation).x;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Tooltip Y (px)\r\n\t */\r\n\tpublic getTooltipY(): number {\r\n\t\tif (this.middleLine) {\r\n\t\t\treturn this.middleLine.positionToPoint(this.tooltipLocation).y;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A gradiend instance that is used to provided colored gradient fills for\r\n\t * the Flow link.\r\n\t */\r\n\tpublic get gradient() {\r\n\t\tif (!this._gradient) {\r\n\t\t\tthis._gradient = new LinearGradient();\r\n\t\t}\r\n\t\treturn this._gradient;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FlowDiagramLink\"] = FlowDiagramLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/FlowDiagramLink.ts","/**\r\n * FlowDiagram module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, IChartProperties, IChartDataFields, IChartAdapters, IChartEvents, ChartDataItem } from \"../Chart\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { FlowDiagramNode } from \"../elements/FlowDiagramNode\";\r\nimport { FlowDiagramLink } from \"../elements/FlowDiagramLink\";\r\nimport { LinearGradientModifier } from \"../../core/rendering/fills/LinearGradientModifier\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { toColor, Color } from \"../../core/utils/Color\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo rearange notes after dragged\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[FlowDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class FlowDiagramDataItem extends ChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: FlowDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: FlowDiagramLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t */\r\n\tpublic fromNode: FlowDiagramNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t */\r\n\tpublic toNode: FlowDiagramNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"FlowDiagramDataItem\";\r\n\r\n\t\tthis.values.value = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Source node's name.\r\n\t *\r\n\t * @param value  Name\r\n\t */\r\n\tpublic set fromName(value: string) {\r\n\t\tthis.setProperty(\"fromName\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return name\r\n\t */\r\n\tpublic get fromName(): string {\r\n\t\treturn this.properties.fromName;\r\n\t}\r\n\r\n\t/**\r\n\t * Destination node's name.\r\n\t *\r\n\t * @param value  Name\r\n\t */\r\n\tpublic set toName(value: string) {\r\n\t\tthis.setProperty(\"toName\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return name\r\n\t */\r\n\tpublic get toName(): string {\r\n\t\treturn this.properties.toName;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Node color\r\n\t *\r\n\t * @param value  Name\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", toColor(value));\r\n\t}\r\n\r\n\t/**\r\n\t * @return color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\treturn this.properties.color;\r\n\t}\r\n\r\n\t/**\r\n\t * Link's value.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\treturn this.values.value.value;\r\n\t}\r\n\r\n\t/**\r\n\t * A visual element, representing link between the source and target nodes.\r\n\t *\r\n\t * Link's actual thickness will be determined by `value` of this link and\r\n\t * `value` of the source node.\r\n\t *\r\n\t * @readonly\r\n\t * @return Link element\r\n\t */\r\n\tpublic get link(): this[\"_link\"] {\r\n\t\tif (!this._link) {\r\n\t\t\tlet link = this.component.links.create();\r\n\t\t\tthis._link = link;\r\n\r\n\t\t\tthis.addSprite(link);\r\n\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.links.removeValue(link);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t\treturn this._link;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[FlowDiagram]].\r\n */\r\nexport interface IFlowDiagramDataFields extends IChartDataFields {\r\n\r\n\t/**\r\n\t * Name of the source node.\r\n\t */\r\n\tfromName?: string;\r\n\r\n\t/**\r\n\t * Name of the target node.\r\n\t */\r\n\ttoName?: string;\r\n\r\n\t/**\r\n\t * Value of the link between two nodes.\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * Color of a from node\r\n\t */\r\n\tcolor?: string;\r\n\r\n\t/**\r\n\t * Visibility of a node\r\n\t */\r\n\tvisible?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[FlowDiagram]]\r\n */\r\nexport interface IFlowDiagramProperties extends IChartProperties {\r\n\r\n\t/**\r\n\t * Padding for node square in pixels.\r\n\t */\r\n\tnodePadding?: number;\r\n\r\n\t/**\r\n\t * Sort nodes by name or value or do not sort a\r\n\t */\r\n\tsortBy?: \"none\" | \"name\" | \"value\";\r\n\r\n\t/**\r\n\t * Sometimes nodes can get very small if their value is little. With this setting you\r\n\t * can set min size of a node (this is relative value from the total size of all nodes)\r\n\t */\r\n\tminNodeSize: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[FlowDiagram]].\r\n */\r\nexport interface IFlowDiagramEvents extends IChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FlowDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFlowDiagramAdapters extends IChartAdapters, IFlowDiagramProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Pie chart\r\n * @see {@link IFlowDiagramEvents} for a list of available Events\r\n * @see {@link IFlowDiagramAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class FlowDiagram extends Chart {\r\n\r\n\t/**\r\n\t * A Color Set to use when applying/generating colors for each subsequent\r\n\t * node.\r\n\t */\r\n\tpublic colors: ColorSet = new ColorSet();\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t */\r\n\tpublic _dataItem: FlowDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IFlowDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFlowDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFlowDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFlowDiagramEvents;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node: FlowDiagramNode;\r\n\r\n\r\n\t/**\r\n\t * A list of chart's FlowDiagram nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate<string, this[\"_node\"]>}\r\n\t */\r\n\tprotected _nodes: DictionaryTemplate<string, this[\"_node\"]>;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _link: FlowDiagramLink;\r\n\r\n\t/**\r\n\t * A list of FlowDiagram links connecting nodes.\r\n\t *\r\n\t * @param {ListTemplate<this[\"_link\"]>}\r\n\t */\r\n\tprotected _links: ListTemplate<this[\"_link\"]>;\r\n\r\n\t/**\r\n\t * A container that holds all of the link elements.\r\n\t */\r\n\tpublic linksContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds all of the node elements.\r\n\t */\r\n\tpublic nodesContainer: Container;\r\n\r\n\t/**\r\n\t * Sorted nodes iterator.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tprotected _sorted: $iter.Iterator<[string, FlowDiagramNode]>;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"FlowDiagram\";\r\n\t\tthis.nodePadding = 20;\r\n\t\tthis.sortBy = \"none\";\r\n\t\tthis.sequencedInterpolation = true;\r\n\r\n\t\tthis.colors.step = 2;\r\n\t\tthis.minNodeSize = 0.02;\r\n\r\n\t\tlet linksContainer = this.chartContainer.createChild(Container);\r\n\t\tlinksContainer.shouldClone = false;\r\n\t\tlinksContainer.layout = \"none\";\r\n\t\tlinksContainer.isMeasured = false;\r\n\t\tthis.linksContainer = linksContainer;\r\n\r\n\t\tlet nodesContainer = this.chartContainer.createChild(Container);\r\n\t\tnodesContainer.shouldClone = false;\r\n\t\tnodesContainer.layout = \"none\";\r\n\t\tnodesContainer.isMeasured = false;\r\n\t\tthis.nodesContainer = nodesContainer;\r\n\r\n\t\t// this data item holds sums, averages, etc\r\n\t\tthis.dataItem = this.createDataItem();\r\n\t\tthis.dataItem.component = this;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\tpublic dispose(): void {\r\n\t\tsuper.dispose();\r\n\t\tthis.dataItem.dispose();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates chart's data, effectively causing the chart to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tif (this._parseDataFrom == 0) {\r\n\t\t\tthis.nodes.clear();\r\n\t\t}\r\n\r\n\t\tthis.sortNodes();\r\n\r\n\t\tthis.colors.reset();\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tlet sum = 0;\r\n\t\tlet count = 0;\r\n\t\tlet low: number;\r\n\t\tlet high: number;\r\n\r\n\t\t// build blocks\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tlet fromName = dataItem.fromName;\r\n\r\n\t\t\tif (fromName) {\r\n\t\t\t\tlet node = this.nodes.getKey(fromName);\r\n\t\t\t\tif (!node) {\r\n\t\t\t\t\tnode = this.nodes.create(fromName);\r\n\t\t\t\t\tnode.name = fromName;\r\n\t\t\t\t\tnode.chart = this;\r\n\t\t\t\t\tnode.dataItem = dataItem;\r\n\t\t\t\t}\r\n\t\t\t\tdataItem.fromNode = node;\r\n\t\t\t\tdataItem.fromNode.outgoingDataItems.push(dataItem);\r\n\t\t\t}\r\n\t\t\tlet toName = dataItem.toName;\r\n\t\t\tif (toName) {\r\n\t\t\t\tlet node = this.nodes.getKey(toName);\r\n\t\t\t\tif (!node) {\r\n\t\t\t\t\tnode = this.nodes.create(toName);\r\n\t\t\t\t\tnode.name = toName;\r\n\t\t\t\t\tnode.chart = this;\r\n\t\t\t\t\tnode.dataItem = dataItem;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataItem.toNode = node;\r\n\t\t\t\tdataItem.toNode.incomingDataItems.push(dataItem);\r\n\t\t\t}\r\n\r\n\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\tlet strokeModifier = new LinearGradientModifier();\r\n\t\t\t\tstrokeModifier.opacities = [0, 1];\r\n\t\t\t\tdataItem.link.strokeModifier = strokeModifier;\r\n\t\t\t}\r\n\r\n\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\tlet fillModifier = new LinearGradientModifier();\r\n\t\t\t\tfillModifier.opacities = [1, 0];\r\n\t\t\t\tdataItem.link.strokeModifier = fillModifier;\r\n\t\t\t}\r\n\r\n\t\t\tlet value = dataItem.value;\r\n\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\tsum += value;\r\n\t\t\t\tcount++;\r\n\r\n\t\t\t\tif (low > value || !$type.isNumber(low)) {\r\n\t\t\t\t\tlow = value;\r\n\t\t\t\t}\r\n\t\t\t\tif (high < value || !$type.isNumber(high)) {\r\n\t\t\t\t\thigh = value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet key = \"value\";\r\n\r\n\t\tthis.dataItem.setCalculatedValue(key, high, \"high\");\r\n\t\tthis.dataItem.setCalculatedValue(key, low, \"low\");\r\n\t\tthis.dataItem.setCalculatedValue(key, sum, \"sum\");\r\n\t\tthis.dataItem.setCalculatedValue(key, sum / count, \"average\");\r\n\t\tthis.dataItem.setCalculatedValue(key, count, \"count\");\r\n\r\n\r\n\t\t$iter.each(this.nodes.iterator(), (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\r\n\t\t\tif (node.fill instanceof Color) {\r\n\t\t\t\tnode.color = node.fill;\r\n\t\t\t}\r\n\r\n\t\t\tif (node.color == undefined) {\r\n\t\t\t\tnode.color = this.colors.next();\r\n\t\t\t}\r\n\r\n\t\t\tif (node.dataItem.color != undefined) {\r\n\t\t\t\tnode.color = node.dataItem.color;\r\n\t\t\t}\r\n\r\n\t\t\tif (!node.dataItem.visible) {\r\n\t\t\t\tnode.hide(0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.getNodeValue(node);\r\n\t\t});\r\n\r\n\t\tthis.sortNodes();\r\n\t\tthis.feedLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tthis.invalidate();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sorts nodes by either their values or names, based on `sortBy` setting.\r\n\t */\r\n\tprotected sortNodes() {\r\n\t\tif (this.sortBy == \"name\") {\r\n\t\t\tthis._sorted = this.nodes.sortedIterator();\r\n\t\t}\r\n\t\telse if (this.sortBy == \"value\") {\r\n\t\t\tthis._sorted = $iter.sort(this.nodes.iterator(), (x, y) => $order.reverse($number.order(x[1].total, y[1].total)));\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._sorted = this.nodes.iterator();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a cummulative value of the node.\r\n\t *\r\n\t * A node's value is determined by summing values of all of the incoming\r\n\t * links or all of the outgoing links, whichever results in bigger number.\r\n\t *\r\n\t * @param node  Node value\r\n\t */\r\n\tprotected getNodeValue(node: FlowDiagramNode) {\r\n\r\n\t\t// todo: totalIncomming totalOutgoing, total\r\n\r\n\t\tlet incomingTotal = 0;\r\n\t\tlet outgoingTotal = 0;\r\n\r\n\t\t$iter.each(node.incomingDataItems.iterator(), (dataItem: FlowDiagramDataItem) => {\r\n\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\tincomingTotal += value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$iter.each(node.outgoingDataItems.iterator(), (dataItem: FlowDiagramDataItem) => {\r\n\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\toutgoingTotal += value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tnode.total = incomingTotal + outgoingTotal;\r\n\t\tnode.totalIncoming = incomingTotal;\r\n\t\tnode.totalOutgoing = outgoingTotal;\r\n\t};\r\n\r\n\t/**\r\n\t * Changes the sort type of the nodes.\r\n\t *\r\n\t * This will actually reshuffle nodes using nice animation.\r\n\t */\r\n\tprotected changeSorting() {\r\n\t\tthis.sortNodes();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Flow diagram\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new data item.\r\n\t *\r\n\t * @return Data item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new FlowDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Padding for node square in pixels.\r\n\t *\r\n\t * Padding will add extra space around node's name label.\r\n\t *\r\n\t * @param value Padding (px)\r\n\t */\r\n\tpublic set nodePadding(value: number) {\r\n\t\tthis.setPropertyValue(\"nodePadding\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Padding (px)\r\n\t */\r\n\tpublic get nodePadding(): number {\r\n\t\treturn this.getPropertyValue(\"nodePadding\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sort nodes by \"name\" or \"value\" or do not sort at all. If not sorted, nodes will appear in the same order as they are in the data.\r\n\t * @default \"none\"\r\n\t * @param value  Node sorting\r\n\t */\r\n\tpublic set sortBy(value: \"none\" | \"name\" | \"value\") {\r\n\t\tthis.setPropertyValue(\"sortBy\", value);\r\n\t\tthis.changeSorting();\r\n\t}\r\n\r\n\t/**\r\n\t * @returns Node sorting\r\n\t */\r\n\tpublic get sortBy(): \"none\" | \"name\" | \"value\" {\r\n\t\treturn this.getPropertyValue(\"sortBy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sometimes nodes can get very small if their value is little. With this setting you\r\n\t * can set min size of a node (this is relative value from the total size of all nodes)\r\n\t * @default 0.02\r\n\t * @param value  Node sorting\r\n\t */\r\n\tpublic set minNodeSize(value: number) {\r\n\t\tthis.setPropertyValue(\"minNodeSize\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @returns min node size\r\n\t */\r\n\tpublic get minNodeSize(): number {\r\n\t\treturn this.getPropertyValue(\"minNodeSize\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * A list of chart's nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate<string, this[\"_node\"]>}\r\n\t */\r\n\tpublic get nodes(): DictionaryTemplate<string, this[\"_node\"]> {\r\n\t\tif (!this._nodes) {\r\n\t\t\tlet template = this.createNode();\r\n\t\t\ttemplate.events.on(\"hit\", (event) => {\r\n\t\t\t\tevent.target.handleHit(event);\r\n\t\t\t});\r\n\t\t\tthis._nodes = new DictionaryTemplate<string, this[\"_node\"]>(template);\r\n\t\t\tthis._disposers.push(new DictionaryDisposer(this._nodes));\r\n\t\t}\r\n\t\treturn this._nodes;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createNode(): this[\"_node\"] {\r\n\t\tlet node = new FlowDiagramNode();\r\n\t\tthis._disposers.push(node);\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of chart's links.\r\n\t *\r\n\t * @param {ListTemplate<this[\"_link\"]>}\r\n\t */\r\n\tpublic get links(): ListTemplate<this[\"_link\"]> {\r\n\t\tif (!this._links) {\r\n\t\t\tthis._links = new ListTemplate<this[\"_link\"]>(this.createLink());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._links));\r\n\t\t}\r\n\t\treturn this._links;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createLink(): this[\"_link\"] {\r\n\t\tlet link = new FlowDiagramLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\t\t\tlet legendData: any[] = [];\r\n\r\n\t\t\tthis.nodes.each((key, node) => {\r\n\t\t\t\tlegendData.push(node);\r\n\t\t\t});\r\n\r\n\t\t\tlegend.data = legendData;\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.nodes.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FlowDiagram\"] = FlowDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/FlowDiagram.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface ILabelBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface ILabelBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILabelBulletAdapters extends IBulletAdapters, ILabelBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class LabelBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ILabelBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ILabelBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ILabelBulletEvents;\r\n\r\n\t/**\r\n\t * A label (textual) element for the bullet.\r\n\t */\r\n\tpublic label: Label;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"LabelBullet\";\r\n\r\n\t\tlet label = this.createChild(Label);\r\n\t\tlabel.shouldClone = false;\r\n\t\tlabel.verticalCenter = \"middle\";\r\n\t\tlabel.horizontalCenter = \"middle\";\r\n\t\tlabel.truncate = true;\r\n\t\tlabel.hideOversized = false;\r\n\r\n\t\tlabel.maxWidth = 500;\r\n\t\tlabel.maxHeight = 500;\r\n\r\n\t\tlabel.stroke = color();\r\n\t\tlabel.strokeOpacity = 0;\r\n\t\tlabel.fill = new InterfaceColorSet().getFor(\"text\");\r\n\r\n\t\tthis.events.on(\"maxsizechanged\", this.handleMaxSize, this, false);\r\n\r\n\t\tthis.label = label;\r\n\r\n\t\t// not good, as lineSeries will have labels somewhere in the middle.\r\n\t\t//this.locationX = 0.5;\r\n\t\t//this.locationY = 0.5;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\tprotected handleMaxSize(){\r\n\t\tthis.label.maxWidth = this.maxWidth;\r\n\t\tthis.label.maxHeight = this.maxHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[LabelBullet]].\r\n\t *\r\n\t * @param source  Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.label.copyFrom(source.label);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LabelBullet\"] = LabelBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/LabelBullet.ts","/**\r\n * SankeyNode module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagramNode, IFlowDiagramNodeAdapters, IFlowDiagramNodeEvents, IFlowDiagramNodeProperties } from \"./FlowDiagramNode\";\r\nimport { SankeyDiagram, SankeyDiagramDataItem } from \"../types/SankeyDiagram\";\r\nimport { LabelBullet } from \"./LabelBullet\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[SankeyNode]].\r\n */\r\nexport interface ISankeyNodeProperties extends IFlowDiagramNodeProperties {\r\n\r\n\t/**\r\n\t * A level node is at. (0 - ...)\r\n\t */\r\n\tlevel?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[SankeyNode]].\r\n */\r\nexport interface ISankeyNodeEvents extends IFlowDiagramNodeEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SankeyNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISankeyNodeAdapters extends IFlowDiagramNodeAdapters, ISankeyNodeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a node in a Sankey Diagram.\r\n *\r\n * A Sankey node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[SankeyLink]] elements.\r\n *\r\n * @see {@link ISankeyNodeEvents} for a list of available events\r\n * @see {@link ISankeyNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class SankeyNode extends FlowDiagramNode {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISankeyNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISankeyNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISankeyNodeEvents;\r\n\r\n\r\n\t/**\r\n\t * [nextInCoord description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic nextInCoord: number = 0;\r\n\r\n\t/**\r\n\t * [nextOutCoord description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic nextOutCoord: number = 0;\r\n\r\n\t/**\r\n\t * A chart instance this node is added to.\r\n\t */\r\n\tpublic chart: SankeyDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[SankeyDiagramDataItem]] used in the class.\r\n\t */\r\n\tpublic _dataItem: SankeyDiagramDataItem;\r\n\r\n\t/**\r\n\t * A label element which shows node's value.\r\n\t */\r\n\tpublic valueLabel: LabelBullet;\r\n\r\n\t/**\r\n\t * A label element which shows node's name.\r\n\t */\r\n\tpublic nameLabel: LabelBullet;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SankeyNode\";\r\n\r\n\t\tthis.width = 10;\r\n\t\tthis.height = 10;\r\n\r\n\t\tlet nameLabel = this.createChild(LabelBullet);\r\n\t\tnameLabel.shouldClone = false;\r\n\t\t//@should we auto update these locations if position is changed?\r\n\t\tnameLabel.locationX = 1;\r\n\t\tnameLabel.locationY = 0.5;\r\n\t\tnameLabel.label.text = \"{name}\";\r\n\r\n\t\t//nameLabel.label.textElement.hideOversized = false;\r\n\t\tnameLabel.width = 150;\r\n\t\tnameLabel.height = 150;\r\n\t\tnameLabel.label.horizontalCenter = \"left\";\r\n\t\tnameLabel.label.padding(0, 5, 0, 5);\r\n\t\tthis.nameLabel = nameLabel;\r\n\r\n\t\tlet valueLabel = this.createChild(LabelBullet);\r\n\t\tvalueLabel.shouldClone = false;\r\n\t\tvalueLabel.label.hideOversized = false;\r\n\t\tvalueLabel.locationX = 0.5;\r\n\t\tvalueLabel.locationY = 0.5;\r\n\t\tvalueLabel.width = 150;\r\n\t\tvalueLabel.height = 150;\r\n\t\t//valueLabel.label.text = \"{value}\";\r\n\t\tvalueLabel.label.horizontalCenter = \"middle\";\r\n\t\tthis.valueLabel = valueLabel;\r\n\r\n\t\tlet hiddenState = this.hiddenState;\r\n\t\thiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n\t\thiddenState.properties.opacity = 0.5;\r\n\t\thiddenState.properties.visible = true;\r\n\r\n\t\tthis.background.hiddenState.copyFrom(hiddenState);\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Invalidates all links, attached to this node.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidateLinks(): void {\r\n\t\tsuper.invalidateLinks();\r\n\t\tthis.nextInCoord = 0;\r\n\t\tthis.nextOutCoord = 0;\r\n\t\tlet chart = this.chart;\r\n\r\n\t\tif (chart) {\r\n\t\t\tlet orientation = chart.orientation;\r\n\t\t\tif (this._incomingSorted) {\r\n\t\t\t\t$iter.each(this._incomingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\tlink.parent = this.chart.linksContainer;\r\n\r\n\t\t\t\t\t\tlet x: number;\r\n\t\t\t\t\t\tlet y: number;\r\n\t\t\t\t\t\tlet angle: number;\r\n\r\n\t\t\t\t\t\tif (orientation == \"horizontal\") {\r\n\t\t\t\t\t\t\tx = this.pixelX + this.dx;\r\n\t\t\t\t\t\t\ty = this.nextInCoord + this.pixelY + this.dy;\r\n\t\t\t\t\t\t\tangle = 0;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\ty = this.pixelY + this.dy;\r\n\t\t\t\t\t\t\tx = this.nextInCoord + this.pixelX + this.dx;\r\n\t\t\t\t\t\t\tangle = 90;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.endX = x;\r\n\t\t\t\t\t\tlink.endY = y;\r\n\t\t\t\t\t\tlink.startAngle = angle;\r\n\t\t\t\t\t\tlink.endAngle = angle;\r\n\t\t\t\t\t\tlink.gradient.rotation = angle;\r\n\r\n\t\t\t\t\t\tlink.linkWidth = value * chart.valueHeight;\r\n\r\n\t\t\t\t\t\tif (!dataItem.fromNode) {\r\n\r\n\t\t\t\t\t\t\tif (orientation == \"horizontal\") {\r\n\t\t\t\t\t\t\t\tlink.maxWidth = 200;\r\n\t\t\t\t\t\t\t\tlink.startX = this.pixelX + this.dx - link.maxWidth;\r\n\t\t\t\t\t\t\t\tlink.startY = link.endY;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tlink.maxHeight = 200;\r\n\t\t\t\t\t\t\t\tlink.startX = link.endX;\r\n\t\t\t\t\t\t\t\tlink.startY = this.pixelY + this.dy - link.maxHeight;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// TODO is this needed ?\r\n\t\t\t\t\t\t\t$utils.used(link.gradient);\r\n\r\n\t\t\t\t\t\t\tlink.fill = dataItem.toNode.color;\r\n\t\t\t\t\t\t\tlet stop = link.gradient.stops.getIndex(0);\r\n\t\t\t\t\t\t\tif (stop) {\r\n\t\t\t\t\t\t\t\tif (link.colorMode == \"gradient\") {\r\n\t\t\t\t\t\t\t\t\tstop.color = this.color;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstop.opacity = 0;\r\n\t\t\t\t\t\t\t\tlink.fill = link.gradient;\r\n\t\t\t\t\t\t\t\tlink.stroke = link.gradient;\r\n\t\t\t\t\t\t\t\tlink.gradient.validate();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//link.validate();\r\n\t\t\t\t\t\tthis.nextInCoord += link.linkWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (this._outgoingSorted) {\r\n\t\t\t\t$iter.each(this._outgoingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\t\t\t\t\tlink.parent = this.chart.linksContainer;\r\n\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\tlet x: number;\r\n\t\t\t\t\t\tlet y: number;\r\n\t\t\t\t\t\tlet angle: number;\r\n\r\n\t\t\t\t\t\tif (orientation == \"horizontal\") {\r\n\t\t\t\t\t\t\tangle = 0;\r\n\t\t\t\t\t\t\tx = this.pixelX + this.pixelWidth + this.dx - 1;\r\n\t\t\t\t\t\t\ty = this.nextOutCoord + this.pixelY + this.dy;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tangle = 90;\r\n\t\t\t\t\t\t\tx = this.nextOutCoord + this.pixelX + this.dx;\r\n\t\t\t\t\t\t\ty = this.pixelY + this.pixelHeight + this.dy - 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.startX = x;\r\n\t\t\t\t\t\tlink.startY = y;\r\n\t\t\t\t\t\tlink.startAngle = angle;\r\n\t\t\t\t\t\tlink.endAngle = angle;\r\n\t\t\t\t\t\tlink.gradient.rotation = angle;\r\n\r\n\t\t\t\t\t\tlink.linkWidth = value * this.chart.valueHeight;\r\n\r\n\t\t\t\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\t\t\t\tif (orientation == \"horizontal\") {\r\n\t\t\t\t\t\t\t\tlink.maxWidth = 200;\r\n\t\t\t\t\t\t\t\tlink.endX = this.pixelX + link.maxWidth + this.dx;\r\n\t\t\t\t\t\t\t\tlink.endY = link.startY;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\tlink.maxHeight = 200;\r\n\t\t\t\t\t\t\t\tlink.endX = link.startX;\r\n\t\t\t\t\t\t\t\tlink.endY = this.pixelY + link.maxHeight + this.dy;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tlink.opacity = this.opacity;\r\n\r\n\t\t\t\t\t\t\tlet stop = link.gradient.stops.getIndex(1);\r\n\t\t\t\t\t\t\tif (stop) {\r\n\t\t\t\t\t\t\t\tif (link.colorMode == \"gradient\") {\r\n\t\t\t\t\t\t\t\t\tstop.color = this.color;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tstop.opacity = 0;\r\n\t\t\t\t\t\t\t\tlink.fill = link.gradient;\r\n\t\t\t\t\t\t\t\tlink.stroke = link.gradient;\r\n\t\t\t\t\t\t\t\tlink.gradient.validate();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t//link.validate();\r\n\t\t\t\t\t\tthis.nextOutCoord += link.linkWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.positionBullet(this.nameLabel);\r\n\t\tthis.positionBullet(this.valueLabel);\r\n\t}\r\n\r\n\t/**\r\n\t * Positions the bullet so it is centered within the node element.\r\n\t *\r\n\t * @param bullet  Target bullet\r\n\t */\r\n\tprotected positionBullet(bullet: LabelBullet) {\r\n\t\tif (bullet) {\r\n\t\t\tbullet.x = this.measuredWidth * bullet.locationX;\r\n\t\t\tbullet.y = this.measuredHeight * bullet.locationY;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A level node is displayed at. (0 - ...)\r\n\t *\r\n\t * Levels are measured from left to right.\r\n\t *\r\n\t * The nodes in the left-most column will have `level = 0`.\r\n\t *\r\n\t * Nodes in second column - `level = 1`, etc.\r\n\t *\r\n\t * @param value  Level\r\n\t */\r\n\tpublic set level(value: number) {\r\n\t\tthis.setPropertyValue(\"level\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\treturn this.getPropertyValue(\"level\");\r\n\t}\r\n\r\n\t/**\r\n\t * Copies properties and labels from another [[SankeyNode]].\r\n\t *\r\n\t * @param source  Source node\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.nameLabel.copyFrom(source.nameLabel);\r\n\t\tthis.valueLabel.copyFrom(source.valueLabel);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SankeyNode\"] = SankeyNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/SankeyNode.ts","/**\r\n * SankeyLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SankeyDiagramDataItem } from \"../types/SankeyDiagram\";\r\nimport { FlowDiagramLink, IFlowDiagramLinkAdapters, IFlowDiagramLinkEvents, IFlowDiagramLinkProperties } from \"./FlowDiagramLink\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Polyspline } from \"../../core/elements/Polyspline\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[SankeyLink]].\r\n */\r\nexport interface ISankeyLinkProperties extends IFlowDiagramLinkProperties {\r\n\r\n\t/**\r\n\t * [tension description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * [startX description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartX?: number;\r\n\r\n\t/**\r\n\t * [startY description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tstartY?: number;\r\n\r\n\t/**\r\n\t * [endX description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendX?: number;\r\n\r\n\t/**\r\n\t * [endY description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tendY?: number;\r\n\r\n\t/**\r\n\t * [linkWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tlinkWidth?: number;\r\n\r\n\t/**\r\n\t * [controlPointDistance description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tcontrolPointDistance?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[SankeyLink]].\r\n */\r\nexport interface ISankeyLinkEvents extends IFlowDiagramLinkEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SankeyLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISankeyLinkAdapters extends IFlowDiagramLinkAdapters, ISankeyLinkProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Sankey Diagram.\r\n *\r\n * @see {@link ISankeyLinkEvents} for a list of available events\r\n * @see {@link ISankeyLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class SankeyLink extends FlowDiagramLink {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISankeyLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISankeyLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISankeyLinkEvents;\r\n\r\n\t/**\r\n\t * Defines a type of data item used by this class.\r\n\t */\r\n\tpublic _dataItem: SankeyDiagramDataItem;\r\n\r\n\t/**\r\n\t * Spline which goes through the middle of a link, used to calculate bullet and tooltip positions, invisible by default\r\n\t */\r\n\tpublic middleLine: Polyspline;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SankeyLink\";\r\n\r\n\t\t// TODO can this be removed ?\r\n\t\tnew InterfaceColorSet();\r\n\r\n\t\tthis.tension = 0.8;\r\n\t\tthis.controlPointDistance = 0.2;\r\n\r\n\t\tthis.startAngle = 0;\r\n\t\tthis.endAngle = 0;\r\n\r\n\t\tthis.linkWidth = 0;\r\n\r\n\t\tthis.startX = 0;\r\n\t\tthis.endX = 0;\r\n\r\n\t\tthis.startY = 0;\r\n\t\tthis.endY = 0;\r\n\r\n\t\tthis.middleLine = this.createChild(Polyspline);\r\n\t\tthis.middleLine.shouldClone = false;\r\n\t\tthis.middleLine.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates (redraws) the link.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\r\n\t\tif (!this.isTemplate) {\r\n\r\n\t\t\tlet x0 = this.startX\r\n\t\t\tlet y0 = this.startY;\r\n\t\t\tlet x1 = this.endX;\r\n\t\t\tlet y1 = this.endY;\r\n\r\n\t\t\tif (!$type.isNumber(x1)) {\r\n\t\t\t\tx1 = x0;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNumber(y1)) {\r\n\t\t\t\ty1 = y0;\r\n\t\t\t}\r\n\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\t\t\tlet w = this.linkWidth;\r\n\r\n\t\t\tlet path = \"\";\r\n\r\n\t\t\tlet xt0 = x0;\r\n\t\t\tlet yt0 = y0;\r\n\r\n\t\t\tlet xt1 = x1;\r\n\t\t\tlet yt1 = y1;\r\n\r\n\t\t\tlet xb0 = x0 + w * $math.sin(startAngle);\r\n\t\t\tlet xb1 = x1 + w * $math.sin(endAngle);\r\n\r\n\t\t\tlet yb0 = y0 + w * $math.cos(startAngle);\r\n\t\t\tlet yb1 = y1 + w * $math.cos(endAngle);\r\n\r\n\t\t\tlet xm0 = x0 + w / 2 * $math.sin(startAngle);\r\n\t\t\tlet xm1 = x1 + w / 2 * $math.sin(endAngle);\r\n\r\n\t\t\tlet ym0 = y0 + w / 2 * $math.cos(startAngle);\r\n\t\t\tlet ym1 = y1 + w / 2 * $math.cos(endAngle);\r\n\r\n\t\t\tthis.zIndex = this.zIndex || this.dataItem.index;\r\n\r\n\t\t\tlet tensionX = this.tension + (1 - this.tension) * $math.sin(startAngle);\r\n\t\t\tlet tensionY = this.tension + (1 - this.tension) * $math.cos(startAngle);\r\n\r\n\t\t\tthis.middleLine.tensionX = tensionX;\r\n\t\t\tthis.middleLine.tensionY = tensionY;\r\n\r\n\t\t\tif ($type.isNumber(w) && ($type.isNumber(x0) && $type.isNumber(x1) && $type.isNumber(y0) && $type.isNumber(y1))) {\r\n\r\n\t\t\t\t// solves issues with gradient fill of straight lines\r\n\t\t\t\tif ($math.round(xt0, 3) == $math.round(xt1, 3)) {\r\n\t\t\t\t\txt1 += 0.01;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($math.round(yt0, 3) == $math.round(yt1, 3)) {\r\n\t\t\t\t\tyt1 += 0.01;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($math.round(xb0, 3) == $math.round(xb1, 3)) {\r\n\t\t\t\t\txb1 += 0.01;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ($math.round(yb0, 3) == $math.round(yb1, 3)) {\r\n\t\t\t\t\tyb1 += 0.01;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet minX = Math.min(xb0, xb1, xt0, xt1);\r\n\t\t\t\tlet minY = Math.min(yb0, yb1, yt0, yt1);\r\n\t\t\t\tlet maxX = Math.max(xb0, xb1, xt0, xt1);\r\n\t\t\t\tlet maxY = Math.max(yb0, yb1, yt0, yt1);\r\n\r\n\t\t\t\tthis._bbox = {\r\n\t\t\t\t\tx: minX,\r\n\t\t\t\t\ty: minY,\r\n\t\t\t\t\twidth: maxX - minX,\r\n\t\t\t\t\theight: maxY - minY\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet cpd = this.controlPointDistance;\r\n\r\n\t\t\t\tlet kxt0 = xt0 + (xt1 - xt0) * cpd * $math.cos(startAngle);\r\n\t\t\t\tlet kyt0 = yt0 + (yt1 - yt0) * cpd * $math.sin(startAngle);\r\n\r\n\t\t\t\tlet kxt1 = xt1 - (xt1 - xt0) * cpd * $math.cos(endAngle);\r\n\t\t\t\tlet kyt1 = yt1 - (yt1 - yt0) * cpd * $math.sin(endAngle);\r\n\r\n\t\t\t\tlet kxm0 = xm0 + (xm1 - xm0) * cpd * $math.cos(startAngle);\r\n\t\t\t\tlet kym0 = ym0 + (ym1 - ym0) * cpd * $math.sin(startAngle);\r\n\r\n\t\t\t\tlet kxm1 = xm1 - (xm1 - xm0) * cpd * $math.cos(endAngle);\r\n\t\t\t\tlet kym1 = ym1 - (ym1 - ym0) * cpd * $math.sin(endAngle);\r\n\r\n\t\t\t\tlet angle = $math.getAngle({ x: kxt0, y: kyt0 }, { x: kxt1, y: kyt1 });\r\n\r\n\t\t\t\tlet dx = (w / $math.cos(angle) - w) / $math.tan(angle) * $math.cos(startAngle);\r\n\t\t\t\tlet dy = (w / $math.sin(angle) - w) * $math.tan(angle) * $math.sin(startAngle);\r\n\r\n\t\t\t\tlet kxb0 = -dx / 2 + xb0 + (xb1 - xb0) * cpd * $math.cos(startAngle);\r\n\t\t\t\tlet kyb0 = -dy / 2 + yb0 + (yb1 - yb0) * cpd * $math.sin(startAngle);\r\n\r\n\t\t\t\tlet kxb1 = -dx / 2 + xb1 - (xb1 - xb0) * cpd * $math.cos(endAngle);\r\n\t\t\t\tlet kyb1 = -dy / 2 + yb1 - (yb1 - yb0) * cpd * $math.sin(endAngle);\r\n\r\n\r\n\t\t\t\tthis.middleLine.segments = [[{ x: xm0, y: ym0 }, { x: kxm0, y: kym0 }, { x: kxm1, y: kym1 }, { x: xm1, y: ym1 }]];\r\n\r\n\t\t\t\tkxt0 += dx / 2;\r\n\t\t\t\tkyt0 += dy / 2;\r\n\r\n\t\t\t\tkxt1 += dx / 2;\r\n\t\t\t\tkyt1 += dy / 2;\r\n\r\n\t\t\t\tpath += $path.moveTo({ x: xt0, y: yt0 });\r\n\t\t\t\tpath += new $smoothing.Tension(tensionX, tensionY).smooth([{ x: xt0, y: yt0 }, { x: kxt0, y: kyt0 }, { x: kxt1, y: kyt1 }, { x: xt1, y: yt1 }]);\r\n\t\t\t\tpath += $path.lineTo({ x: xb1, y: yb1 });\r\n\t\t\t\tpath += new $smoothing.Tension(tensionX, tensionY).smooth([{ x: xb1, y: yb1 }, { x: kxb1, y: kyb1 }, { x: kxb0, y: kyb0 }, { x: xb0, y: yb0 }]);\r\n\t\t\t\tpath += $path.closePath();\r\n\t\t\t}\r\n\r\n\t\t\tthis.link.path = path;\r\n\r\n\t\t\tif (this.maskBullets) {\r\n\t\t\t\tthis.bulletsMask.path = path;\r\n\t\t\t\tthis.bulletsContainer.mask = this.bulletsMask;\r\n\t\t\t}\r\n\t\t\tthis.positionBullets();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [startX description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value  Start X\r\n\t */\r\n\tpublic set startX(value: number) {\r\n\t\tthis.setPropertyValue(\"startX\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start X\r\n\t */\r\n\tpublic get startX(): number {\r\n\t\treturn this.getPropertyValue(\"startX\");\r\n\t}\r\n\r\n\t/**\r\n\t * [endX description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value  End X\r\n\t */\r\n\tpublic set endX(value: number) {\r\n\t\tthis.setPropertyValue(\"endX\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End X\r\n\t */\r\n\tpublic get endX(): number {\r\n\t\treturn this.getPropertyValue(\"endX\");\r\n\t}\r\n\r\n\t/**\r\n\t * [startY description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value  Start Y\r\n\t */\r\n\tpublic set startY(value: number) {\r\n\t\tthis.setPropertyValue(\"startY\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start Y\r\n\t */\r\n\tpublic get startY(): number {\r\n\t\treturn this.getPropertyValue(\"startY\");\r\n\t}\r\n\r\n\t/**\r\n\t * [endY description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value End Y\r\n\t */\r\n\tpublic set endY(value: number) {\r\n\t\tthis.setPropertyValue(\"endY\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End Y\r\n\t */\r\n\tpublic get endY(): number {\r\n\t\treturn this.getPropertyValue(\"endY\");\r\n\t}\r\n\r\n\t/**\r\n\t * [linkWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set linkWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"linkWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return [description]\r\n\t */\r\n\tpublic get linkWidth(): number {\r\n\t\treturn this.getPropertyValue(\"linkWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Distance of control point of a link, defines relative distance from a node at which linke should bend\r\n\t * @default 0.2\r\n\t * @param value\r\n\t */\r\n\tpublic set controlPointDistance(value: number) {\r\n\t\tthis.setPropertyValue(\"controlPointDistance\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return relative control point distance\r\n\t */\r\n\tpublic get controlPointDistance(): number {\r\n\t\treturn this.getPropertyValue(\"controlPointDistance\");\r\n\t}\r\n\r\n\t/**\r\n\t * Tension of a spline, 1 would make the link to have sharp edges\r\n\t * @default 0.8\r\n\t * @param value\r\n\t */\r\n\tpublic set tension(value: number) {\r\n\t\tthis.setPropertyValue(\"tension\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return tension value\r\n\t */\r\n\tpublic get tension(): number {\r\n\t\treturn this.getPropertyValue(\"tension\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SankeyLink\"] = SankeyLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/SankeyLink.ts","/**\r\n * Sankey diagram module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagram, FlowDiagramDataItem, IFlowDiagramAdapters, IFlowDiagramDataFields, IFlowDiagramEvents, IFlowDiagramProperties } from \"./FlowDiagram\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { SankeyNode } from \"../elements/SankeyNode\";\r\nimport { SankeyLink } from \"../elements/SankeyLink\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo rearange notes after dragged\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[SankeyDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class SankeyDiagramDataItem extends FlowDiagramDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: SankeyDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: SankeyLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t */\r\n\tpublic fromNode: SankeyNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t */\r\n\tpublic toNode: SankeyNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SankeyDiagramDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[SankeyDiagram]].\r\n */\r\nexport interface ISankeyDiagramDataFields extends IFlowDiagramDataFields {\r\n\r\n\t/**\r\n\t * Name of the source node.\r\n\t */\r\n\tfromName?: string;\r\n\r\n\t/**\r\n\t * Name of the target node.\r\n\t */\r\n\ttoName?: string;\r\n\r\n\t/**\r\n\t * Value of the link between two nodes.\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * Color of a from node\r\n\t */\r\n\tcolor?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[SankeyDiagram]]\r\n */\r\nexport interface ISankeyDiagramProperties extends IFlowDiagramProperties {\r\n\r\n\t/**\r\n\t * Sort nodes by name or value or do not sort at all\r\n\t */\r\n\tnodeAlign?: \"top\" | \"bottom\" | \"middle\";\r\n\r\n\r\n\t/**\r\n\t * Orientation of the chart.\r\n\t */\r\n\torientation?: Orientation;\r\n}\r\n\r\n/**\r\n * Defines events for [[SankeyDiagram]].\r\n */\r\nexport interface ISankeyDiagramEvents extends IFlowDiagramEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SankeyDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISankeyDiagramAdapters extends IFlowDiagramAdapters, ISankeyDiagramProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Sankey Diagram chart.\r\n *\r\n * @see {@link ISankeyDiagramEvents} for a list of available Events\r\n * @see {@link ISankeyDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sankey-diagram/} for documentation\r\n * @important\r\n */\r\nexport class SankeyDiagram extends FlowDiagram {\r\n\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t */\r\n\tpublic _dataItem: SankeyDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ISankeyDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ISankeyDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ISankeyDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISankeyDiagramEvents;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: SankeyLink;\r\n\r\n\t/**\r\n\t * @todo Description\r\n\t */\r\n\tprotected _levelSum: { [index: number]: number };\r\n\r\n\t/**\r\n\t * @todo Description\r\n\t */\r\n\tprotected _levelNodesCount: { [index: number]: number };\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node: SankeyNode;\r\n\r\n\t/**\r\n\t * [maxSum description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic maxSum: number;\r\n\r\n\t/**\r\n\t * level with max sum\r\n\t */\r\n\tprotected _maxSumLevel: number;\r\n\r\n\t/**\r\n\t * [valueHeight description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tprotected _valueHeight: number;\r\n\r\n\t/**\r\n\t * A total number of levels, present on this chart.\r\n\t */\r\n\tprotected _levelCount: number;\r\n\r\n\t/**\r\n\t * Sorted nodes iterator.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tprotected _sorted: $iter.Iterator<[string, this[\"_node\"]]>;\r\n\r\n\tprotected _heightAnimation: Animation;\r\n\r\n\tprotected _level: number;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"SankeyDiagram\";\r\n\t\tthis.orientation = \"horizontal\";\r\n\t\tthis.nodeAlign = \"middle\";\r\n\r\n\t\tthis.nodesContainer.width = percent(100);\r\n\t\tthis.nodesContainer.height = percent(100);\r\n\r\n\t\tthis.linksContainer.width = percent(100);\r\n\t\tthis.linksContainer.height = percent(100);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates chart's data, effectively causing the chart to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tsuper.validateData();\r\n\r\n\t\tthis._levelCount = 0;\r\n\r\n\t\tthis.nodes.each((key, node) => {\r\n\t\t\tnode.level = undefined;\r\n\t\t});\r\n\r\n\t\tthis.nodes.each((key, node) => {\r\n\t\t\tnode.level = this.getNodeLevel(node, 0);\r\n\t\t\tthis._levelCount = $math.max(this._levelCount, node.level);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns node's highest level.\r\n\t *\r\n\t * @param node   Node\r\n\t * @param level  Current level\r\n\t * @return New level\r\n\t */\r\n\tprotected getNodeLevel(node: this[\"_node\"], level: number): number {\r\n\t\t//@todo solve circular so\r\n\t\tlet levels: number[] = [level];\r\n\t\t$iter.each(node.incomingDataItems.iterator(), (link) => {\r\n\t\t\tif (link.fromNode) {\r\n\t\t\t\tif ($type.isNumber(link.fromNode.level)) {\r\n\t\t\t\t\tlevels.push(link.fromNode.level + 1);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlevels.push(this.getNodeLevel(link.fromNode, level + 1));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\treturn Math.max(...levels);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Calculates relation between pixel height and total value.\r\n\t *\r\n\t * In Sankey the actual thickness of links and height of nodes will depend\r\n\t * on their values.\r\n\t */\r\n\tprotected calculateValueHeight() {\r\n\t\t// calculate sums of each level\r\n\t\tthis._levelSum = {};\r\n\t\tthis._levelNodesCount = {};\r\n\t\tthis.maxSum = 0;\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tthis.getNodeValue(node);\r\n\t\t});\r\n\r\n\t\tthis.nodes.each((key, node) => {\r\n\t\t\tlet level = node.level;\r\n\r\n\t\t\tlet value = Math.max(node.totalIncoming, node.totalOutgoing);\r\n\r\n\r\n\t\t\tif (value / total < this.minNodeSize) {\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.isNumber(this._levelSum[level])) {\r\n\t\t\t\tthis._levelSum[level] += value;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._levelSum[level] = value;\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.isNumber(this._levelNodesCount[level])) {\r\n\t\t\t\tthis._levelNodesCount[level]++;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._levelNodesCount[level] = 1;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tlet availableHeight: number;\r\n\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\tavailableHeight = this.chartContainer.maxHeight - 1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tavailableHeight = this.chartContainer.maxWidth - 1;\r\n\t\t}\r\n\r\n\r\n\t\tlet maxSumLevel: number;\r\n\t\tlet minHeight: number;\r\n\r\n\t\t$object.each(this._levelSum, (key, value) => {\r\n\t\t\tlet realValue = value;\r\n\r\n\t\t\tlet levelNodeCount = this._levelNodesCount[key];\r\n\t\t\tlet valueHeight = (availableHeight - (levelNodeCount - 1) * this.nodePadding) / realValue;\r\n\r\n\t\t\tif (minHeight > valueHeight || !$type.isNumber(minHeight)) {\r\n\t\t\t\tminHeight = valueHeight;\r\n\t\t\t\tthis.maxSum = realValue;\r\n\t\t\t\tmaxSumLevel = $type.toNumber(key);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis._maxSumLevel = maxSumLevel;\r\n\r\n\t\tlet maxSumLevelNodeCount = this._levelNodesCount[this._maxSumLevel];\r\n\r\n\t\tlet valueHeight = (availableHeight - (maxSumLevelNodeCount - 1) * this.nodePadding) / this.maxSum;\r\n\r\n\t\tif (!$type.isNumber(this.valueHeight)) {\r\n\t\t\tthis.valueHeight = valueHeight;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet finalHeight;\r\n\t\t\ttry {\r\n\t\t\t\tfinalHeight = this._heightAnimation.animationOptions[0].to;\r\n\t\t\t}\r\n\t\t\tcatch (err) {\r\n\r\n\t\t\t}\r\n\t\t\t// without animations it will be non-smooth as maxValue jumps from one column to another\r\n\t\t\tif (finalHeight != valueHeight) {\r\n\t\t\t\tlet duration = this.interpolationDuration;\r\n\t\t\t\ttry {\r\n\t\t\t\t\tduration = this.nodes.template.states.getKey(\"active\").transitionDuration;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (err) {\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._heightAnimation = new Animation(this, { property: \"valueHeight\", from: this.valueHeight, to: valueHeight }, duration, this.interpolationEasing).start();\r\n\t\t\t\tthis._disposers.push(this._heightAnimation);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Redraws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\r\n\t\tthis.calculateValueHeight();\r\n\r\n\t\tlet container = this.nodesContainer;\r\n\r\n\t\tlet nextCoordinate: { [index: number]: number } = {};\r\n\r\n\t\tlet maxSumLevelNodeCount = this._levelNodesCount[this._maxSumLevel];\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet level = node.level;\r\n\t\t\tlet levelCoordinate: number = 0;\r\n\r\n\t\t\tlet nodeCount = this._levelNodesCount[level];\r\n\r\n\t\t\tswitch (this.nodeAlign) {\r\n\t\t\t\tcase \"bottom\":\r\n\t\t\t\t\tlevelCoordinate = (this.maxSum - this._levelSum[level]) * this.valueHeight - (nodeCount - maxSumLevelNodeCount) * this.nodePadding;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tlevelCoordinate = (this.maxSum - this._levelSum[level]) * this.valueHeight / 2 - (nodeCount - maxSumLevelNodeCount) * this.nodePadding / 2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tnode.parent = container;\r\n\r\n\t\t\tlet delta: number;\r\n\t\t\tlet x: number;\r\n\t\t\tlet y: number;\r\n\r\n\t\t\tlet value = Math.max(node.totalIncoming, node.totalOutgoing);\r\n\r\n\t\t\tif (value / total < this.minNodeSize) {\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tdelta = (this.innerWidth - node.pixelWidth) / this._levelCount;\r\n\r\n\t\t\t\tx = delta * node.level;\r\n\t\t\t\ty = nextCoordinate[level] || levelCoordinate;\r\n\r\n\t\t\t\tlet h = value * this.valueHeight;\r\n\r\n\t\t\t\tnode.height = h;\r\n\t\t\t\tnode.minX = x;\r\n\t\t\t\tnode.maxX = x;\r\n\t\t\t\tnextCoordinate[level] = y + h + this.nodePadding;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdelta = (this.innerHeight - node.pixelHeight) / this._levelCount;\r\n\r\n\t\t\t\tx = nextCoordinate[level] || levelCoordinate;\r\n\t\t\t\ty = delta * node.level;\r\n\r\n\t\t\t\tlet w = value * this.valueHeight;\r\n\r\n\t\t\t\tnode.width = w;\r\n\t\t\t\tnode.minY = y;\r\n\t\t\t\tnode.maxY = y;\r\n\t\t\t\tnextCoordinate[level] = x + w + this.nodePadding;\r\n\t\t\t}\r\n\t\t\tnode.x = x;\r\n\t\t\tnode.y = y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Performs actual operations to reveal this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param duration Fade in duration (ms)\r\n\t * @return Fade in duration (ms)\r\n\t */\r\n\tprotected showReal(duration?: number): $type.Optional<Animation> {\r\n\r\n\t\tif(this.preventShow){\r\n\t\t\treturn;\r\n\t\t}\t\t\r\n\r\n\t\tif (this.interpolationDuration > 0) {\r\n\t\t\tlet container = this.nodesContainer;\r\n\r\n\t\t\tlet i: number = 0;\r\n\r\n\t\t\t$iter.each(this.links.iterator(), (link) => {\r\n\t\t\t\tlink.hide(0);\r\n\t\t\t})\r\n\r\n\t\t\t$iter.each(this._sorted, (strNode) => {\r\n\r\n\t\t\t\tlet node = strNode[1];\r\n\r\n\t\t\t\tlet property: \"dx\" | \"dy\";\r\n\r\n\t\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\t\tnode.dx = -(container.pixelWidth - node.pixelWidth) / Math.max(this._levelCount, 1);\r\n\t\t\t\t\tproperty = \"dx\";\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tnode.dy = -(container.pixelHeight - node.pixelHeight) / Math.max(this._levelCount, 1);\r\n\t\t\t\t\tproperty = \"dy\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet delay = 0;\r\n\t\t\t\tlet duration = this.interpolationDuration;\r\n\t\t\t\tif (this.sequencedInterpolation) {\r\n\t\t\t\t\tdelay = this.sequencedInterpolationDelay * i + duration * i / $iter.length(this.nodes.iterator());\r\n\t\t\t\t}\r\n\r\n\t\t\t\tnode.opacity = 0;\r\n\t\t\t\tnode.invalidateLinks();\r\n\r\n\t\t\t\tnode.animate([{ property: \"opacity\", from: 0, to: 1 }, { property: property, to: 0 }], this.interpolationDuration, this.interpolationEasing).delay(delay);\r\n\r\n\t\t\t\t$iter.each(node.outgoingDataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\tlet animation = dataItem.link.show(this.interpolationDuration);\r\n\t\t\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\t\t\tanimation.delay(delay);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\t$iter.each(node.incomingDataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\t\t\tlet animation = dataItem.link.show(this.interpolationDuration);\r\n\t\t\t\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\t\t\t\tanimation.delay(delay);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\ti++;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn super.showReal();\r\n\t}\r\n\r\n\t/**\r\n\t * Changes the sort type of the nodes.\r\n\t *\r\n\t * This will actually reshuffle nodes using nice animation.\r\n\t */\r\n\tprotected changeSorting() {\r\n\t\tthis.sortNodes();\r\n\r\n\t\tlet nextCoordinate: { [index: number]: number } = {};\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet level = node.level;\r\n\r\n\t\t\tlet levelCoordinate = (this.maxSum - this._levelSum[level]) * this.valueHeight / 2;\r\n\r\n\t\t\tlet property: \"x\" | \"y\";\r\n\t\t\tlet nodeHeight: number;\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tproperty = \"y\";\r\n\t\t\t\tnodeHeight = node.pixelHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tproperty = \"x\";\r\n\t\t\t\tnodeHeight = node.pixelWidth;\r\n\t\t\t}\r\n\r\n\t\t\tnode.animate({ property: property, to: nextCoordinate[level] || levelCoordinate }, this.interpolationDuration, this.interpolationEasing);\r\n\t\t\tnextCoordinate[level] = (nextCoordinate[level] || levelCoordinate) + nodeHeight + this.nodePadding;\r\n\r\n\t\t\tnode.invalidateLinks();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Sankey diagram\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new data item.\r\n\t *\r\n\t * @return Data item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new SankeyDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * How to align nodes. In case layout is vertical, top means left and bottom means right\r\n\t *\r\n\t * @param value  Node sorting\r\n\t */\r\n\tpublic set nodeAlign(value: \"top\" | \"middle\" | \"bottom\") {\r\n\t\tthis.setPropertyValue(\"nodeAlign\", value);\r\n\t\tthis.changeSorting();\r\n\t}\r\n\r\n\t/**\r\n\t * @returns Returns nodeAlign value\r\n\t */\r\n\tpublic get nodeAlign(): \"top\" | \"middle\" | \"bottom\" {\r\n\t\treturn this.getPropertyValue(\"nodeAlign\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the chart: \"horizontal\" or \"vertical\";\r\n\t *\r\n\t * @param value Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tthis.setPropertyValue(\"orientation\", value, true);\r\n\t\tlet nameLabel = this.nodes.template.nameLabel;\r\n\r\n\t\tif (value == \"vertical\") {\r\n\t\t\tthis.nodes.template.width = undefined;\r\n\t\t\tnameLabel.label.horizontalCenter = \"middle\";\r\n\t\t\tnameLabel.locationX = 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.nodes.template.height = undefined;\r\n\t\t\tnameLabel.label.horizontalCenter = \"left\";\r\n\t\t\tnameLabel.locationX = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createNode(): this[\"_node\"] {\r\n\t\tlet node = new SankeyNode();\r\n\t\tthis._disposers.push(node);\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createLink(): this[\"_link\"] {\r\n\t\tlet link = new SankeyLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get valueHeight(): number {\r\n\t\treturn this._valueHeight;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic set valueHeight(value: number) {\r\n\t\tif (value != this._valueHeight) {\r\n\t\t\tthis._valueHeight = value;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tdisposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis._sorted = this.nodes.iterator();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SankeyDiagram\"] = SankeyDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/SankeyDiagram.ts","/**\r\n * ChordNode module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagramNode, IFlowDiagramNodeAdapters, IFlowDiagramNodeEvents, IFlowDiagramNodeProperties } from \"./FlowDiagramNode\";\r\nimport { ChordDiagram, ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordNode]].\r\n */\r\nexport interface IChordNodeProperties extends IFlowDiagramNodeProperties { }\r\n\r\n/**\r\n * Defines events for [[ChordNode]].\r\n */\r\nexport interface IChordNodeEvents extends IFlowDiagramNodeEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordNodeAdapters extends IFlowDiagramNodeAdapters, IChordNodeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a node in a Chord Diagram.\r\n *\r\n * A Chord node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[ChordLink]] elements.\r\n *\r\n * @see {@link IChordNodeEvents} for a list of available events\r\n * @see {@link IChordNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordNode extends FlowDiagramNode {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordNodeEvents;\r\n\r\n\t/**\r\n\t * A list of data items of the items coming in from another node, one level\r\n\t * up.\r\n\t *\r\n\t * These are what ingoing links are build out of.\r\n\t */\r\n\tprotected _incomingDataItems: List<ChordDiagramDataItem>;\r\n\r\n\t/**\r\n\t * A list of data items of the items going out of the node.\r\n\t *\r\n\t * These are what outgoing links are build out of.\r\n\t */\r\n\tprotected _outgoingDataItems: List<ChordDiagramDataItem>;\r\n\r\n\t/**\r\n\t * Sorted list of incoming items.\r\n\t */\r\n\tprotected _incomingSorted: $iter.Iterator<ChordDiagramDataItem>;\r\n\r\n\t/**\r\n\t * Sorted list of outgoing items.\r\n\t */\r\n\tprotected _outgoingSorted: $iter.Iterator<ChordDiagramDataItem>;\r\n\r\n\t/**\r\n\t * A chart instance this node is added to.\r\n\t */\r\n\tpublic chart: ChordDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[ChordDiagramDataItem]] used in the class.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\r\n\t/**\r\n\t * Slice sprite of a node\r\n\t */\r\n\tpublic slice: Slice;\r\n\r\n\t/**\r\n\t * A label element which shows node's name.\r\n\t */\r\n\tpublic label: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic nextAngle: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic trueStartAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordNode\";\r\n\r\n\t\tlet label = this.createChild(AxisLabelCircular);\r\n\t\tlabel.location = 0.5;\r\n\t\tlabel.radius = 5;\r\n\t\tlabel.text = \"{name}\";\r\n\t\tlabel.zIndex = 1;\r\n\t\tlabel.shouldClone = false;\r\n\t\tthis.label = label;\r\n\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.events.on(\"positionchanged\", this.updateRotation, this, false);\r\n\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.slice = this.createChild(Slice);\r\n\t\tthis.slice.isMeasured = false;\r\n\r\n\t\tlet hiddenState = this.hiddenState;\r\n\t\thiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n\t\thiddenState.properties.opacity = 0.5;\r\n\t\thiddenState.properties.visible = true;\r\n\r\n\t\tthis.setStateOnChildren = false;\r\n\r\n\t\tthis.slice.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.adapter.add(\"tooltipX\", (tooltipX, target)=>{\r\n\t\t    return target.slice.ix * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\r\n\t\tthis.adapter.add(\"tooltipY\", (tooltipY, target)=>{\r\n\t\t    return target.slice.iy * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Invalidates all links, attached to this node.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidateLinks(): void {\r\n\t\tsuper.invalidateLinks();\r\n\r\n\t\tlet label = this.label;\r\n\t\tlet slice = this.slice;\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart && slice) {\r\n\r\n\t\t\tlet sum = this.total;\r\n\t\t\tlet arc = slice.arc;\r\n\t\t\tlet sliceStartAngle = slice.startAngle;\r\n\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tif (child instanceof Bullet) {\r\n\t\t\t\t\tlet locationX = child.locationX;\r\n\t\t\t\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\t\t\t\tlocationX = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet locationY = child.locationY;\r\n\t\t\t\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\t\t\t\tlocationY = 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet childAngle = sliceStartAngle + arc * locationX;\r\n\t\t\t\t\tlet childRadius = locationY * slice.radius;\r\n\r\n\t\t\t\t\tchild.x = childRadius * $math.cos(childAngle);\r\n\t\t\t\t\tchild.y = childRadius * $math.sin(childAngle);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\r\n\t\t\tlet labelAngle = sliceStartAngle + arc * label.location;\r\n\t\t\tlet startAngle = sliceStartAngle + (1 - sum / this.adjustedTotal) * arc * 0.5; // if value of a node is > then sum of the links, add to center link\r\n\r\n\t\t\tif ($type.isNaN(startAngle)) {\r\n\t\t\t\tstartAngle = sliceStartAngle;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.fixPosition(labelAngle, slice.radius);\r\n\r\n\t\t\tthis.nextAngle = startAngle;\r\n\r\n\t\t\tif (this._outgoingSorted) {\r\n\r\n\t\t\t\t$iter.each(this._outgoingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\t\t\t\t\tlink.parent = this.chart.linksContainer;\r\n\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\t\t\t\tif ($type.isNumber(value)) {\r\n\r\n\t\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\t\tlink.startAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle;\r\n\t\t\t\t\t\t\tlink.startAngle = this.nextAngle;\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\t\t\t\tlink.endAngle = link.startAngle;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (this._incomingSorted) {\r\n\t\t\t\t$iter.each(this._incomingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\r\n\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\r\n\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\tlink.endAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlink.endAngle = this.nextAngle;\r\n\t\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle; // yes, this is needed\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\t\t\tlink.startAngle = link.endAngle;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * updates slice start angle so that when we drag a node it would face the center\r\n\t */\r\n\tprotected updateRotation() {\r\n\t\tlet slice = this.slice;\r\n\t\tlet mAngle = this.trueStartAngle + slice.arc / 2;\r\n\t\tlet radius = slice.radius;\r\n\r\n\t\tlet tx = radius * $math.cos(mAngle);\r\n\t\tlet ty = radius * $math.sin(mAngle);\r\n\r\n\t\tlet angle = $math.getAngle({ x: tx + this.pixelX, y: ty + this.pixelY });\r\n\r\n\t\tslice.startAngle = this.trueStartAngle + (angle - mAngle);\r\n\r\n\t\tthis.dx = - this.pixelX;\r\n\t\tthis.dy = - this.pixelY;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies properties and labels from another [[ChordNode]].\r\n\t *\r\n\t * @param source  Source node\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.label.copyFrom(source.label);\r\n\t\tthis.slice.copyFrom(source.slice);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordNode\"] = ChordNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordNode.ts","/**\r\n * Functionality for drawing quadratic curves.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Line, ILineProperties, ILineAdapters, ILineEvents } from \"./Line\";\r\nimport { IPoint, IOrientationPoint } from \"../defs/IPoint\";\r\nimport { color } from \"../utils/Color\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $type from \"../utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines available properties for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveProperties extends ILineProperties {\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t */\r\n\tcpx?: number;\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t */\r\n\tcpy?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveEvents extends ILineEvents { }\r\n\r\n/**\r\n * Defines adapters for [[QuadraticCurve]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IQuadraticCurveAdapters extends ILineAdapters, IQuadraticCurveProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws a waved line.\r\n *\r\n * @see {@link IQuadraticCurveEvents} for a list of available events\r\n * @see {@link IQuadraticCurveAdapters} for a list of available Adapters\r\n */\r\nexport class QuadraticCurve extends Line {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IQuadraticCurveProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IQuadraticCurveAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IQuadraticCurveEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"QuadraticCurve\";\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\t\tthis.pixelPerfect = false;\r\n\r\n\t\tthis.fill = color();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the waved line.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\t//super.draw();\r\n\t\tif($type.isNumber(this.x1 + this.x2 + this.y1 + this.y2 + this.cpx + this.cpy )){\r\n\r\n\t\t\tlet p1: IPoint = { x: this.x1, y: this.y1 };\r\n\t\t\tlet p2: IPoint = { x: this.x2, y: this.y2 };\r\n\t\t\tlet cp: IPoint = { x: this.cpx, y: this.cpy };\r\n\r\n\t\t\tlet d: string = $path.moveTo(p1) + $path.quadraticCurveTo(p2, cp);\r\n\r\n\t\t\tthis.path = d;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t *\r\n\t * @param value X\r\n\t */\r\n\tpublic set cpx(value: number) {\r\n\t\tthis.setPropertyValue(\"cpx\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get cpx(): number {\r\n\t\treturn this.getPropertyValue(\"cpx\");\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t *\r\n\t * @param value Y\r\n\t */\r\n\tpublic set cpy(value: number) {\r\n\t\tthis.setPropertyValue(\"cpy\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get cpy(): number {\r\n\t\treturn this.getPropertyValue(\"cpy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position along the line (0-1) into pixel coordinates.\r\n\t *\r\n\t * @param position  Position (0-1)\r\n\t * @return Coordinates\r\n\t */\r\n\tpublic positionToPoint(position: number): IOrientationPoint {\r\n\t\tlet p1 = {x:this.x1, y:this.y1};\r\n\t\tlet cp = {x:this.cpx, y:this.cpy};\r\n\t\tlet p2 = {x:this.x2, y:this.y2};\r\n\r\n\t\tlet point1 = $math.getPointOnQuadraticCurve(p1, p2, cp, position);\r\n\t\tlet point2 = $math.getPointOnQuadraticCurve(p1, p2, cp, position + 0.001);\r\n\r\n\t\treturn {x:point1.x, y:point1.y, angle:$math.getAngle(point1, point2)};\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/core/elements/QuadraticCurve.ts","/**\r\n * ChordLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { FlowDiagramLink, IFlowDiagramLinkAdapters, IFlowDiagramLinkEvents, IFlowDiagramLinkProperties } from \"./FlowDiagramLink\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { QuadraticCurve } from \"../../core/elements/QuadraticCurve\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordLink]].\r\n */\r\nexport interface IChordLinkProperties extends IFlowDiagramLinkProperties {\r\n\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tradius?: number;\r\n\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tarc?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordLink]].\r\n */\r\nexport interface IChordLinkEvents extends IFlowDiagramLinkEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordLinkAdapters extends IFlowDiagramLinkAdapters, IChordLinkProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Chord Diagram.\r\n *\r\n * @see {@link IChordLinkEvents} for a list of available events\r\n * @see {@link IChordLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordLink extends FlowDiagramLink {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordLinkEvents;\r\n\r\n\t/**\r\n\t * Defines a type of data item used by this class.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Spline which goes through the middle of a link, used to calculate bullet and tooltip positions, invisible by default\r\n     */\r\n\tpublic middleLine: QuadraticCurve;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordLink\";\r\n\r\n\t\tthis.middleLine = this.createChild(QuadraticCurve);\r\n\t\tthis.middleLine.shouldClone = false;\r\n\t\tthis.middleLine.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates (redraws) the link.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\r\n\t\tif (!this.isTemplate) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\r\n\t\t\tlet arc = this.arc;\r\n\t\t\tlet radius = this.radius;\r\n\r\n\t\t\tlet fromNode = this.dataItem.fromNode;\r\n\t\t\tlet toNode = this.dataItem.toNode;\r\n\r\n\t\t\tlet fromX = 0;\r\n\t\t\tlet fromY = 0;\r\n\r\n\t\t\tif (fromNode) {\r\n\t\t\t\tfromX = fromNode.pixelX + fromNode.dx;\r\n\t\t\t\tfromY = fromNode.pixelY + fromNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tlet toX = 0;\r\n\t\t\tlet toY = 0;\r\n\r\n\t\t\tif (toNode) {\r\n\t\t\t\ttoX = toNode.pixelX + toNode.dx;\r\n\t\t\t\ttoY = toNode.pixelY + toNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tif (radius > 0) {\r\n\t\t\t\tlet x1 = radius * $math.cos(startAngle) + fromX;\r\n\t\t\t\tlet y1 = radius * $math.sin(startAngle) + fromY;\r\n\t\t\t\tlet x2 = radius * $math.cos(endAngle) + toX;\r\n\t\t\t\tlet y2 = radius * $math.sin(endAngle) + toY;\r\n\r\n\t\t\t\t//let cpAngle = startAngle + arc + (endAngle - startAngle - arc) / 2;\r\n\t\t\t\t//let arcWidth = $math.getDistance({x:x1, y:y1}, {x:x4, y:y4});\r\n\r\n\t\t\t\t//let cpx = (arcWidth) * $math.cos(cpAngle);\r\n\t\t\t\t//let cpy = (arcWidth) * $math.sin(cpAngle);\r\n\r\n\t\t\t\tlet cp = { x: 0, y: 0 };\r\n\t\t\t\tlet path = $path.moveTo({ x: x1, y: y1 });\r\n\r\n\t\t\t\tpath += $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x2, y: y2 }, cp);\r\n\t\t\t\tpath += $path.arcTo(endAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x1, y: y1 }, cp);\r\n\r\n\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\tthis.link.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.link.path = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.maskBullets) {\r\n\t\t\t\t\tthis.bulletsMask.path = path;\r\n\t\t\t\t\tthis.bulletsContainer.mask = this.bulletsMask;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet mAngle1 = startAngle + arc / 2;\r\n\t\t\t\tlet mAngle2 = endAngle + arc / 2;\r\n\r\n\t\t\t\tlet middleLine = this.middleLine;\r\n\r\n\t\t\t\tmiddleLine.x1 = radius * $math.cos(mAngle1) + fromX;\r\n\t\t\t\tmiddleLine.y1 = radius * $math.sin(mAngle1) + fromY;\r\n\t\t\t\tmiddleLine.x2 = radius * $math.cos(mAngle2) + toX;\r\n\t\t\t\tmiddleLine.y2 = radius * $math.sin(mAngle2) + toY;\r\n\r\n\t\t\t\tmiddleLine.cpx = 0;\r\n\t\t\t\tmiddleLine.cpy = 0;\r\n\r\n\t\t\t\tmiddleLine.stroke = this.fill;\r\n\r\n\t\t\t\tthis.positionBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value End Y\r\n\t */\r\n\tpublic set radius(value: number) {\r\n\t\tthis.setPropertyValue(\"radius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End Y\r\n\t */\r\n\tpublic get radius(): number {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set arc(value: number) {\r\n\t\tthis.setPropertyValue(\"arc\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return [description]\r\n\t */\r\n\tpublic get arc(): number {\r\n\t\treturn this.getPropertyValue(\"arc\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordLink\"] = ChordLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordLink.ts","/**\r\n * Chord diagram module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagram, FlowDiagramDataItem, IFlowDiagramAdapters, IFlowDiagramDataFields, IFlowDiagramEvents, IFlowDiagramProperties } from \"./FlowDiagram\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DictionaryTemplate } from \"../../core/utils/Dictionary\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ChordNode } from \"../elements/ChordNode\";\r\nimport { ChordLink } from \"../elements/ChordLink\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo rearange notes after dragged\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ChordDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ChordDiagramDataItem extends FlowDiagramDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: ChordDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t */\r\n\tpublic fromNode: ChordNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t */\r\n\tpublic toNode: ChordNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagramDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramDataFields extends IFlowDiagramDataFields {\r\n\r\n\t/**\r\n\t * Name of the source node.\r\n\t */\r\n\tfromName?: string;\r\n\r\n\t/**\r\n\t * Name of the target node.\r\n\t */\r\n\ttoName?: string;\r\n\r\n\t/**\r\n\t * Value of the link between two nodes.\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * Color of a from node\r\n\t */\r\n\tcolor?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[ChordDiagram]]\r\n */\r\nexport interface IChordDiagramProperties extends IFlowDiagramProperties {\r\n\t/**\r\n\t * Radius of the Chord. Absolute or relative.\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes. Absolute or relative. Negative value means that the inner radius will be calculated from the radius, not from the center.\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * If you set this to true, all the lines will be of the same width.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tnonRibbon?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramEvents extends IFlowDiagramEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordDiagramAdapters extends IFlowDiagramAdapters, IChordDiagramProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Chord Diagram chart.\r\n *\r\n * @see {@link IChordDiagramEvents} for a list of available Events\r\n * @see {@link IChordDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/chord-diagram/} for documentation\r\n * @important\r\n */\r\nexport class ChordDiagram extends FlowDiagram {\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IChordDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IChordDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IChordDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IChordDiagramEvents;\r\n\r\n\t/**\r\n\t * A list of chart's Chord nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate<string, ChordNode>}\r\n\t */\r\n\tpublic nodes: DictionaryTemplate<string, ChordNode>;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * Sorted nodes iterator.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tprotected _sorted: $iter.Iterator<[string, ChordNode]>;\r\n\r\n\t/**\r\n\t * [valueAngle description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic valueAngle: number = 0;\r\n\r\n\t/**\r\n\t * A container for chord elemens.\r\n\t */\r\n\tpublic chordContainer:Container;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node:ChordNode;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagram\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\r\n\t\tthis.innerRadius = - 15;\r\n\r\n\t\tthis.nodePadding = 5;\r\n\r\n\t\tlet chordContainer = this.chartContainer.createChild(Container);\r\n\t\tchordContainer.align = \"center\";\r\n\t\tchordContainer.valign = \"middle\";\r\n\t\tchordContainer.shouldClone = false;\r\n\t\tchordContainer.layout = \"absolute\";\r\n\t\tthis.chordContainer = chordContainer;\r\n\r\n\t\tthis.nodesContainer.parent = chordContainer;\r\n\t\tthis.linksContainer.parent = chordContainer;\r\n\r\n\t\tthis.chartContainer.events.on(\"maxsizechanged\", this.invalidate, this, false);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Redraws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tlet chartContainer = this.chartContainer;\r\n\r\n\t\tlet endAngle = this.endAngle;\r\n\t\tlet startAngle = this.startAngle + this.nodePadding / 2;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(chartContainer.innerWidth / rect.width, chartContainer.innerHeight / rect.height);\r\n\r\n\t\tif(!$type.isNumber(maxRadius)){\r\n\t\t\tmaxRadius = 0;\r\n\t\t}\r\n\r\n\t\tlet radius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\t\tlet pixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, radius, true);\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\t\tlet count = 0;\r\n\r\n\t\tlet newTotal = 0;\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tthis.getNodeValue(node);\r\n\t\t\tcount++;\r\n\t\t\tlet value = node.total;\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\t\t\tnewTotal += value;\r\n\t\t});\r\n\r\n\t\tthis.valueAngle = (endAngle - this.startAngle - this.nodePadding * count) / newTotal;\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet slice = node.slice;\r\n\r\n\t\t\tslice.radius = radius;\r\n\t\t\tslice.innerRadius = pixelInnerRadius;\r\n\r\n\t\t\tlet value = node.total;\r\n\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tnode.adjustedTotal = value;\r\n\r\n\t\t\tlet arc: number;\r\n\t\t\tif (this.nonRibbon) {\r\n\t\t\t\tarc = (endAngle - this.startAngle) / count - this.nodePadding;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tarc = this.valueAngle * value;\r\n\t\t\t}\r\n\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.startAngle = startAngle;\r\n\t\t\tnode.trueStartAngle = startAngle;\r\n\t\t\tnode.parent = this.nodesContainer;\r\n\t\t\tnode.validate(); // otherwise flickers - nodes are already created, but not yet positioned etc.\r\n\t\t\tstartAngle += arc + this.nodePadding;\r\n\t\t})\r\n\r\n\t\tthis.chordContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.chordContainer.invalidateLayout();\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Chord diagram\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new data item.\r\n\t *\r\n\t * @return Data item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ChordDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value  Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param value  End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value  Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param value  Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * If you set this to true, all the lines will be of the same width. This is done by making middleLine of a ChordLink visible.\r\n\t *\r\n\t * @param value\r\n\t */\r\n\tpublic set nonRibbon(value: boolean) {\r\n\t\tthis.setPropertyValue(\"nonRibbon\", value, true);\r\n\t\tthis.links.template.middleLine.strokeOpacity = 1;\r\n\t\tthis.links.template.link.fillOpacity = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Non-ribbon\r\n\t */\r\n\tpublic get nonRibbon(): boolean {\r\n\t\treturn this.getPropertyValue(\"nonRibbon\");\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createNode():this[\"_node\"]{\r\n\t\tlet node = new ChordNode();\r\n\t\tthis._disposers.push(node);\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createLink():this[\"_link\"]{\r\n\t\tlet link = new ChordLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordDiagram\"] = ChordDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/ChordDiagram.ts","/**\r\n * TreeMap series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { TreeMap, TreeMapDataItem } from \"../types/TreeMap\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { Container } from \"../../core/Container\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMapSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Data for the this particular item.\r\n\t *\r\n\t * @param value  Item's data\r\n\t */\r\n\t//public set dataContext(value: Object) {\r\n\t//\tthis._dataContext = value;\r\n\t//}\r\n\r\n\r\n\r\n\t/**\r\n\t * @return Item's data\r\n\t */\r\n\t/*\r\n   public get dataContext(): Object {\r\n\t   // It's because data of tree series is TreeMapDataItems.\r\n\t   if (this._dataContext) {\r\n\t\t   return (<any>this._dataContext).dataContext;\r\n\t   }\r\n   }*/\r\n\r\n\t/**\r\n\t * The name of the item's parent item.\r\n\t *\r\n\t * @return Parent name\r\n\t */\r\n\tpublic get parentName(): string {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem && treeMapDataItem.parent) {\r\n\t\t\treturn treeMapDataItem.parent.name;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value.\r\n\t *\r\n\t * @readonly\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem) {\r\n\t\t\treturn treeMapDataItem.value;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A corresponding data item from the tree map.\r\n\t *\r\n\t * @readonly\r\n\t * @return Data item\r\n\t */\r\n\tpublic get treeMapDataItem(): TreeMapDataItem {\r\n\t\treturn <TreeMapDataItem>this._dataContext;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration  Animation duration (ms)\r\n\t * @param delay     Delay animation (ms)\r\n\t * @param toValue   A value to set to `fields` when hiding\r\n\t * @param fields    A list of data fields to set value to `toValue`\r\n\t */\r\n\tpublic hide(duration?: number, delay?: number, toValue?: number, fields?: string[]): $type.Optional<Animation> {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem) {\r\n\t\t\ttreeMapDataItem.hide(duration);\r\n\t\t}\r\n\t\treturn super.hide(duration, delay, toValue, fields);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration  Animation duration (ms)\r\n\t * @param delay     Delay animation (ms)\r\n\t * @param fields    A list of fields to set values of\r\n\t */\r\n\tpublic show(duration?: number, delay?: number, fields?: string[]): $type.Optional<Animation> {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem) {\r\n\t\t\ttreeMapDataItem.show(duration, delay, fields);\r\n\t\t}\r\n\t\treturn super.show(duration, delay, fields);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMapSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapSeriesAdapters extends IColumnSeriesAdapters, ITreeMapSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class TreeMapSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapSeriesEvents;\r\n\r\n\t/**\r\n\t * The level in treemap hierarchy series is at.\r\n\t */\r\n\tpublic level: number;\r\n\r\n\t/**\r\n\t * Type of the data item used by series.\r\n\t */\r\n\tpublic _dataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\r\n\t/**\r\n\t * Parent data item of a series.\r\n\t */\r\n\tpublic parentDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"TreeMapSeries\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.fillOpacity = 1;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.minBulletDistance = 0;\r\n\t\tthis.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n\t\tthis.columns.template.configField = \"config\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"background\");\r\n\t\tthis.dataFields.openValueX = \"x0\";\r\n\t\tthis.dataFields.valueX = \"x1\";\r\n\t\tthis.dataFields.openValueY = \"y0\";\r\n\t\tthis.dataFields.valueY = \"y1\";\r\n\r\n\t\tthis.sequencedInterpolation = false;\r\n\r\n\t\tthis.showOnInit = false;\r\n\r\n\t\t// otherwise nodes don't stack nicely to each other\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param dataItem     Data item\r\n\t * @param dataContext  Raw data\r\n\t * @param index        Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\t(<TreeMapDataItem>dataContext).seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows series.\r\n\t *\r\n\t * @param duration  Duration of fade in (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\t\tif(this.preventShow){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\t//dataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n\t\t\tdataItem.show(duration);\r\n\t\t})\r\n\r\n\t\treturn super.showReal(interpolationDuration);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param duration  Duration of fade out (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet animation = super.hideReal(interpolationDuration);\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\t//dataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n\t\t\tdataItem.hide(duration);\r\n\t\t})\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Process values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic processValues() {\r\n\r\n\t\t// Just overriding so that inherited method does not kick in.\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative start location for the data item.\r\n\t *\r\n\t * @param dataItem  Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getStartLocation(dataItem: this[\"_dataItem\"]): number {\t\t\r\n\t\treturn 0;\r\n\t}\t\r\n\r\n\t/**\r\n\t * Returns relative end location for the data item.\r\n\t *\r\n\t * @param dataItem  Data item\r\n\t * @return Location (0-1)\r\n\t */\r\n\tprotected getEndLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\treturn 1;\r\n\t}\t\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate() {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config  Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Add empty data fields if the they are not set, so that XYSeries\r\n\t\t\t// dataField check does not result in error.\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tconfig.dataFields = {};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker  Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\t//column.copyFrom(<any>this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = <LegendDataItem>marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n\r\n\tprotected disableUnusedColumns(dataItem: ColumnSeriesDataItem) {\r\n\t\tsuper.disableUnusedColumns(dataItem);\r\n\t\tdataItem.column.__disabled = false;\r\n\t}\t\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMapSeries\"] = TreeMapSeries;\r\nregistry.registeredClasses[\"TreeMapSeriesDataItem\"] = TreeMapSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/TreeMapSeries.ts","/**\r\n * TreeMap chart module.\r\n *\r\n * Parts of the functionality used in this module are taken from D3.js library\r\n * (https://d3js.org/)\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { TreeMapSeries } from \"../series/TreeMapSeries\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { TreeMapSeriesDataItem } from \"../series/TreeMapSeries\";\r\nimport { NavigationBar } from \"../elements/NavigationBar\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport { Export } from \"../../core/export/Export\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: TreeMap;\r\n\r\n\t/**\r\n\t * A treemap level this data item is displayed at.\r\n\t */\r\n\tprotected _level: number;\r\n\r\n\t/**\r\n\t * Series of children data items.\r\n\t */\r\n\tprotected _series: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Related series data item.\r\n\t */\r\n\tpublic seriesDataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rows: TreeMapDataItem[] = [];\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic rowsRatio: number;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic dice: boolean;\r\n\r\n\t/**\r\n\t * A reference to a corresponding legend data item.\r\n\t */\r\n\tprotected _legendDataItem: LegendDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapDataItem\";\r\n\r\n\t\tthis.values.value = {};\r\n\r\n\t\tthis.values.x0 = {};\r\n\r\n\t\tthis.values.y0 = {};\r\n\r\n\t\tthis.values.x1 = {};\r\n\r\n\t\tthis.values.y1 = {};\r\n\r\n\t\tthis.hasChildren.children = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A legend's data item, that corresponds to this data item.\r\n\t *\r\n\t * @param value  Legend data item\r\n\t */\r\n\tpublic set legendDataItem(value: LegendDataItem) {\r\n\t\tthis._legendDataItem = value;\r\n\t\tif (value.label) {\r\n\t\t\tvalue.label.dataItem = this;\r\n\t\t}\r\n\t\tif (value.valueLabel) {\r\n\t\t\tvalue.valueLabel.dataItem = this;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Legend data item\r\n\t */\r\n\tpublic get legendDataItem(): LegendDataItem {\r\n\t\treturn this._legendDataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a duration (ms) the Data Item should take to animate from one\r\n\t * value to another.\r\n\t *\r\n\t * If the duration is not specified via parameter, this method will try to\r\n\t * request a default duration from the related `Component`.\r\n\t *\r\n\t * @param duration  Default duration (ms)\r\n\t * @return Duration (ms)\r\n\t */\r\n\tpublic getDuration(): number {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Numeric value of the item.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get value(): number {\r\n\r\n\t\tlet value = 0;\r\n\t\tif (!this.children || this.children.length == 0) {\r\n\t\t\tvalue = this.values[\"value\"].workingValue;\r\n\t\t}\r\n\r\n\t\telse {\r\n\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\tlet childValue = child.value;\r\n\t\t\t\tif ($type.isNumber(childValue)) {\r\n\t\t\t\t\tvalue += childValue;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t\t/*\r\n\t\tlet value = this.values[\"value\"].workingValue;\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t\tif (this.children) {\r\n\t\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\t\tif ($type.isNumber(child.value)) {\r\n\t\t\t\t\t\tvalue += child.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn value;*/\r\n\t}\r\n\r\n\tpublic get percent(): number {\r\n\t\tif (this.parent) {\r\n\t\t\treturn this.value / this.parent.value * 100;\r\n\t\t}\r\n\t\treturn 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value  X\r\n\t */\r\n\tpublic set x0(value: number) {\r\n\t\tthis.setValue(\"x0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x0(): number {\r\n\t\treturn this.values.x0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value  X\r\n\t */\r\n\tpublic set x1(value: number) {\r\n\t\tthis.setValue(\"x1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return X\r\n\t */\r\n\tpublic get x1(): number {\r\n\t\treturn this.values.x1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value  Y\r\n\t */\r\n\tpublic set y0(value: number) {\r\n\t\tthis.setValue(\"y0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y0(): number {\r\n\t\treturn this.values.y0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param value  Y\r\n\t */\r\n\tpublic set y1(value: number) {\r\n\t\tthis.setValue(\"y1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y\r\n\t */\r\n\tpublic get y1(): number {\r\n\t\treturn this.values.y1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's name.\r\n\t *\r\n\t * @param name  Name\r\n\t */\r\n\tpublic set name(name: string) {\r\n\t\tthis.setProperty(\"name\", name);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties.name;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of item's sub-children.\r\n\t *\r\n\t * Having children means that the TreeMap chat will automatically be\r\n\t * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n\t * display its children.\r\n\t *\r\n\t * Treemap can have any level of nesting.\r\n\t *\r\n\t * @param children  Item's children\r\n\t */\r\n\tpublic set children(children: OrderedListTemplate<TreeMapDataItem>) {\r\n\t\tthis.setProperty(\"children\", children);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Item's children\r\n\t */\r\n\tpublic get children(): OrderedListTemplate<TreeMapDataItem> {\r\n\t\treturn this.properties.children;\r\n\t}\r\n\r\n\t/**\r\n\t * Depth level in the treemap hierarchy.\r\n\t *\r\n\t * The top-level item will have level set at 0. Its children will have\r\n\t * level 1, and so on.\r\n\t *\r\n\t * @readonly\r\n\t * @return Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\tif (!this.parent) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.parent.level + 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's color.\r\n\t *\r\n\t * If not set, will use parent's color, or, if that is not set either,\r\n\t * automatically assigned color from chart's color set. (`chart.colors`)\r\n\t *\r\n\t * @param value  Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * For the legend to work properly\r\n\t */\r\n\tpublic get fill(): Color {\r\n\t\treturn this.color;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\tlet color = this.properties.color;\r\n\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.parent) {\r\n\t\t\t\tcolor = this.parent.color;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tcolor = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn color;\r\n\t}\r\n\r\n\t/**\r\n\t * Series of children data items\r\n\t * @todo: proper descrition\r\n\t */\r\n\tpublic set series(series: TreeMapSeries) {\r\n\t\tif (series != this._series) {\r\n\t\t\tif (this._series) {\r\n\t\t\t\tthis.component.series.removeValue(this._series);\r\n\t\t\t\tthis._series.dispose();\r\n\t\t\t}\r\n\t\t\tthis._series = series;\r\n\t\t\tthis._disposers.push(series);\r\n\t\t}\r\n\t}\r\n\r\n\tpublic get series(): TreeMapSeries {\r\n\t\treturn this._series;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration  Animation duration (ms)\r\n\t * @param delay     Delay animation (ms)\r\n\t * @param toValue   A value to set to `fields` when hiding\r\n\t * @param fields    A list of data fields to set value to `toValue`\r\n\t */\r\n\tpublic hide(duration?: number, delay?: number, toValue?: number, fields?: string[]): $type.Optional<Animation> {\r\n\t\tthis.setWorkingValue(\"value\", 0);\r\n\r\n\t\tif (this.children) {\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tchild.hide(duration, delay, toValue, fields);\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tlet seriesDataItem = this.seriesDataItem;\r\n\t\tif(seriesDataItem){\r\n\t\t\tseriesDataItem.bullets.each((key, value)=>{\r\n\t\t\t\tvalue.hide();\r\n\t\t\t\tvalue.preventShow = true;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn super.hide(duration, delay, toValue, fields);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows the Data Item and related visual elements.\r\n\t *\r\n\t * @param duration  Animation duration (ms)\r\n\t * @param delay     Delay animation (ms)\r\n\t * @param fields    A list of fields to set values of\r\n\t */\r\n\tpublic show(duration?: number, delay?: number, fields?: string[]): $type.Optional<Animation> {\r\n\t\tthis.setWorkingValue(\"value\", this.values.value.value);\r\n\t\tif (this.children) {\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tchild.show(duration, delay, fields);\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tlet seriesDataItem = this.seriesDataItem;\r\n\t\tif(seriesDataItem){\r\n\t\t\tseriesDataItem.bullets.each((key, value)=>{\r\n\t\t\t\tvalue.preventShow = false;\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\treturn super.show(duration, delay, fields);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMap]].\r\n */\r\nexport interface ITreeMapDataFields extends IXYChartDataFields {\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's numeric value.\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's sub-items.\r\n\t */\r\n\tchildren?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's name.\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's color.\r\n\t *\r\n\t * If not set, a new color will be automatically assigned to each item as\r\n\t * defined by theme.\r\n\t */\r\n\tcolor?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMap]].\r\n */\r\nexport interface ITreeMapProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Maximum number of levels the chart will display initially.\r\n\t *\r\n\t * @default 2\r\n\t */\r\n\tmaxLevels?: number;\r\n\r\n\t/**\r\n\t * Current drill-down level the treemap is at.\r\n\t */\r\n\tcurrentLevel?: number;\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * @default \"descending\"\r\n\t */\r\n\tsorting?: \"none\" | \"ascending\" | \"descending\";\r\n\r\n\t/**\r\n\t * If set to `true`, columns of parent nodes will be hidden when user\r\n\t * drills-down into deeper levels.\r\n\t * \r\n\t * @sice 4.7.4\r\n\t * @default false\r\n\t */\r\n\thideParentColumns?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[TreeMap]].\r\n */\r\nexport interface ITreeMapEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMap]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapAdapters extends IXYChartAdapters, ITreeMapProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapEvents} for a list of available Events\r\n * @see {@link ITreeMapAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/} for documentation\r\n */\r\nexport class TreeMap extends XYChart {\r\n\r\n\t/**\r\n\t * Defines a type of the data item used for this chart.\r\n\t */\r\n\tpublic _dataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ITreeMapDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ITreeMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ITreeMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ITreeMapEvents;\r\n\r\n\t/**\r\n\t * A horizontal value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic xAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * A vertical value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t */\r\n\tpublic yAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * An algorithm used to divide area into squares based on their value.\r\n\t *\r\n\t * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t *   // ...\r\n\t *   \"layoutAlgorithm\": \"sliceDice\",\r\n\t *   // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n\t * @default squarify\r\n\t */\r\n\tpublic layoutAlgorithm: (parent: TreeMapDataItem) => void = this.squarify;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t */\r\n\tpublic _seriesType: TreeMapSeries;\r\n\r\n\t/**\r\n\t * [_homeDataItem description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _homeDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * [_tempSeries description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _tempSeries: TreeMapSeries[];\r\n\r\n\t/**\r\n\t * A text dispalyed on the home button in breadcurmb nav control.\r\n\t */\r\n\tprotected _homeText: string;\r\n\r\n\t/**\r\n\t * A set of colors to be applied automatically to each new chart item, if\r\n\t * not explicitly set.\r\n\t */\r\n\tpublic colors: ColorSet;\r\n\r\n\t/**\r\n\t * Holds series object for each TreeMap level.\r\n\t *\r\n\t * \"0\" is the top-level series.\r\n\t * \"1\" is the second level.\r\n\t * Etc.\r\n\t *\r\n\t * @todo Description\r\n\t * @param Templates for each level\r\n\t */\r\n\tpublic seriesTemplates: DictionaryTemplate<string, this[\"_seriesType\"]>;\r\n\r\n\t/**\r\n\t * Is the chart zoomable?\r\n\t *\r\n\t * If the chart is `zoomable`, and items have sub-items, the chart will\r\n\t * drill-down to sub-items when click on their parent item.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tpublic zoomable: boolean = true;\r\n\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tprotected _navigationBar: NavigationBar;\r\n\r\n\t/**\r\n\t * Currently selected data item.\r\n\t * @readonly\r\n\t */\r\n\tpublic currentlyZoomed: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMap\";\r\n\r\n\t\tthis._usesData = true;\r\n\r\n\t\tthis.maxLevels = 2;\r\n\t\tthis.currentLevel = 0;\r\n\t\tthis.hideParentColumns = false;\r\n\r\n\t\tthis.colors = new ColorSet();\r\n\t\tthis.sorting = \"descending\";\r\n\r\n\t\t// create two value axes for the chart\r\n\t\tlet xAxis = this.xAxes.push(new ValueAxis<any>());\r\n\t\txAxis.title.disabled = true;\r\n\t\txAxis.strictMinMax = true;\r\n\r\n\t\tlet xRenderer = xAxis.renderer;\r\n\t\txRenderer.inside = true;\r\n\t\txRenderer.labels.template.disabled = true;\r\n\t\txRenderer.ticks.template.disabled = true;\r\n\t\txRenderer.grid.template.disabled = true;\r\n\t\txRenderer.axisFills.template.disabled = true;\r\n\t\txRenderer.minGridDistance = 100;\r\n\t\txRenderer.line.disabled = true;\r\n\t\txRenderer.baseGrid.disabled = true;\r\n\t\t//xRenderer.inversed = true;\r\n\r\n\t\tlet yAxis = this.yAxes.push(new ValueAxis<any>());\r\n\t\tyAxis.title.disabled = true;\r\n\t\tyAxis.strictMinMax = true;\r\n\r\n\t\tlet yRenderer = yAxis.renderer;\r\n\t\tyRenderer.inside = true;\r\n\t\tyRenderer.labels.template.disabled = true;\r\n\t\tyRenderer.ticks.template.disabled = true;\r\n\t\tyRenderer.grid.template.disabled = true;\r\n\t\tyRenderer.axisFills.template.disabled = true;\r\n\t\tyRenderer.minGridDistance = 100;\r\n\t\tyRenderer.line.disabled = true;\r\n\t\tyRenderer.baseGrid.disabled = true;\r\n\t\tyRenderer.inversed = true;\r\n\r\n\t\t// shortcuts\r\n\t\tthis.xAxis = xAxis;\r\n\t\tthis.yAxis = yAxis;\r\n\r\n\t\tconst template = new TreeMapSeries();\r\n\t\tthis.seriesTemplates = new DictionaryTemplate<string, this[\"_seriesType\"]>(template);\r\n\t\ttemplate.virtualParent = this;\r\n\t\tthis._disposers.push(new DictionaryDisposer(this.seriesTemplates));\r\n\t\tthis._disposers.push(template);\r\n\r\n\t\tthis.zoomOutButton.events.on(\"hit\", () => {\r\n\t\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis.seriesTemplates.events.on(\"insertKey\", (event) => {\r\n\t\t\tevent.newValue.isTemplate = true;\r\n\t\t}, undefined, false)\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t */\r\n\tpublic set navigationBar(navigationBar: NavigationBar) {\r\n\t\tif (this._navigationBar != navigationBar) {\r\n\t\t\tthis._navigationBar = navigationBar;\r\n\t\t\tnavigationBar.parent = this;\r\n\t\t\tnavigationBar.toBack();\r\n\t\t\tnavigationBar.links.template.events.on(\"hit\", (event) => {\r\n\t\t\t\tlet dataItem = <TreeMapDataItem>event.target.dataItem.dataContext;\r\n\t\t\t\tif (!dataItem.isDisposed()) {\r\n\t\t\t\t\tthis.zoomToChartDataItem(dataItem);\r\n\t\t\t\t\tthis.createTreeSeries(dataItem);\r\n\t\t\t\t}\r\n\t\t\t}, undefined, true);\r\n\r\n\t\t\tthis._disposers.push(navigationBar);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns navigationBar if it is added to a chart\r\n\t */\r\n\tpublic get navigationBar(): NavigationBar {\r\n\t\treturn this._navigationBar;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * (Re)validates chart's data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\tthis.series.clear();\r\n\t\tthis._tempSeries = [];\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.dispose();\r\n\t\t}\r\n\r\n\t\tlet homeDataItem = this.dataItems.template.clone(); // cant' use createDataItem here!\r\n\r\n\t\tthis._homeDataItem = homeDataItem;\r\n\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tdataItem.parent = homeDataItem;\r\n\t\t});\r\n\r\n\t\thomeDataItem.children = this.dataItems;\r\n\r\n\t\thomeDataItem.x0 = 0;\r\n\t\thomeDataItem.y0 = 0;\r\n\t\thomeDataItem.name = this._homeText;\r\n\r\n\t\tlet maxX = 1000;\r\n\t\tlet maxY = Math.round((maxX * this.pixelHeight / this.pixelWidth) / 10) * 10 || 1000;\r\n\r\n\t\thomeDataItem.x1 = maxX;\r\n\t\thomeDataItem.y1 = maxY;\r\n\r\n\t\tthis.xAxis.min = 0;\r\n\t\tthis.xAxis.max = maxX;\r\n\t\tthis.xAxis.getMinMax();\r\n\r\n\t\tthis.yAxis.min = 0;\r\n\t\tthis.yAxis.max = maxY;\r\n\t\tthis.yAxis.getMinMax();\r\n\r\n\t\tthis.layoutItems(homeDataItem);\r\n\r\n\t\tthis.createTreeSeries(homeDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Layouts and sizes all items according to their value and\r\n\t * `layoutAlgorithm`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent  Parent data item\r\n\t */\r\n\tpublic layoutItems(parent: TreeMapDataItem, sorting?: \"none\" | \"ascending\" | \"descending\"): void {\r\n\t\tif (parent) {\r\n\t\t\tlet children = parent.children;\r\n\r\n\t\t\tif (!sorting) {\r\n\t\t\t\tsorting = this.sorting;\r\n\t\t\t}\r\n\r\n\t\t\tif (sorting == \"ascending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn a.value - b.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (sorting == \"descending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn b.value - a.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._updateDataItemIndexes(0);\r\n\r\n\t\t\tthis.layoutAlgorithm(parent);\r\n\r\n\t\t\tfor (let i = 0, len = children.length; i < len; i++) {\r\n\r\n\t\t\t\tlet node = children.getIndex(i);\r\n\r\n\t\t\t\tif (node.children) {\r\n\t\t\t\t\tthis.layoutItems(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates and returns a new treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem  Data item to create series out of\r\n\t */\r\n\tprotected createTreeSeries(dataItem: TreeMapDataItem) {\r\n\t\tthis._tempSeries = [];\r\n\r\n\t\tlet navigationData = [dataItem];\r\n\r\n\t\t// create parent series and navigation data\r\n\t\tlet parentDataItem = dataItem.parent;\r\n\t\twhile (parentDataItem != undefined) {\r\n\t\t\tthis.initSeries(parentDataItem);\r\n\t\t\tnavigationData.push(parentDataItem);\r\n\t\t\tparentDataItem = parentDataItem.parent;\r\n\t\t}\r\n\r\n\t\tnavigationData.reverse();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.data = navigationData;\r\n\t\t}\r\n\r\n\t\t// create series and children series\r\n\t\tthis.createTreeSeriesReal(dataItem);\r\n\r\n\t\t// add those which are not in the list\r\n\t\t$array.each(this._tempSeries, (series) => {\r\n\t\t\tif (this.series.indexOf(series) == -1) {\r\n\t\t\t\tthis.series.push(series);\r\n\t\t\t}\r\n\t\t\tseries.zIndex = series.level;\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * [createTreeSeriesReal description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected createTreeSeriesReal(dataItem: TreeMapDataItem) {\r\n\t\tif (dataItem.children) {\r\n\t\t\tlet level = dataItem.level;\r\n\r\n\t\t\tif (level < this.currentLevel + this.maxLevels) {\r\n\r\n\t\t\t\tthis.initSeries(dataItem);\r\n\r\n\t\t\t\tfor (let i = 0; i < dataItem.children.length; i++) {\r\n\t\t\t\t\tlet child = dataItem.children.getIndex(i);\r\n\t\t\t\t\tif (child.children) {\r\n\t\t\t\t\t\tthis.createTreeSeriesReal(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected setData(value: any[]) {\r\n\t\tthis.currentLevel = 0;\r\n\t\tthis.currentlyZoomed = undefined;\r\n\t\tthis.xAxis.start = 0;\r\n\t\tthis.xAxis.end = 1;\r\n\t\tthis.yAxis.start = 0;\r\n\t\tthis.yAxis.end = 1;\r\n\t\tsuper.setData(value);\r\n\t}\r\n\t/**\r\n\t * @ignore\r\n\t * Overriding, as tree map series are created on the fly all the time\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Initializes the treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem  Chart data item\r\n\t */\r\n\tprotected initSeries(dataItem: TreeMapDataItem) {\r\n\t\tif (!dataItem.series) {\r\n\t\t\tlet series: TreeMapSeries;\r\n\r\n\t\t\tlet template = this.seriesTemplates.getKey(dataItem.level.toString());\r\n\t\t\tif (template) {\r\n\t\t\t\tseries = template.clone();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tseries = this.series.create();\r\n\t\t\t}\r\n\t\t\t// for the legend to get {value}\r\n\t\t\tseries.dataItem.dataContext = dataItem;\r\n\r\n\t\t\tseries.name = dataItem.name;\r\n\t\t\tseries.parentDataItem = dataItem;\r\n\t\t\tdataItem.series = series;\r\n\r\n\t\t\tlet level = dataItem.level;\r\n\t\t\tseries.level = level;\r\n\r\n\t\t\tlet dataContext: any = dataItem.dataContext;\r\n\t\t\tif (dataContext) {\r\n\t\t\t\tseries.config = dataContext.config;\r\n\t\t\t}\r\n\r\n\t\t\tthis.dataUsers.removeValue(series); // series do not use data directly, that's why we remove it\r\n\t\t\tseries.data = dataItem.children.values;\r\n\t\t\tseries.fill = dataItem.color;\r\n\r\n\t\t\tseries.columnsContainer.hide(0);\r\n\t\t\tseries.bulletsContainer.hide(0);\r\n\r\n\t\t\tseries.columns.template.adapter.add(\"fill\", (fill, target) => {\r\n\t\t\t\tlet dataItem = <TreeMapSeriesDataItem>target.dataItem;\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet treeMapDataItem = dataItem.treeMapDataItem;\r\n\t\t\t\t\tif (treeMapDataItem) {\r\n\t\t\t\t\t\ttarget.fill = treeMapDataItem.color;\r\n\t\t\t\t\t\ttarget.adapter.remove(\"fill\"); //@todo: make it possible adapters applied once?\r\n\t\t\t\t\t\treturn treeMapDataItem.color;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.zoomable && (dataItem.level > this.currentLevel || (dataItem.children && dataItem.children.length > 0))) {\r\n\t\t\t\tseries.columns.template.cursorOverStyle = MouseCursorStyle.pointer;\r\n\t\t\t\tif (this.zoomable) {\r\n\t\t\t\t\tseries.columns.template.events.on(\"hit\", (event) => {\r\n\t\t\t\t\t\tlet seriesDataItem = <TreeMapSeriesDataItem>event.target.dataItem;\r\n\r\n\t\t\t\t\t\tif (dataItem.level > this.currentLevel) {\r\n\t\t\t\t\t\t\tthis.zoomToChartDataItem(seriesDataItem.treeMapDataItem.parent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthis.zoomToSeriesDataItem(seriesDataItem);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}, this, undefined);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._tempSeries.push(dataItem.series);\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles bullets so that labels that belong to current drill level are\r\n\t * shown.\r\n\t *\r\n\t * @param duration  Animation duration (ms)\r\n\t */\r\n\tprotected toggleBullets(duration?: number): void {\r\n\t\t// hide all series which are not in tempSeries\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (this._tempSeries.indexOf(series) == - 1) {\r\n\t\t\t\t//series.hideReal(duration);\r\n\t\t\t\tseries.columnsContainer.hide();\r\n\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t//series.showReal(duration);\r\n\t\t\t\tseries.columnsContainer.show();\r\n\t\t\t\tseries.bulletsContainer.show(duration);\r\n\r\n\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tdataItem.bullets.each((key, bullet) => {\r\n\t\t\t\t\t\tbullet.show();\r\n\t\t\t\t\t})\r\n\t\t\t\t})\r\n\r\n\t\t\t\tif (series.level < this.currentLevel) {\r\n\t\t\t\t\tif (this.hideParentColumns) {\r\n\t\t\t\t\t\tseries.columnsContainer.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t\t}\r\n\t\t\t\telse if (series.level == this.currentLevel) {\r\n\t\t\t\t\tif (this.maxLevels > 1) {\r\n\t\t\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\t\t\tif (dataItem.treeMapDataItem.children) {\r\n\t\t\t\t\t\t\t\tdataItem.bullets.each((key, bullet) => {\r\n\t\t\t\t\t\t\t\t\tbullet.hide();\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item in series.\r\n\t *\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic zoomToSeriesDataItem(dataItem: TreeMapSeriesDataItem): void {\r\n\t\tthis.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item. If dataItem is not specified, the chart will zoom-out.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic zoomToChartDataItem(dataItem?: TreeMapDataItem): void {\r\n\t\tif(!dataItem){\r\n\t\t\tdataItem = this._homeDataItem;\r\n\t\t}\r\n\r\n\t\tlet zoomOutButton = this.zoomOutButton;\r\n\t\t// this is needed because if there is only one fist level, it wont' be shown\r\n\t\tif (zoomOutButton) {\r\n\t\t\tif (dataItem != this._homeDataItem) {\r\n\t\t\t\tzoomOutButton.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tzoomOutButton.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (dataItem && dataItem.children) {\r\n\t\t\tthis.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n\t\t\tthis.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n\r\n\t\t\tthis.currentLevel = dataItem.level;\r\n\t\t\tthis.currentlyZoomed = dataItem;\r\n\r\n\t\t\tthis.createTreeSeries(dataItem);\r\n\r\n\t\t\tlet rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n\r\n\t\t\tif (rangeChangeAnimation && !rangeChangeAnimation.isDisposed() && !rangeChangeAnimation.isFinished()) {\r\n\t\t\t\tthis._dataDisposers.push(rangeChangeAnimation);\r\n\r\n\t\t\t\trangeChangeAnimation.events.once(\"animationended\", () => {\r\n\t\t\t\t\tthis.toggleBullets();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.toggleBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"TreeMap chart\");\r\n\t\t}\r\n\t\t//this.homeText = this.language.translate(\"Home\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Maximum number of levels the chart will display initially.\r\n\t *\r\n\t * @default 2\r\n\t * @param value  Maximum drill-down level\r\n\t */\r\n\tpublic set maxLevels(value: number) {\r\n\t\tthis.setPropertyValue(\"maxLevels\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Maximum drill-down level\r\n\t */\r\n\tpublic get maxLevels(): number {\r\n\t\treturn this.getPropertyValue(\"maxLevels\");\r\n\t}\r\n\r\n\t/**\r\n\t * Current drill-down level the chart is at.\r\n\t *\r\n\t * @param value  Current level\r\n\t */\r\n\tpublic set currentLevel(value: number) {\r\n\t\tthis.setPropertyValue(\"currentLevel\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Current level\r\n\t */\r\n\tpublic get currentLevel(): number {\r\n\t\treturn this.getPropertyValue(\"currentLevel\");\r\n\t}\r\n\r\n\t/**\r\n\t * If set to `true`, columns of parent nodes will be hidden when user\r\n\t * drills-down into deeper levels.\r\n\t * \r\n\t * @sice 4.7.4\r\n\t * @default false\r\n\t * @param  value  Hide?\r\n\t */\r\n\tpublic set hideParentColumns(value: boolean) {\r\n\t\tthis.setPropertyValue(\"hideParentColumns\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Hide?\r\n\t */\r\n\tpublic get hideParentColumns(): boolean {\r\n\t\treturn this.getPropertyValue(\"hideParentColumns\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * Available options: \"none\", \"ascending\", and \"descending\" (default).\r\n\t *\r\n\t * @default \"descending\"\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set sorting(value: \"none\" | \"ascending\" | \"descending\") {\r\n\t\tthis.setPropertyValue(\"sorting\", value, true);\r\n\t}\r\n\r\n\tpublic get sorting(): \"none\" | \"ascending\" | \"descending\" {\r\n\t\treturn this.getPropertyValue(\"sorting\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new series of the suitable type.\r\n\t *\r\n\t * @return new series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new TreeMapSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A text displayed on the \"home\" button which is used to go back to level 0\r\n\t * after drill into sub-items.\r\n\t *\r\n\t * @param value  Home text\r\n\t */\r\n\tpublic set homeText(value: string) {\r\n\t\tthis._homeText = value;\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.name = this._homeText;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Home text\r\n\t */\r\n\tpublic get homeText(): string {\r\n\t\treturn this._homeText;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config  Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Instantiate layout algorithm\r\n\t\t\tif ($type.hasValue(config[\"layoutAlgorithm\"]) && $type.isString(config[\"layoutAlgorithm\"])) {\r\n\t\t\t\tswitch (config[\"layoutAlgorithm\"]) {\r\n\t\t\t\t\tcase \"squarify\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.squarify;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"binaryTree\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.binaryTree;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"slice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.slice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"dice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.dice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"sliceDice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.sliceDice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdelete config[\"layoutAlgorithm\"];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Set type for navigation bar\r\n\t\t\tif ($type.hasValue(config.navigationBar) && !$type.hasValue(config.navigationBar.type)) {\r\n\t\t\t\tconfig.navigationBar.type = \"NavigationBar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Measures the size of container and informs its children of how much size\r\n\t * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n\t * properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.layoutItems(this.currentlyZoomed);\r\n\t}\r\n\r\n\t/**\r\n\t * Validates (processes) data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\t\tsuper.validateDataItems();\r\n\t\tthis.layoutItems(this._homeDataItem);\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.validateRawData();\r\n\t\t});\r\n\r\n\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * TREEMAP LAYOUT FUNCTIONS\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * The functions below are from D3.js library (https://d3js.org/)\r\n\t *\r\n\t * --------------------------------------------------------------------------\r\n\t * Copyright 2017 Mike Bostock\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t *\r\n\t * 1. Redistributions of source code must retain the above copyright notice,\r\n\t *    this list of conditions and the following disclaimer.\r\n\t *\r\n\t * 2. Redistributions in binary form must reproduce the above copyright\r\n\t *    notice,this list of conditions and the following disclaimer in the\r\n\t *    documentation and/or other materials provided with the distribution.\r\n\t *\r\n\t * 3. Neither the name of the copyright holder nor the names of its\r\n\t *    contributors may be used to endorse or promote products derived from\r\n\t *    this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n\t * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n\t * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n\t * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n\t * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n\t * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n\t * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n\t * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n\t * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n\t * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n\t * POSSIBILITY OF SUCH DAMAGE.\r\n\t * --------------------------------------------------------------------------\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: binaryTree.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent  Data item\r\n\t */\r\n\tpublic binaryTree(parent: TreeMapDataItem): void {\r\n\t\tlet nodes = parent.children,\r\n\t\t\ti, n = nodes.length,\r\n\t\t\tsum, sums = new Array(n + 1);\r\n\r\n\t\tfor (sums[0] = sum = i = 0; i < n; ++i) {\r\n\t\t\tsums[i + 1] = sum += nodes.getIndex(i).value;\r\n\t\t}\r\n\r\n\t\tpartition(0, n, parent.value, parent.x0, parent.y0, parent.x1, parent.y1);\r\n\r\n\t\tfunction partition(i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) {\r\n\t\t\tif (i >= j - 1) {\r\n\t\t\t\tlet node = nodes.getIndex(i);\r\n\t\t\t\tnode.x0 = x0;\r\n\t\t\t\tnode.y0 = y0;\r\n\t\t\t\tnode.x1 = x1;\r\n\t\t\t\tnode.y1 = y1;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet valueOffset = sums[i],\r\n\t\t\t\tvalueTarget = (value / 2) + valueOffset,\r\n\t\t\t\tk = i + 1,\r\n\t\t\t\thi = j - 1;\r\n\r\n\t\t\twhile (k < hi) {\r\n\t\t\t\tlet mid = k + hi >>> 1;\r\n\t\t\t\tif (sums[mid] < valueTarget) {\r\n\t\t\t\t\tk = mid + 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\thi = mid;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) {\r\n\t\t\t\t--k;\r\n\t\t\t}\r\n\r\n\t\t\tlet valueLeft = sums[k] - valueOffset,\r\n\t\t\t\tvalueRight = value - valueLeft;\r\n\r\n\t\t\tif ((x1 - x0) > (y1 - y0)) {\r\n\t\t\t\tlet xk = (x0 * valueRight + x1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, xk, y1);\r\n\t\t\t\tpartition(k, j, valueRight, xk, y0, x1, y1);\r\n\t\t\t} else {\r\n\t\t\t\tlet yk = (y0 * valueRight + y1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, x1, yk);\r\n\t\t\t\tpartition(k, j, valueRight, x0, yk, x1, y1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent  Data item\r\n\t */\r\n\tpublic slice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children;\r\n\t\tlet node;\r\n\t\tlet i = -1;\r\n\t\tlet n = nodes.length;\r\n\t\tlet k = parent.value && (y1 - y0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i);\r\n\t\t\tnode.x0 = x0;\r\n\t\t\tnode.x1 = x1;\r\n\t\t\tnode.y0 = y0;\r\n\t\t\ty0 += node.value * k;\r\n\t\t\tnode.y1 = y0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: dice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent  Data item\r\n\t */\r\n\tpublic dice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (x1 - x0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i);\r\n\t\t\tnode.y0 = y0;\r\n\t\t\tnode.y1 = y1;\r\n\t\t\tnode.x0 = x0;\r\n\t\t\tx0 += node.value * k;\r\n\t\t\tnode.x1 = x0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slideDice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent  Data item\r\n\t */\r\n\tpublic sliceDice(parent: TreeMapDataItem): void {\r\n\t\tif (parent.level & 1) {\r\n\t\t\tthis.slice(parent);\r\n\t\t} else {\r\n\t\t\tthis.dice(parent);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: squarify.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param parent  Data item\r\n\t */\r\n\tpublic squarify(parent: TreeMapDataItem): void {\r\n\t\tlet ratio = (1 + Math.sqrt(5)) / 2;\r\n\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children;\r\n\t\tlet nodeValue;\r\n\t\tlet i0 = 0;\r\n\t\tlet i1 = 0;\r\n\t\tlet n = nodes.length;\r\n\t\tlet dx;\r\n\t\tlet dy;\r\n\t\tlet value = parent.value;\r\n\t\tlet sumValue;\r\n\t\tlet minValue;\r\n\t\tlet maxValue;\r\n\t\tlet newRatio;\r\n\t\tlet minRatio;\r\n\t\tlet alpha;\r\n\t\tlet beta;\r\n\r\n\t\twhile (i0 < n) {\r\n\t\t\tdx = x1 - x0;\r\n\t\t\tdy = y1 - y0;\r\n\r\n\t\t\t// Find the next non-empty node.\r\n\t\t\tdo {\r\n\t\t\t\tsumValue = nodes.getIndex(i1++).value;\r\n\t\t\t} while (!sumValue && i1 < n);\r\n\r\n\t\t\tminValue = maxValue = sumValue;\r\n\t\t\talpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\tminRatio = Math.max(maxValue / beta, beta / minValue);\r\n\r\n\t\t\t// Keep adding nodes while the aspect ratio maintains or improves.\r\n\t\t\tfor (; i1 < n; ++i1) {\r\n\t\t\t\tsumValue += nodeValue = nodes.getIndex(i1).value;\r\n\t\t\t\tif (nodeValue < minValue) {\r\n\t\t\t\t\tminValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tif (nodeValue > maxValue) {\r\n\t\t\t\t\tmaxValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\t\tnewRatio = Math.max(maxValue / beta, beta / minValue);\r\n\t\t\t\tif (newRatio > minRatio) {\r\n\t\t\t\t\tsumValue -= nodeValue; break;\r\n\t\t\t\t}\r\n\t\t\t\tminRatio = newRatio;\r\n\t\t\t}\r\n\r\n\t\t\t// Position and record the row orientation.\r\n\t\t\tlet row = this.dataItems.template.clone();\r\n\t\t\trow.value = sumValue;\r\n\t\t\trow.dice = dx < dy;\r\n\t\t\trow.children = nodes.slice(i0, i1);\r\n\t\t\trow.x0 = x0;\r\n\t\t\trow.y0 = y0;\r\n\t\t\trow.x1 = x1;\r\n\t\t\trow.y1 = y1;\r\n\r\n\t\t\tif (row.dice) {\r\n\t\t\t\trow.y1 = value ? (y0 += (dy * sumValue) / value) : y1;\r\n\t\t\t\tthis.dice(row);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\trow.x1 = value ? (x0 += (dx * sumValue) / value) : x1;\r\n\t\t\t\tthis.slice(row);\r\n\t\t\t}\r\n\t\t\tvalue -= sumValue;\r\n\t\t\ti0 = i1;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleSeriesAdded2() {\r\n\t\t// void\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleDataItemValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (name == \"value\") {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (name == \"value\") {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getLegendLevel(dataItem: TreeMapDataItem): TreeMapDataItem {\r\n\t\tif (!dataItem) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!dataItem.children) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (dataItem.children.length > 1) {\r\n\t\t\treturn dataItem;\r\n\t\t}\r\n\t\telse if (dataItem.children.length == 1) {\r\n\t\t\treturn this.getLegendLevel(dataItem.children.getIndex(0));\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn dataItem;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A data item associated with top node.\r\n\t * \r\n\t * @since 4.8.2\r\n\t */\r\n\tpublic get homeDataItem():TreeMapDataItem {\r\n\t\treturn this._homeDataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\r\n\t\t\tlet legendParent = this.getLegendLevel(this._homeDataItem);\r\n\t\t\tif (legendParent) {\r\n\t\t\t\tlet legendData: Array<this[\"_dataItem\"]> = [];\r\n\r\n\t\t\t\tlegendParent.children.each((dataItem) => {\r\n\t\t\t\t\t//if (!dataItem.hiddenInLegend) {\r\n\t\t\t\t\tlegendData.push(dataItem);\r\n\t\t\t\t\t//}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tlegend.data = legendData;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\r\n\t\tsuper.disposeData();\r\n\r\n\t\tthis._homeDataItem = undefined;\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxis.disposeData();\r\n\t\tthis.yAxis.disposeData();\r\n\t}\r\n\r\n\t/**\r\n\t * Since this chart uses hierarchical data, we need to remove childrent\r\n\t * dataField from export of non-hierarchical formats such as CSV and XSLX.\r\n\t *\r\n\t * @return Export\r\n\t */\r\n\tprotected getExporting(): Export {\r\n\t\tconst exporting = super.getExporting();\r\n\t\texporting.adapter.add(\"formatDataFields\", (info) => {\r\n\t\t\tif (info.format == \"csv\" || info.format == \"xlsx\") {\r\n\t\t\t\tif ($type.hasValue(this.dataFields.children)) {\r\n\t\t\t\t\tdelete info.dataFields[this.dataFields.children];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn info;\r\n\t\t})\r\n\t\treturn exporting;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMap\"] = TreeMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/TreeMap.ts","/**\r\n * Module, defining Axis Renderer for horizontal 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererX, IAxisRendererXProperties, IAxisRendererXAdapters, IAxisRendererXEvents } from \"../axes/AxisRendererX\";\r\nimport { Sprite, ISpriteEvents, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DProperties extends IAxisRendererXProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DEvents extends IAxisRendererXEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererX3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererX3DAdapters extends IAxisRendererXAdapters, IAxisRendererX3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for horizontal 3D axis.\r\n *\r\n * @see {@link IAxisRendererX3DEvents} for a list of available events\r\n * @see {@link IAxisRendererX3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererX3D extends AxisRendererX {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t */\r\n\tpublic _properties!: IAxisRendererX3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IAxisRendererX3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererX3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer<XYChart3D>();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererX3D\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid         Grid element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D || 0;\r\n\t\t\tlet dy: number = this.chart.dy3D || 0;\r\n\r\n\t\t\tlet h: number = this.getHeight();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement() {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet h = this.getHeight();\r\n\t\tlet dx = this.chart.dx3D || 0;\r\n\t\tlet dy = this.chart.dy3D || 0;\r\n\t\tthis.baseGrid.path =  $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: h });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent<Sprite, ISpriteEvents>[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererX3D\"] = AxisRendererX3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","/**\r\n * Module, defining Axis Renderer for vertical 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"../axes/AxisRendererY\";\r\nimport { Sprite, ISpriteEvents, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DProperties extends IAxisRendererYProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererY3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererY3DAdapters extends IAxisRendererYAdapters, IAxisRendererY3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for vertical 3D axis.\r\n *\r\n * @see {@link IAxisRendererY3DEvents} for a list of available events\r\n * @see {@link IAxisRendererY3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererY3D extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IAxisRendererY3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IAxisRendererY3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IAxisRendererY3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer<XYChart3D>();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererY3D\";\r\n\t\tthis._disposers.push(this._chart);\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param grid         Grid element\r\n\t * @param position     Starting position\r\n\t * @param endPosition  End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number): void {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D || 0;\r\n\t\t\tlet dy: number = this.chart.dy3D || 0;\r\n\r\n\t\t\tlet w: number = this.getWidth();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet dx: number = this.chart.dx3D || 0;\r\n\t\tlet dy: number = this.chart.dy3D || 0;\r\n\r\n\t\tlet w: number = this.getWidth();\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: 0, y: 0 })\r\n\t\t\t+ $path.lineTo({ x: w, y: 0 })\r\n\t\t\t+ $path.lineTo({ x: w + dx, y: dy });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value  Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent<Sprite, ISpriteEvents>[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","/**\r\n * Module that defines everything related to building 3D Columns.\r\n * It is a container which has column3D element which is a Rectangle3D.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Rectangle3D } from \"../../core/elements/3d/Rectangle3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { RadialGradient } from \"../../core/rendering/fills/RadialGradient\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\nimport { Pattern } from \"../../core/rendering/fills/Pattern\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Column3D]].\r\n */\r\nexport interface IColumn3DProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[Column3D]].\r\n */\r\nexport interface IColumn3DEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[Column3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumn3DAdapters extends IColumnAdapters, IColumn3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates Column3Ds.\r\n *\r\n * @see {@link IColumn3DEvents} for a list of available events\r\n * @see {@link IColumn3DAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class Column3D extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumn3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumn3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumn3DEvents;\r\n\r\n\r\n\t/**\r\n\t * column3D element\r\n\t */\r\n\tpublic column3D: Rectangle3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"Column3D\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tthis.column3D = this.createChild(Rectangle3D);\r\n\t\tthis.column3D.shouldClone = false;\r\n\t\tthis.column3D.strokeOpacity = 0;\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = <any>this.column3D;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\tif (this.column3D) {\r\n\t\t\tthis.column3D.width = this.pixelWidth;\r\n\t\t\tthis.column3D.height = this.pixelHeight;\r\n\t\t\tif(this.column3D.invalid){\r\n\t\t\t\tthis.column3D.validate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Column3D]].\r\n\t *\r\n\t * @param source Source Column3D\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.column3D) {\r\n\t\t\tthis.column3D.copyFrom(source.column3D);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets actual `fill` property on the SVG element, including applicable color\r\n\t * modifiers.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value  Fill\r\n\t */\r\n\tprotected setFill(value: $type.Optional<Color | Pattern | LinearGradient | RadialGradient>): void {\r\n\t\tsuper.setFill(value);\r\n\t\tthis.column.fill = value;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Column3D\"] = Column3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/Column3D.ts","/**\r\n * 3D column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Column3D } from \"../elements/Column3D\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nexport class ColumnSeries3DDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DProperties extends IColumnSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeries3DAdapters extends IColumnSeriesAdapters, IColumnSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IColumnSeries3DEvents} for a list of available Events\r\n * @see {@link IColumnSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries3D extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Type of data item.\r\n\t */\r\n\tpublic _dataItem: ColumnSeries3DDataItem;\r\n\r\n\t/**\r\n\t * Type of column.\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Defines the type for data fields.\r\n\t */\r\n\tpublic _dataFields: IColumnSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IColumnSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IColumnSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IColumnSeries3DEvents;\r\n\r\n\t/**\r\n\t * Specifies how deep in 3d space columns should be drawn.\r\n\t *\r\n\t * Internal use only.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic depthIndex: number;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: XYChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ColumnSeries3D\";\r\n\r\n\t\tthis.columns.template.column3D.applyOnClones = true;\r\n\t\tthis.columns.template.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get columnsContainer(): Container {\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart && chart.columnsContainer && chart.leftAxesContainer.layout != \"vertical\" && chart.rightAxesContainer.layout != \"vertical\" && chart.bottomAxesContainer.layout != \"horizontal\" && chart.topAxesContainer.layout != \"horizontal\") {\r\n\t\t\treturn chart.columnsContainer;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._columnsContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tif (dataItem.column) {\r\n\t\t\tdataItem.column.dx = this.dx;\r\n\t\t\tdataItem.column.dy = this.dy;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tsuper.validateDataElements();\r\n\t\tif (this.chart) {\r\n\t\t\tthis.chart.invalidateLayout();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for 3D bar.\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column3D();\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value  Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t\tlet template = this.columns.template; // todo: Cone is not Rectangle3D, maybe we should do some I3DShape?\r\n\t\ttemplate.column3D.depth = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value  Angle (0-360)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tlet template = this.columns.template;\r\n\t\ttemplate.column3D.angle = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Angle (0-360)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries3D\"] = ColumnSeries3D;\r\nregistry.registeredClasses[\"ColumnSeries3DDataItem\"] = ColumnSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries3D.ts","/**\r\n * Module for building 3D serial charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisRendererX3D } from \"../axes/AxisRendererX3D\";\r\nimport { AxisRendererY3D } from \"../axes/AxisRendererY3D\";\r\nimport { ColumnSeries3D } from \"../series/ColumnSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChart3DDataItem extends XYChartDataItem {\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines available properties for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Depths of the chart in pixels.\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChart3DAdapters extends IXYChartAdapters, IXYChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D XY chart.\r\n *\r\n * @see {@link IXYChart3DEvents} for a list of available Events\r\n * @see {@link IXYChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart3D extends XYChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t */\r\n\tpublic _dataFields: IXYChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IXYChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IXYChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IXYChart3DEvents;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for X axes.\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX3D = AxisRendererX3D;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for Y axes.\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY3D = AxisRendererY3D;\r\n\r\n\t/**\r\n\t * A container to add 3D column elements to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3D\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.depth = 30;\r\n\t\tthis.angle = 30;\r\n\r\n\t\t// Creeate container for columns\r\n\t\tlet columnsContainer = this.seriesContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis.columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columnsContainer.mask = this.createChild(Sprite);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * This is done because for some reason IE doesn't change mask if path of a\r\n\t * mask changes.\r\n\t */\r\n\tprotected updateSeriesMasks(): void {\r\n\t\tsuper.updateSeriesMasks();\r\n\t\tif ($utils.isIE()) {\r\n\t\t\tlet columnsContainer = this.columnsContainer;\r\n\t\t\tlet mask = columnsContainer.mask;\r\n\t\t\tcolumnsContainer.mask = undefined;\r\n\t\t\tcolumnsContainer.mask = mask;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D chart / columns in pixels.\r\n\t *\r\n\t * @param value  Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param value  Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated horizontal 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return Offset (px)\r\n\t */\r\n\tpublic get dx3D(): number {\r\n\t\treturn $math.cos(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated vertical 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return Offset (px)\r\n\t */\r\n\tpublic get dy3D(): number {\r\n\t\treturn -$math.sin(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates layout\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.fixColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the layout (padding and scrollbar positions) to accommodate for\r\n\t * 3D depth and angle.\r\n\t */\r\n\tprotected fixLayout(): void {\r\n\r\n\t\tthis.chartContainer.marginTop = -this.dy3D;\r\n\t\tthis.chartContainer.paddingRight = this.dx3D;\r\n\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.scrollbarX.dy = this.dy3D;\r\n\t\t\tthis.scrollbarX.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.scrollbarY.dy = this.dy3D;\r\n\t\t\tthis.scrollbarY.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tthis.fixColumns();\r\n\r\n\t\tsuper.fixLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates column positions, offset and dimensions based on chart's angle\r\n\t * and depth.\r\n\t */\r\n\tprotected fixColumns(): void {\r\n\t\tlet count: number = 1;\r\n\t\tlet i = 0;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tif (!series.clustered && i > 0) {\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tseries.depthIndex = count - 1;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet s: number = 0;\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tseries.depth = this.depth / (count);\r\n\t\t\t\tseries.angle = this.angle;\r\n\t\t\t\tif (series.columnsContainer == this.columnsContainer) {\r\n\t\t\t\t\tseries.dx = this.depth / (count) * $math.cos(this.angle) * (series.depthIndex);\r\n\t\t\t\t\tseries.dy = -this.depth / (count) * $math.sin(this.angle) * (series.depthIndex);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet inversed = false;\r\n\t\t\t\tif ((series.baseAxis == series.xAxis && series.xAxis.renderer.inversed) || (series.baseAxis == series.yAxis && series.yAxis.renderer.inversed)) {\r\n\t\t\t\t\tinversed = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet i: number = 1;\r\n\t\t\t\tseries.dataItems.each((dataItem) => {\r\n\t\t\t\t\tlet column = dataItem.column;\r\n\t\t\t\t\tif (column) {\r\n\t\t\t\t\t\tif (inversed) {\r\n\t\t\t\t\t\t\tcolumn.zIndex = 1000 * (1000 - i) + s - series.depthIndex * 100;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tcolumn.zIndex = 1000 * i + s - series.depthIndex * 100;\r\n\t\t\t\t\t\t}\t\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti++;\r\n\t\t\t\t});\r\n\t\t\t\tif (inversed) {\r\n\t\t\t\t\ts--;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\ts++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.maskColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param config  Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\tprotected maskColumns() {\r\n\t\tlet w: number = this.plotContainer.pixelWidth;\r\n\t\tlet h: number = this.plotContainer.pixelHeight;\r\n\r\n\t\tlet dx: number = this.dx3D;\r\n\t\tlet dy: number = this.dy3D;\r\n\r\n\t\tlet path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy }) + $path.lineTo({ x: w + dx, y: h + dy }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: 0, y: h }) + $path.closePath();\r\n\r\n\t\tlet columnsContainer = this.columnsContainer;\r\n\t\tif (columnsContainer && columnsContainer.mask) {\r\n\t\t\tcolumnsContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart3D\"] = XYChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart3D.ts","/**\r\n * Module that defines everything related to building Candlesticks.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Candlestick]].\r\n */\r\nexport interface ICandlestickProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[Candlestick]].\r\n */\r\nexport interface ICandlestickEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[Candlestick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickAdapters extends IColumnAdapters, ICandlestickProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates Candlesticks.\r\n *\r\n * @see {@link ICandlestickEvents} for a list of available events\r\n * @see {@link ICandlestickAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class Candlestick extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICandlestickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICandlestickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICandlestickEvents;\r\n\r\n\t/**\r\n\t * Low line element\r\n\t */\r\n\tpublic lowLine: Line;\r\n\r\n\t/**\r\n\t * High line element\r\n\t */\r\n\tpublic highLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"Candlestick\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tsuper.createAssets();\r\n\r\n\t\tthis.lowLine = this.createChild(Line);\r\n\t\tthis.lowLine.shouldClone = false;\r\n\r\n\t\tthis.highLine = this.createChild(Line);\r\n\t\tthis.highLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Candlestick]].\r\n\t *\r\n\t * @param source Source Candlestick\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.lowLine) {\r\n\t\t\tthis.lowLine.copyFrom(source.lowLine);\r\n\t\t}\r\n\t\tif (this.highLine) {\r\n\t\t\tthis.highLine.copyFrom(source.highLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Candlestick\"] = Candlestick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/Candlestick.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents } from \"./ColumnSeries\";\r\nimport { GroupField, IXYSeriesGroupFields } from \"./XYSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Candlestick } from \"../elements/Candlestick\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\nimport { CalculatedValue } from \"../../core/Component\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CandlestickSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CandlestickSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: CandlestickSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.values.lowValueX = {};\r\n\t\tthis.values.lowValueY = {};\r\n\t\tthis.values.highValueX = {};\r\n\t\tthis.values.highValueY = {};\r\n\r\n\t\tthis.className = \"CandlestickSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for horizontal axis.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set lowValueX(value: number) {\r\n\t\tthis.setValue(\"lowValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get lowValueX(): number {\r\n\t\treturn this.values.lowValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for vertical axis.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set lowValueY(value: number) {\r\n\t\tthis.setValue(\"lowValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get lowValueY(): number {\r\n\t\treturn this.values.lowValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for horizontal axis.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set highValueX(value: number) {\r\n\t\tthis.setValue(\"highValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get highValueX(): number {\r\n\t\treturn this.values.highValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for vertical axis.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set highValueY(value: number) {\r\n\t\tthis.setValue(\"highValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get highValueY(): number {\r\n\t\treturn this.values.highValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for horizontal axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set closeValueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get closeValueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for vertical axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param value  Value\r\n\t */\r\n\tpublic set closeValueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Value\r\n\t */\r\n\tpublic get closeValueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for horizontal axis.\r\n\t */\r\n\tlowValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t */\r\n\tlowValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high numeric value for horizontal axis.\r\n\t */\r\n\thighValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t */\r\n\thighValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for horizontal axis.\r\n\t */\r\n\tlowDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for vertical axis.\r\n\t */\r\n\tlowDateY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for horizontal axis.\r\n\t */\r\n\thighDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for vertical axis.\r\n\t */\r\n\thighDateY?: string;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis high value for\r\n\t * the item.\r\n\t */\r\n\thighValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis low value for\r\n\t * the item.\r\n\t */\r\n\tlowValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis low value for\r\n\t * the item.\r\n\t */\r\n\tlowValueYShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis high value for\r\n\t * the item.\r\n\t */\r\n\thighValueYShow?: CalculatedValue;\r\n\r\n}\r\n\r\n/**\r\n * Defines data fields that can be calculated for aggregate values.\r\n * \r\n * @since 4.7.0\r\n */\r\nexport interface ICandlestickSeriesGroupFields extends IXYSeriesGroupFields {\r\n\r\n\t/**\r\n\t * Indicates how to calculate aggregate value for `lowValueX` data field.\r\n\t *\r\n\t * @default \"low\"\r\n\t */\r\n\tlowValueX?: GroupField;\r\n\r\n\t/**\r\n\t * Indicates how to calculate aggregate value for `lowValueY` data field.\r\n\t *\r\n\t * @default \"low\"\r\n\t */\r\n\tlowValueY?: GroupField;\r\n\r\n\t/**\r\n\t * Indicates how to calculate aggregate value for `highValueX` data field.\r\n\t *\r\n\t * @default \"high\"\r\n\t */\r\n\thighValueX?: GroupField;\r\n\r\n\t/**\r\n\t * Indicates how to calculate aggregate value for `highValueY` data field.\r\n\t *\r\n\t * @default \"high\"\r\n\t */\r\n\thighValueY?: GroupField;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CandlestickSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickSeriesAdapters extends IColumnSeriesAdapters, ICandlestickSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link ICandlestickSeriesEvents} for a list of available Events\r\n * @see {@link ICandlestickSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class CandlestickSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines type of the group fields.\r\n\t * \r\n\t * @ignore\r\n\t * @since 4.7.0\r\n\t */\r\n\tpublic _groupFields: ICandlestickSeriesGroupFields;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: CandlestickSeriesDataItem;\r\n\r\n\t/**\r\n\t * Sets type of the column.\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: ICandlestickSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICandlestickSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICandlestickSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICandlestickSeriesEvents;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t */\r\n\tprotected _xLowField: $type.Keyof<this[\"_dataFields\"]>;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t */\r\n\tprotected _yLowField: $type.Keyof<this[\"_dataFields\"]>;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t */\r\n\tprotected _xHighField: $type.Keyof<this[\"_dataFields\"]>;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t */\r\n\tprotected _yHighField: $type.Keyof<this[\"_dataFields\"]>;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CandlestickSeries\";\r\n\r\n\t\tthis.groupFields.lowValueX = \"low\";\r\n\t\tthis.groupFields.lowValueY = \"low\";\r\n\r\n\t\tthis.groupFields.highValueX = \"high\";\r\n\t\tthis.groupFields.highValueY = \"high\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tlet positiveColor = interfaceColors.getFor(\"positive\");\r\n\t\tlet negativeColor = interfaceColors.getFor(\"negative\");\r\n\r\n\t\tthis.dropFromOpenState.properties.fill = negativeColor;\r\n\t\tthis.dropFromOpenState.properties.stroke = negativeColor;\r\n\r\n\t\tthis.riseFromOpenState.properties.fill = positiveColor;\r\n\t\tthis.riseFromOpenState.properties.stroke = positiveColor;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Candlestick Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CandlestickSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tthis.validateCandlestick(dataItem);\r\n\t}\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"dataItem\"]) {\r\n\t\tlet column: Candlestick = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet lowLine = column.lowLine;\r\n\t\t\tlet highLine = column.highLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\r\n\t\t\t\tlowLine.x = x;\r\n\t\t\t\thighLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\tlowLine.y1 = yLow - pixelY;\r\n\t\t\t\thighLine.y1 = yHigh - pixelY;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.y2 = yOpen - pixelY;\r\n\t\t\t\t\thighLine.y2 = yClose - pixelY;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.y2 = yClose - pixelY;\r\n\t\t\t\t\thighLine.y2 = yOpen - pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\tlowLine.y = y;\r\n\t\t\t\thighLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\tlowLine.x1 = xLow - pixelX;\r\n\t\t\t\thighLine.x1 = xHigh - pixelX;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.x2 = xOpen - pixelX;\r\n\t\t\t\t\thighLine.x2 = xClose - pixelX;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.x2 = xClose - pixelX;\r\n\t\t\t\t\thighLine.x2 = xOpen - pixelX;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\t// LOW LINE\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeLowLine = rangeColumn.lowLine;\r\n\t\t\t\t\trangeLowLine.x = lowLine.x;\r\n\t\t\t\t\trangeLowLine.y = lowLine.y;\r\n\t\t\t\t\trangeLowLine.x1 = lowLine.x1;\r\n\t\t\t\t\trangeLowLine.x2 = lowLine.x2;\r\n\t\t\t\t\trangeLowLine.y1 = lowLine.y1;\r\n\t\t\t\t\trangeLowLine.y2 = lowLine.y2;\r\n\r\n\t\t\t\t\t// HIGH LINE\r\n\t\t\t\t\tlet rangehighLine = rangeColumn.highLine;\r\n\t\t\t\t\trangehighLine.x = highLine.x;\r\n\t\t\t\t\trangehighLine.y = highLine.y;\r\n\t\t\t\t\trangehighLine.x1 = highLine.x1;\r\n\t\t\t\t\trangehighLine.x2 = highLine.x2;\r\n\t\t\t\t\trangehighLine.y1 = highLine.y1;\r\n\t\t\t\t\trangehighLine.y2 = highLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get xLowField(): string {\r\n\t\treturn this._xLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get yLowField(): string {\r\n\t\treturn this._yLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get xHighField(): string {\r\n\t\treturn this._xHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Field name\r\n\t */\r\n\tpublic get yHighField(): string {\r\n\t\treturn this._yHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tsuper.defineFields();\r\n\r\n\t\tlet xAxis = this.xAxis;\r\n\t\tlet yAxis = this.yAxis;\r\n\t\tif (xAxis && yAxis) {\r\n\t\t\tif (this.baseAxis == xAxis) {\r\n\t\t\t\tlet yAxisFieldName: string = $utils.capitalize(yAxis.axisFieldName);\r\n\t\t\t\tthis._yLowField = <$type.Keyof<this[\"_dataFields\"]>>(\"low\" + yAxisFieldName + \"Y\");\r\n\t\t\t\tthis._yHighField = <$type.Keyof<this[\"_dataFields\"]>>(\"high\" + yAxisFieldName + \"Y\");\r\n\t\t\t}\r\n\r\n\t\t\tif (this.baseAxis == yAxis) {\r\n\t\t\t\tlet xAxisFieldName: string = $utils.capitalize(xAxis.axisFieldName);\r\n\t\t\t\tthis._xLowField = <$type.Keyof<this[\"_dataFields\"]>>(\"low\" + xAxisFieldName + \"X\");\r\n\t\t\t\tthis._xHighField = <$type.Keyof<this[\"_dataFields\"]>>(\"high\" + xAxisFieldName + \"X\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.addValueField(xAxis, <any>this._xValueFields, <any>this._xLowField);\r\n\t\t\tthis.addValueField(xAxis, <any>this._xValueFields, <any>this._xHighField);\r\n\r\n\t\t\tthis.addValueField(yAxis, <any>this._yValueFields, <any>this._yLowField);\r\n\t\t\tthis.addValueField(yAxis, <any>this._yValueFields, <any>this._yHighField);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker  Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: Candlestick = marker.createChild(Candlestick);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(<any>this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet highLine: Line = column.lowLine;\r\n\t\tlet lowLine: Line = column.highLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLine.y = h / 2;\r\n\t\t\tlowLine.y = h / 2;\r\n\r\n\t\t\thighLine.x2 = w / 3;\r\n\t\t\tlowLine.x2 = w / 3;\r\n\t\t\tlowLine.x = w / 3 * 2;\r\n\t\t\tcolumn.column.x = w / 3;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\t\t\thighLine.x = w / 2;\r\n\t\t\tlowLine.x = w / 2;\r\n\r\n\t\t\thighLine.y2 = h / 3;\r\n\t\t\tlowLine.y2 = h / 3;\r\n\t\t\tlowLine.y = h / 3 * 2;\r\n\t\t\tcolumn.column.y = h / 3;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\t\tcolumn.fill = column.stroke;\r\n\r\n\t\tlet legendDataItem = <LegendDataItem>marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Candlestick();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CandlestickSeries\"] = CandlestickSeries;\r\nregistry.registeredClasses[\"CandlestickSeriesDataItem\"] = CandlestickSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CandlestickSeries.ts","/**\r\n * Module that defines everything related to building OHLCs.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Candlestick, ICandlestickProperties, ICandlestickAdapters, ICandlestickEvents } from \"./Candlestick\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[OHLC]].\r\n */\r\nexport interface IOHLCProperties extends ICandlestickProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLC]].\r\n */\r\nexport interface IOHLCEvents extends ICandlestickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLC]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCAdapters extends ICandlestickAdapters, IOHLCProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates OHLCs.\r\n *\r\n * @see {@link IOHLCEvents} for a list of available events\r\n * @see {@link IOHLCAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class OHLC extends Candlestick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IOHLCProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IOHLCAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IOHLCEvents;\r\n\r\n\r\n\t/**\r\n\t * Open line element\r\n\t */\r\n\tpublic openLine: Line;\r\n\r\n\t/**\r\n\t * Close line element\r\n\t */\r\n\tpublic closeLine: Line;\r\n\r\n\t/**\r\n\t * High-low line element\r\n\t */\r\n\tpublic highLowLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLC\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\t//super.createAssets();\r\n\r\n\t\tthis.openLine = this.createChild(Line);\r\n\t\tthis.openLine.shouldClone = false;\r\n\r\n\t\tthis.highLowLine = this.createChild(Line);\r\n\t\tthis.highLowLine.shouldClone = false;\r\n\r\n\t\tthis.closeLine = this.createChild(Line);\r\n\t\tthis.closeLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[OHLC]].\r\n\t *\r\n\t * @param source Source OHLC\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.openLine) {\r\n\t\t\tthis.openLine.copyFrom(source.openLine);\r\n\t\t}\r\n\t\tif (this.highLowLine) {\r\n\t\t\tthis.highLowLine.copyFrom(source.highLowLine);\r\n\t\t}\r\n\t\tif (this.closeLine) {\r\n\t\t\tthis.closeLine.copyFrom(source.closeLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLC\"] = OHLC;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/OHLC.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { CandlestickSeries, CandlestickSeriesDataItem, ICandlestickSeriesDataFields, ICandlestickSeriesProperties, ICandlestickSeriesAdapters, ICandlestickSeriesEvents } from \"./CandlestickSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { OHLC } from \"../elements/OHLC\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[OHLCSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class OHLCSeriesDataItem extends CandlestickSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the OHLC elements.\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: OHLCSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"OHLCSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesDataFields extends ICandlestickSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesProperties extends ICandlestickSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesEvents extends ICandlestickSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLCSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCSeriesAdapters extends ICandlestickSeriesAdapters, IOHLCSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link IOHLCSeriesEvents} for a list of available Events\r\n * @see {@link IOHLCSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class OHLCSeries extends CandlestickSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: OHLCSeriesDataItem;\r\n\r\n\t/**\r\n\t * Type of column.\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t */\r\n\tpublic _dataFields: IOHLCSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IOHLCSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IOHLCSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IOHLCSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLCSeries\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"OHLC Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new OHLCSeriesDataItem();\r\n\t}\r\n\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"_dataItem\"]) {\r\n\t\tlet column: OHLC = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet openLine = column.openLine;\r\n\t\t\tlet highLowLine = column.highLowLine;\r\n\t\t\tlet closeLine = column.closeLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\t\t\t\thighLowLine.x = x;\r\n\r\n\t\t\t\t// TODO can these be removed ?\r\n\t\t\t\tdataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tdataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\topenLine.y1 = yOpen - pixelY;\r\n\t\t\t\topenLine.y2 = yOpen - pixelY;\r\n\t\t\t\topenLine.x1 = 0;\r\n\t\t\t\topenLine.x2 = x;\r\n\r\n\t\t\t\tcloseLine.y1 = yClose - pixelY;\r\n\t\t\t\tcloseLine.y2 = yClose - pixelY;\r\n\t\t\t\tcloseLine.x1 = x;\r\n\t\t\t\tcloseLine.x2 = 2 * x;\r\n\r\n\t\t\t\thighLowLine.y1 = yHigh - pixelY;\r\n\t\t\t\thighLowLine.y2 = yLow - pixelY;\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\thighLowLine.y = y;\r\n\r\n\t\t\t\t// TODO can these be removed ?\r\n\t\t\t\tdataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tdataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\topenLine.x1 = xOpen - pixelX;\r\n\t\t\t\topenLine.x2 = xOpen - pixelX;\r\n\t\t\t\topenLine.y1 = y;\r\n\t\t\t\topenLine.y2 = 2 * y;\r\n\r\n\t\t\t\tcloseLine.x1 = xClose - pixelX;\r\n\t\t\t\tcloseLine.x2 = xClose - pixelX;\r\n\t\t\t\tcloseLine.y1 = 0;\r\n\t\t\t\tcloseLine.y2 = y;\r\n\r\n\t\t\t\thighLowLine.x1 = xHigh - pixelX;\r\n\t\t\t\thighLowLine.x2 = xLow - pixelX;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeOpenLine = rangeColumn.openLine;\r\n\t\t\t\t\trangeOpenLine.x = openLine.x;\r\n\t\t\t\t\trangeOpenLine.y = openLine.y;\r\n\t\t\t\t\trangeOpenLine.x1 = openLine.x1;\r\n\t\t\t\t\trangeOpenLine.x2 = openLine.x2;\r\n\t\t\t\t\trangeOpenLine.y1 = openLine.y1;\r\n\t\t\t\t\trangeOpenLine.y2 = openLine.y2;\r\n\r\n\t\t\t\t\tlet rangeCloseLine = rangeColumn.closeLine;\r\n\t\t\t\t\trangeCloseLine.x = closeLine.x;\r\n\t\t\t\t\trangeCloseLine.y = closeLine.y;\r\n\t\t\t\t\trangeCloseLine.x1 = closeLine.x1;\r\n\t\t\t\t\trangeCloseLine.x2 = closeLine.x2;\r\n\t\t\t\t\trangeCloseLine.y1 = closeLine.y1;\r\n\t\t\t\t\trangeCloseLine.y2 = closeLine.y2;\r\n\r\n\t\t\t\t\tlet rangeHighLowLine = rangeColumn.highLowLine;\r\n\t\t\t\t\trangeHighLowLine.x = highLowLine.x;\r\n\t\t\t\t\trangeHighLowLine.y = highLowLine.y;\r\n\t\t\t\t\trangeHighLowLine.x1 = highLowLine.x1;\r\n\t\t\t\t\trangeHighLowLine.x2 = highLowLine.x2;\r\n\t\t\t\t\trangeHighLowLine.y1 = highLowLine.y1;\r\n\t\t\t\t\trangeHighLowLine.y2 = highLowLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param marker  Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: OHLC = marker.createChild(OHLC);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(<any>this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet openLine: Line = column.openLine;\r\n\t\tlet closeLine: Line = column.closeLine;\r\n\t\tlet highLowLine: Line = column.highLowLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLowLine.y = h / 2;\r\n\t\t\thighLowLine.x2 = w;\r\n\r\n\t\t\topenLine.x = w / 3 * 2;\r\n\t\t\topenLine.y2 = h / 2;\r\n\r\n\t\t\tcloseLine.x = w / 3;\r\n\t\t\tcloseLine.y2 = h;\r\n\t\t\tcloseLine.y1 = h / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\r\n\t\t\thighLowLine.x = w / 2;\r\n\t\t\thighLowLine.y2 = h;\r\n\r\n\t\t\topenLine.y = h / 3 * 2;\r\n\t\t\topenLine.x2 = w / 2;\r\n\r\n\t\t\tcloseLine.y = h / 3;\r\n\t\t\tcloseLine.x2 = w;\r\n\t\t\tcloseLine.x1 = w / 2;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\r\n\t\tlet legendDataItem = <LegendDataItem>marker.dataItem;\r\n\t\tlegendDataItem.color = column.stroke;\r\n\t\tlegendDataItem.colorOrig = column.stroke;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new OHLC();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLCSeries\"] = OHLCSeries;\r\nregistry.registeredClasses[\"OHLCSeriesDataItem\"] = OHLCSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/OHLCSeries.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ILineSeriesSegmentAdapters, ILineSeriesSegmentEvents, ILineSeriesSegmentProperties, LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentProperties extends ILineSeriesSegmentProperties { }\r\n\r\n/**\r\n * Defines events for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentEvents extends ILineSeriesSegmentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesSegmentAdapters extends ILineSeriesSegmentAdapters, IStepLineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link IStepLineSeriesSegmentEvents} for a list of available events\r\n * @see {@link IStepLineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class StepLineSeriesSegment extends LineSeriesSegment {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IStepLineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesSegment\";\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param points       Points to connect\r\n\t * @param closePoints  ?\r\n\t * @param smoothnessX  Horizontal bezier setting (?)\r\n\t * @param smoothnessY  Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number, noRisers?: boolean, vertical?: boolean): void {\r\n\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\r\n\t\t\tif (noRisers) {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]);\r\n\t\t\t\tif (points.length > 0) {\r\n\t\t\t\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\t\t\t\tlet point = points[i];\r\n\t\t\t\t\t\tif (i / 2 == Math.round(i / 2)) {\r\n\t\t\t\t\t\t\tpath += $path.moveTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tpath += $path.lineTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath = $path.moveTo(points[0]) + $path.polyline(points);\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]) + $path.polyline(points);\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeriesSegment\"] = StepLineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","/**\r\n * Step line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { StepLineSeriesSegment } from \"./StepLineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[StepLineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class StepLineSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: StepLineSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesProperties extends ILineSeriesProperties {\r\n\tnoRisers?: boolean;\r\n\r\n\tstartLocation?: number;\r\n\r\n\tendLocation?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesAdapters extends ILineSeriesAdapters, IStepLineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a step line graph.\r\n *\r\n * @see {@link IStepLineSeriesEvents} for a list of available Events\r\n * @see {@link IStepLineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class StepLineSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IStepLineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IStepLineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: StepLineSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines type for segement.\r\n\t */\r\n\tpublic _segment: StepLineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeries\";\r\n\t\tthis.applyTheme();\r\n\t\tthis.startLocation = 0;\r\n\t\tthis.endLocation = 1;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new StepLineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param points     [description]\r\n\t * @param dataItem   [description]\r\n\t * @param xField     [description]\r\n\t * @param yField     [description]\r\n\t * @param backwards  [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\r\n\t\tlet startLocationX:number;\r\n\t\tlet endLocationX:number;\r\n\r\n\t\tlet startLocationY:number;\r\n\t\tlet endLocationY:number;\t\t\r\n\r\n\t\tif(this.baseAxis == this.xAxis){\r\n\t\t\tstartLocationX = this.startLocation;\r\n\t\t\tendLocationX = this.endLocation;\r\n\r\n\t\t\tstartLocationY = this.getAdjustedXLocation(dataItem, this.yOpenField);\r\n\t\t\tendLocationY = this.getAdjustedXLocation(dataItem, this.yField);\r\n\t\t}\r\n\r\n\t\tif(this.baseAxis == this.yAxis){\r\n\t\t\tstartLocationY = this.startLocation;\r\n\t\t\tendLocationY = this.endLocation;\r\n\r\n\t\t\tstartLocationX = this.getAdjustedXLocation(dataItem, this.xOpenField);\r\n\t\t\tendLocationX = this.getAdjustedXLocation(dataItem, this.xField);\t\t\t\r\n\t\t}\r\n\r\n\r\n\t\tlet x0: number = this.xAxis.getX(dataItem, xField, startLocationX);\r\n\t\tlet y0: number = this.yAxis.getY(dataItem, yField, startLocationY);\r\n\r\n\t\tlet x1: number = this.xAxis.getX(dataItem, xField, endLocationX);\r\n\t\tlet y1: number = this.yAxis.getY(dataItem, yField, endLocationY);\r\n\r\n\t\tx0 = $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\t\ty0 = $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\r\n\t\tx1 = $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\t\ty1 = $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\r\n\t\t// this might make an impression that points are duplicated, and they indeed are, but this is needed to handle gaps in data\r\n\t\tif (!this.noRisers) {\r\n\t\t\tif (points.length > 1) {\r\n\t\t\t\tlet prevPoint: IPoint = points[points.length - 1];\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y1 });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: x0, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: x1, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y0 });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet point0: IPoint = { x: x0, y: y0 };\r\n\t\tlet point1: IPoint = { x: x1, y: y1 };\r\n\r\n\t\tif (backwards) {\r\n\t\t\tpoints.push(point1, point0);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpoints.push(point0, point1);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param segment     Segment\r\n\t * @param points      Segment points\r\n\t * @param closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: StepLineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet vertical = false;\r\n\t\tif (this.yAxis == this.baseAxis) {\r\n\t\t\tvertical = true;\r\n\t\t}\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY, this.noRisers, vertical);\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new StepLineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if step line series should draw only horizontal (or only\r\n\t * vertical, depending on base axis) lines, instead of connecting them with\r\n\t * vertical (or horizontal) lines.\r\n\t *\r\n\t * @default false\r\n\t * @param value  No risers\r\n\t */\r\n\tpublic set noRisers(value: boolean) {\r\n\t\tthis.setPropertyValue(\"noRisers\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return No risers\r\n\t */\r\n\tpublic get noRisers(): boolean {\r\n\t\treturn this.getPropertyValue(\"noRisers\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * start location of the step\r\n\t *\r\n\t * @param value Location (0-1)\r\n\t * @default 0\r\n\t */\r\n\tpublic set startLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"startLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get startLocation(): number {\r\n\t\treturn this.getPropertyValue(\"startLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Step end location.\r\n\t *\r\n\t * @param value Location (0-1)\r\n\t * #default 1\r\n\t */\r\n\tpublic set endLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"endLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get endLocation(): number {\r\n\t\treturn this.getPropertyValue(\"endLocation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeries\"] = StepLineSeries;\r\nregistry.registeredClasses[\"StepLineSeriesDataItem\"] = StepLineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeries.ts","/**\r\n * Module that defines everything related to building RadarColumns.\r\n * It is a container which has radarColumn element which is a Slice.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnAdapters extends IColumnAdapters, IRadarColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates RadarColumns.\r\n *\r\n * @see {@link IRadarColumnEvents} for a list of available events\r\n * @see {@link IRadarColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class RadarColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Radar column element\r\n\t */\r\n\tpublic radarColumn: Slice;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tthis.radarColumn = this.createChild(Slice);\r\n\t\tthis.radarColumn.shouldClone = false;\r\n\t\tthis.radarColumn.strokeOpacity = undefined;\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = <any>this.radarColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[RadarColumn]].\r\n\t *\r\n\t * @param source Source RadarColumn\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.radarColumn) {\r\n\t\t\tthis.radarColumn.copyFrom(source.radarColumn);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * X coordinate for the slice tooltip.\r\n\t *\r\n\t * @return X\r\n\t * @ignore\r\n\t */\r\n\tpublic getTooltipX(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\treturn this.radarColumn.getTooltipX();\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate for the slice tooltip.\r\n\t *\r\n\t * @return Y\r\n\t * @ignore\r\n\t */\r\n\tpublic getTooltipY(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\treturn this.radarColumn.getTooltipY();\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumn\"] = RadarColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/RadarColumn.ts","/**\r\n * Radar column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { Sprite, visualProperties } from \"../../core/Sprite\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\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\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnSeriesAdapters extends IColumnSeriesAdapters, IRadarColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IRadarColumnSeriesEvents} for a list of available Events\r\n * @see {@link IRadarColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Type of data item.\r\n\t */\r\n\tpublic _dataItem: RadarColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * Type of column.\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IRadarColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IRadarColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IRadarColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a RadarColumn element to use as column in radar chart.\r\n\t *\r\n\t * @return RadarColumn.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new RadarColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected disableUnusedColumns(dataItem: ColumnSeriesDataItem) {\r\n\t\tif (dataItem) {\r\n\t\t\tif (dataItem.column) {\r\n\t\t\t\tdataItem.column.__disabled = true;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: Sprite = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\trangeColumn.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\t\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\tlet yField: string = this.yField;\r\n\t\tlet yOpenField: string = this.yOpenField;\r\n\t\tlet xField: string = this.xField;\r\n\t\tlet xOpenField: string = this.xOpenField;\r\n\r\n\t\tlet lAngle: number;\r\n\t\tlet rAngle: number;\r\n\r\n\t\tlet tRadius: number;\r\n\t\tlet bRadius: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet cellAngle = (endAngle - startAngle) / (this.dataItems.length * (this.end - this.start));\r\n\r\n\t\tlet radarColumn = dataItem.column;\r\n\t\tif (!radarColumn) {\r\n\t\t\tradarColumn = this.columns.create();\r\n\t\t\tdataItem.column = radarColumn;\r\n\t\t\t$object.forceCopyProperties(this.columns.template, radarColumn, visualProperties);\r\n\t\t\tdataItem.addSprite(radarColumn);\r\n\t\t\tradarColumn.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\r\n\t\t\tthis.setColumnStates(radarColumn);\r\n\t\t}\r\n\r\n\t\tlet width = radarColumn.width;\r\n\t\tlet percentWidth = 100;\r\n\r\n\t\tif (width instanceof Percent) {\r\n\t\t\tpercentWidth = width.percent;\r\n\t\t}\r\n\r\n\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\tstartLocation += offset;\r\n\t\tendLocation -= offset;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, dataItem.locations[yField], \"valueY\"), y: this.yAxis.getY(dataItem, yField, dataItem.locations[yField], \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xOpenField, startLocation, \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xField, endLocation, \"valueX\");\r\n\r\n\t\t\tstartAngle = startAngle + startLocation * cellAngle;\r\n\t\t\tendAngle = endAngle - (1 - endLocation) * cellAngle;\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, startLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yField, startLocation, \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, endLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, endLocation, \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xField, dataItem.locations[xField], \"valueX\");\r\n\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xOpenField, dataItem.locations[xOpenField], \"valueX\");\r\n\t\t}\r\n\r\n\t\tif (rAngle < lAngle) {\r\n\t\t\tlet temp = rAngle;\r\n\t\t\trAngle = lAngle;\r\n\t\t\tlAngle = temp;\r\n\t\t}\r\n\r\n\t\tlAngle = $math.fitToRange(lAngle, startAngle, endAngle);\r\n\t\trAngle = $math.fitToRange(rAngle, startAngle, endAngle);\r\n\r\n\t\tlet slice = radarColumn.radarColumn;\r\n\r\n\t\tslice.startAngle = lAngle;\r\n\r\n\t\tlet arc = rAngle - lAngle;\r\n\r\n\t\tif (arc > 0) {\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.radius = tRadius;\r\n\t\t\tslice.innerRadius = bRadius;\r\n\t\t\tradarColumn.__disabled = false;\r\n\r\n\t\t\tradarColumn.parent = this.columnsContainer;\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tif (rangeColumn.dataItem) {\r\n\t\t\t\t\t\t$array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\trangeColumn.paper = this.paper; // sometimes pattern is not drawn if is set with adapter without this.\t\t\t\t\t\r\n\t\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet slice = rangeColumn.radarColumn;\r\n\t\t\t\tslice.startAngle = lAngle;\r\n\t\t\t\tslice.arc = arc;\r\n\t\t\t\tslice.radius = tRadius;\r\n\t\t\t\tslice.innerRadius = bRadius;\r\n\r\n\t\t\t\tif (slice.invalid) {\r\n\t\t\t\t\tslice.paper = this.paper;\r\n\t\t\t\t\tslice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\trangeColumn.parent = axisRange.contents;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an [[IPoint]] coordinates of the specific Serie's data point.\r\n\t *\r\n\t * @param    dataItem   Data item\r\n\t * @param    xKey       Name of X data field\r\n\t * @param    yKey       Name of Y data field\r\n\t * @param    locationX  X location\r\n\t * @param    locationY  Y location\r\n\t * @param    stackKeyX  ?\r\n\t * @param    stackKeyY  ?\r\n\t * @returns             Coordinates\r\n\t */\r\n\tpublic getPoint(dataItem: RadarColumnSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\t\t// hack to be able to determine angle later\r\n\t\tif (radius == 0) {\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = <AxisRendererRadial>this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n\tprotected positionBulletReal(bullet:Sprite, positionX:number, positionY:number){\r\n\t\tlet xAxis = this.xAxis;\r\n\t\tlet yAxis = this.yAxis;\r\n\r\n\t\tif(positionX < xAxis.start || positionX > xAxis.end || positionY < yAxis.start || positionY > yAxis.end){\r\n\t\t\tbullet.visible = false;\r\n\t\t}\r\n\r\n\t\tbullet.moveTo(this.xAxis.renderer.positionToPoint(positionX, positionY));\t\t\r\n\t}\r\n\r\n\tprotected setXAxis(axis: Axis) {\r\n\t\tsuper.setXAxis(axis);\r\n\t\tthis.updateRendererRefs();\r\n\t}\r\n\r\n\tprotected setYAxis(axis: Axis) {\r\n\t\tsuper.setYAxis(axis);\r\n\t\tthis.updateRendererRefs();\r\n\t}\r\n\r\n\tprotected updateRendererRefs() {\r\n\t\tlet rendererX = <AxisRendererCircular>this.xAxis.renderer;\r\n\t\tlet rendererY = <AxisRendererRadial>this.yAxis.renderer;\r\n\r\n\t\trendererX.axisRendererY = rendererY;\r\n\t}\t\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumnSeries\"] = RadarColumnSeries;\r\nregistry.registeredClasses[\"RadarColumnSeriesDataItem\"] = RadarColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarColumnSeries.ts","/**\r\n * Module that defines everything related to building Funnel slices.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[FunnelSlice]].\r\n */\r\nexport interface IFunnelSliceProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Width of the top edge of the slice.\r\n\t */\r\n\ttopWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Width of the bottom edge of the slice.\r\n\t */\r\n\tbottomWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * A relative distance slice's sides should be bent to.\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\texpandDistance?: number;\r\n\r\n\t/**\r\n\t * Orientation of the slice.\r\n\t */\r\n\torientation?: Orientation;\r\n}\r\n\r\n/**\r\n * Defines events for [[FunnelSlice]].\r\n */\r\nexport interface IFunnelSliceEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FunnelSlice]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFunnelSliceAdapters extends IContainerAdapters, IFunnelSliceProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to create [[FunnelSlice]] elements.\r\n *\r\n * @see {@link IFunnelSliceEvents} for a list of available events\r\n * @see {@link IFunnelSliceAdapters} for a list of available adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class FunnelSlice extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFunnelSliceProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFunnelSliceAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFunnelSliceEvents;\r\n\r\n\t/**\r\n\t * Main slice element.\r\n\t */\r\n\tpublic slice: Sprite;\r\n\r\n\t/**\r\n\t * Am anchor point the slice tick line is pointing to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @readonly\r\n\t */\r\n\tpublic tickPoint: IPoint;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.slice = this.createChild(Sprite);\r\n\t\tthis.slice.shouldClone = false;\r\n\t\tthis.slice.setElement(this.paper.add(\"path\"));\r\n\t\tthis.slice.isMeasured = false;\r\n\r\n\t\tthis.orientation = \"vertical\";\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.topWidth = percent(100);\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.width = 10;\r\n\t\tthis.height = 10;\r\n\r\n\t\tthis.expandDistance = 0;\r\n\r\n\t\tthis.className = \"FunnelSlice\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the element.\r\n\t */\r\n\tprotected draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tlet pt = this.pixelPaddingTop;\r\n\t\tlet pb = this.pixelPaddingBottom;\r\n\t\tlet pr = this.pixelPaddingRight;\r\n\t\tlet pl = this.pixelPaddingLeft;\r\n\r\n\t\tlet w = this.pixelWidth - pr - pl;\r\n\t\tlet h = this.pixelHeight - pt - pb;\r\n\r\n\t\tlet ed = this.expandDistance;\r\n\r\n\t\tlet path = \"\";\r\n\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet tw = $utils.relativeToValue(this.topWidth, w);\r\n\t\t\tlet bw = $utils.relativeToValue(this.bottomWidth, w);\r\n\r\n\t\t\tlet tl = { x: (w - tw) / 2 + pl, y: pt };\r\n\t\t\tlet tr = { x: (w + tw) / 2 + pl, y: pt };\r\n\r\n\t\t\tlet br = { x: (w + bw) / 2 + pl, y: pt + h };\r\n\t\t\tlet bl = { x: (w - bw) / 2 + pl, y: pt + h };\r\n\r\n\t\t\tlet cpr = { x: tr.x + (br.x - tr.x) / 2 + ed * h, y: tr.y + 0.5 * h };\r\n\t\t\tlet cpl = { x: tl.x + (bl.x - tl.x) / 2 - ed * h, y: tl.y + 0.5 * h };\r\n\r\n\t\t\tlet qp1 = $path.lineTo(br);\r\n\t\t\tlet qp2 = \"\";\r\n\r\n\t\t\tif(ed != 0){\r\n\t\t\t\tqp1 = $path.quadraticCurveTo(br, cpr);\r\n\t\t\t\tqp2 = $path.quadraticCurveTo(tl, cpl);\r\n\t\t\t}\r\n\r\n\t\t\tpath = $path.moveTo(tl) + $path.lineTo(tr) + qp1 + $path.lineTo(bl) + qp2;\r\n\r\n\t\t\tthis.tickPoint = { x: tr.x + (br.x - tr.x) / 2, y: tr.y + (br.y - tr.y) / 2 };\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet tw = $utils.relativeToValue(this.topWidth, h);\r\n\t\t\tlet bw = $utils.relativeToValue(this.bottomWidth, h);\r\n\r\n\t\t\tlet tt = { x: pl, y: (h - tw) / 2 + pt };\r\n\t\t\tlet tb = { x: pl, y: (h + tw) / 2 + pt };\r\n\r\n\t\t\tlet bt = { x: pl + w, y: (h - bw) / 2 + pt };\r\n\t\t\tlet bb = { x: pl + w, y: (h + bw) / 2 + pt };\r\n\r\n\t\t\tlet cpr = { y: tt.y + (bt.y - tt.y) / 2 - ed * w, x: tt.x + 0.5 * w };\r\n\t\t\tlet cpl = { y: tb.y + (bb.y - tb.y) / 2 + ed * w, x: tb.x + 0.5 * w };\r\n\r\n\t\t\tlet qp1 = $path.lineTo(bt);\r\n\t\t\tlet qp2 = \"\"\r\n\t\t\tif(ed != 0){\r\n\t\t\t\tqp1 = $path.quadraticCurveTo(bt, cpr);\r\n\t\t\t\tqp2 = $path.quadraticCurveTo(tb, cpl);\r\n\t\t\t}\r\n\r\n\t\t\tpath = $path.moveTo(tb) + $path.lineTo(tt) + qp1 + $path.lineTo(bb) + qp2;\r\n\r\n\t\t\tthis.tickPoint = { y: tb.y + (bb.y - tb.y) / 2, x: tb.x + (bb.x - tb.x) / 2 };\r\n\t\t}\r\n\r\n\t\tthis.slice.path = path;\r\n\t\tthis.invalidateLayout();\r\n\t}\r\n\r\n\r\n\tgetPoint(locationX:number, locationY:number):IPoint{\r\n\r\n\t\tlet pt = this.pixelPaddingTop;\r\n\t\tlet pb = this.pixelPaddingBottom;\r\n\t\tlet pr = this.pixelPaddingRight;\r\n\t\tlet pl = this.pixelPaddingLeft;\r\n\r\n\t\tlet w = this.pixelWidth - pr - pl;\r\n\t\tlet h = this.pixelHeight - pt - pb;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet tw = $utils.relativeToValue(this.topWidth, w);\r\n\t\t\tlet bw = $utils.relativeToValue(this.bottomWidth, w);\r\n\r\n\t\t\tlet tl = { x: (w - tw) / 2 + pl, y: pt };\r\n\t\t\tlet tr = { x: (w + tw) / 2 + pl, y: pt };\r\n\r\n\t\t\tlet br = { x: (w + bw) / 2 + pl, y: pt + h };\r\n\t\t\tlet bl = { x: (w - bw) / 2 + pl, y: pt + h };\r\n\r\n\t\t\tlet mlx = tl.x + (bl.x - tl.x) * locationY;\r\n\t\t\tlet mrx = tr.x + (br.x - tr.x) * locationY;\r\n\r\n\t\t\treturn { x: mlx + (mrx - mlx) * locationX, y: tr.y + (br.y - tr.y) * locationY };\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet tw = $utils.relativeToValue(this.topWidth, h);\r\n\t\t\tlet bw = $utils.relativeToValue(this.bottomWidth, h);\r\n\r\n\t\t\tlet tt = { x: pl, y: (h - tw) / 2 + pt };\r\n\t\t\tlet tb = { x: pl, y: (h + tw) / 2 + pt };\r\n\r\n\t\t\tlet bt = { x: pl + w, y: (h - bw) / 2 + pt };\r\n\t\t\tlet bb = { x: pl + w, y: (h + bw) / 2 + pt };\r\n\r\n\t\t\tlet mty = tt.y + (bt.y - tt.y) * locationX;\r\n\t\t\tlet mby = tb.y + (bb.y - tb.y) * locationX;\r\n\r\n\t\t\treturn { y: mty + (mby - mty) * locationY, x: tt.x + (bt.x - tt.x) * locationX };\r\n\t\t}\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Bottom width in pixels or percent.\r\n\t *\r\n\t * IMPORTANT: this setting might be used to set dimensions if you use slice\r\n\t * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n\t * becomes read-only as it will be automatically reset by series.\r\n\t *\r\n\t * @param value  Bottom width\r\n\t */\r\n\tpublic set bottomWidth(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"bottomWidth\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return bottom width\r\n\t */\r\n\tpublic get bottomWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"bottomWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Top width in pixels or percent.\r\n\t *\r\n\t * IMPORTANT: this setting might be used to set dimensions if you use slice\r\n\t * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n\t * becomes read-only as it will be automatically reset by series.\r\n\t *\r\n\t * @param value  Top width\r\n\t */\r\n\tpublic set topWidth(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"topWidth\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Top width\r\n\t */\r\n\tpublic get topWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"topWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the funnel slice: \"horizontal\" or \"vertical\".\r\n\t *\r\n\t * IMPORTANT: this setting might be used to set orintation if you use slice\r\n\t * as a standalone element. If it's a part of [[FunnelSeries]] this setting\r\n\t * becomes read-only as it will be automatically reset by series.\r\n\t *\r\n\t * @param value  Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tthis.setPropertyValue(\"orientation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n\t/**\r\n\t * A relative distance slice's sides should be bent to. It's relative to the\r\n\t * height of the slice.\r\n\t *\r\n\t * Zero (default) will mean the sides will be perfectly straight.\r\n\t *\r\n\t * Positive value will make them bend outwards, resulting in \"puffed\" slices.\r\n\t *\r\n\t * Negative values will make them bend inwards.\r\n\t *\r\n\t * @default 0\r\n\t * @param {number}\r\n\t */\r\n\tpublic set expandDistance(value: number) {\r\n\t\tthis.setPropertyValue(\"expandDistance\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return expandDistance\r\n\t */\r\n\tpublic get expandDistance(): number {\r\n\t\treturn this.getPropertyValue(\"expandDistance\");\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Sprite]].\r\n\t *\r\n\t * @param source Source Sprite\r\n\t */\r\n\tpublic copyFrom(source :this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tif (this.slice) {\r\n\t\t\tthis.slice.copyFrom(source.slice);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FunnelSlice\"] = FunnelSlice;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/FunnelSlice.ts","/**\r\n * Funnel tick module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Tick, ITickProperties, ITickAdapters, ITickEvents } from \"../elements/Tick\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelSlice } from \"./FunnelSlice\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { FunnelSeries } from \"../series/FunnelSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[FunnelTick]].\r\n */\r\nexport interface IFunnelTickProperties extends ITickProperties {\r\n\tlocationX?: number;\r\n\r\n\tlocationY?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[FunnelTick]].\r\n */\r\nexport interface IFunnelTickEvents extends ITickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FunnelTick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFunnelTickAdapters extends ITickAdapters, IFunnelTickProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws an tick line for a funnel slice connecting it to a related label.\r\n *\r\n * @see {@link IFunnelTickEvents} for a list of available events\r\n * @see {@link IFunnelTickAdapters} for a list of available Adapters\r\n */\r\nexport class FunnelTick extends Tick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFunnelTickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFunnelTickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFunnelTickEvents;\r\n\r\n\t/**\r\n\t * A label element this tick is attached to.\r\n\t */\r\n\tprotected _label = new MutableValueDisposer<Label>();\r\n\r\n\t/**\r\n\t * A slice element this tick is attached to.\r\n\t */\r\n\tprotected _slice = new MutableValueDisposer<FunnelSlice>();\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"FunnelTick\";\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\t\tthis._disposers.push(this._label);\r\n\t\tthis._disposers.push(this._slice);\r\n\r\n\t\tthis.setPropertyValue(\"locationX\", 0);\r\n\t\tthis.setPropertyValue(\"locationY\", 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tlet slice: FunnelSlice = this.slice;\r\n\t\tlet point = slice.getPoint(this.locationX, this.locationY);\r\n\r\n\t\tif (point) {\r\n\t\t\tlet label = this.label;\r\n\r\n\t\t\tlet series = <FunnelSeries>slice.dataItem.component;\r\n\t\t\tlet p0:IPoint;\r\n\t\t\tlet p1:IPoint;\r\n\t\t\tlet p2:IPoint;\r\n\r\n\t\t\tif (series.orientation == \"vertical\") {\r\n\r\n\t\t\t\tlet x1 = label.pixelX;\r\n\t\t\t\tlet y1 = label.pixelY;\r\n\r\n\t\t\t\tif(!series.labelsOpposite){\r\n\t\t\t\t\tx1 += label.maxRight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tp0 = $utils.spritePointToSprite(point, slice, this.parent);\t\t\t\t\r\n\t\t\t\tp2 = $utils.spritePointToSprite({ x: x1, y: y1 }, label.parent, this.parent);\r\n\t\t\t\tp1 = { x: label.parent.pixelX - this.length, y: p2.y };\r\n\r\n\t\t\t\tif(!series.labelsOpposite){\r\n\t\t\t\t\tp1.x = label.parent.measuredWidth + this.length; \r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet x1 = label.pixelX;\r\n\t\t\t\tlet y1 = label.pixelY;\r\n\r\n\t\t\t\tif(!series.labelsOpposite){\r\n\t\t\t\t\ty1 += label.maxBottom;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tp0 = $utils.spritePointToSprite(point, slice, this.parent);\r\n\t\t\t\tp2 = $utils.spritePointToSprite({ x: x1, y: y1 }, label.parent, this.parent);\r\n\t\t\t\tp1 = { x: p2.x, y: label.parent.pixelY - this.length };\r\n\r\n\t\t\t\tif(!series.labelsOpposite){\r\n\t\t\t\t\tp1.y = label.parent.measuredHeight + this.length; \r\n\t\t\t\t}\t\t\t\t\t\t\t\t\r\n\t\t\t}\r\n\t\t\tthis.path = $path.moveTo(p0) + $path.lineTo(p1) + $path.lineTo(p2);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [[FunnelSlice]] element tick is attached to.\r\n\t *\r\n\t * @param slice  Slice\r\n\t */\r\n\tpublic set slice(slice: FunnelSlice) {\r\n\t\tthis._slice.set(slice, new MultiDisposer([\r\n\t\t\tslice.events.on(\"transformed\", this.invalidate, this, false),\r\n\t\t\tslice.events.on(\"validated\", this.invalidate, this, false)\r\n\t\t]));\r\n\t}\r\n\r\n\t/**\r\n\t * @return FunnelSlice\r\n\t */\r\n\tpublic get slice(): FunnelSlice {\r\n\t\treturn this._slice.get();\r\n\t}\r\n\r\n\t/**\r\n\t * [[Label]] element tick is attached to.\r\n\t *\r\n\t * @param label  Label\r\n\t */\r\n\tpublic set label(label: Label) {\r\n\t\tthis._label.set(label, label.events.on(\"transformed\", this.invalidate, this, false));\r\n\t}\r\n\r\n\t/**\r\n\t * @return Label\r\n\t */\r\n\tpublic get label(): Label {\r\n\t\treturn this._label.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A relative horizontal position within target element a tick is pointing\r\n\t * to.\r\n\t *\r\n\t * A scale is from 0 to 1, where 0 means left edge, and 1 right edge.\r\n\t *\r\n\t * You can also set any value in-between (e.g. 0.5 will point to the middle\r\n\t * of the slice), or outside 0-1 range, which will put tick anchor position\r\n\t * outside target element.\r\n\t *\r\n\t * @param value  Location (0-1)\r\n\t */\r\n\tpublic set locationX(value: number) {\r\n\t\tthis.setPropertyValue(\"locationX\", value, false, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get locationX(): number {\r\n\t\treturn this.getPropertyValue(\"locationX\");\r\n\t}\r\n\r\n\t/**\r\n\t * A relative vertical position within target element a tick is pointing\r\n\t * to.\r\n\t *\r\n\t * A scale is from 0 to 1, where 0 means top edge, and 1 bottom edge.\r\n\t *\r\n\t * You can also set any value in-between (e.g. 0.5 will point to the middle\r\n\t * of the slice), or outside 0-1 range, which will put tick anchor position\r\n\t * outside target element.\r\n\t *\r\n\t * @param value  Location (0-1)\r\n\t */\r\n\tpublic set locationY(value: number) {\r\n\t\tthis.setPropertyValue(\"locationY\", value, false, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Location (0-1)\r\n\t */\r\n\tpublic get locationY(): number {\r\n\t\treturn this.getPropertyValue(\"locationY\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FunnelTick\"] = FunnelTick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/FunnelTick.ts","/**\r\n * Defines Funnel Chart Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPercentSeriesAdapters, IPercentSeriesDataFields, IPercentSeriesEvents, IPercentSeriesProperties, PercentSeries, PercentSeriesDataItem } from \"./PercentSeries\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { SlicedChart } from \"../types/SlicedChart\";\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 { percent } from \"../../core/utils/Percent\";\r\nimport { Disposer } from \"../../core/utils/Disposer\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { Align } from \"../../core/defs/Align\";\r\nimport { VerticalAlign } from \"../../core/defs/VerticalAlign\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[FunnelSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class FunnelSeriesDataItem extends PercentSeriesDataItem {\r\n\r\n\t/**\r\n\t * A type of slice used for this series.\r\n\t */\r\n\tpublic _slice: FunnelSlice;\r\n\r\n\t/**\r\n\t * A reference to a label element.\r\n\t */\r\n\tpublic _label: Label;\r\n\r\n\t/**\r\n\t * A reference to a tick element.\r\n\t */\r\n\tpublic _tick: FunnelTick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: FunnelSeries;\r\n\r\n\t/**\r\n\t * Defines a type of elements linking slices.\r\n\t */\r\n\tpublic _sliceLink: FunnelSlice;\r\n\r\n\t/**\r\n\t * A [[FunnelSlice]] element, related to this data item ([[FunnelSlice]]).\r\n\t *\r\n\t * @readonly\r\n\t * @return Slice element\r\n\t */\r\n\tpublic get sliceLink(): this[\"_sliceLink\"] {\r\n\t\tif (!this._sliceLink) {\r\n\t\t\tlet sliceLink = this.component.sliceLinks.create();\r\n\t\t\tthis._sliceLink = sliceLink;\r\n\t\t\tthis._disposers.push(sliceLink);\r\n\t\t\tsliceLink.parent = this.component.slicesContainer;\r\n\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.sliceLinks.removeValue(sliceLink);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\r\n\t\t\tthis.addSprite(sliceLink);\r\n\t\t\tsliceLink.visible = this.visible;\r\n\t\t}\r\n\t\treturn this._sliceLink;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"FunnelSeriesDataItem\";\r\n\t\t// this helps to invalidate series when value is 0 an it is hidden (no other events are triggered then)\r\n\t\tthis.events.on(\"visibilitychanged\", () => {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tthis.component.invalidateDataItems();\r\n\t\t\t}\r\n\t\t}, this, false);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[FunnelSeries]].\r\n */\r\nexport interface IFunnelSeriesDataFields extends IPercentSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[FunnelSeries]].\r\n */\r\nexport interface IFunnelSeriesProperties extends IPercentSeriesProperties {\r\n\r\n\t/**\r\n\t * Relative width of the slice bottom. See description of `bottomRatio`\r\n\t * property for full description.\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\tbottomRatio?: number;\r\n\r\n\t/**\r\n\t * Orientation of series\r\n\t *\r\n\t * @default \"vertical\"\r\n\t */\r\n\torientation?: Orientation;\r\n\r\n\t/**\r\n\t * Put labels on the oppsite side of the series?\r\n\t *\r\n\t * @since 4.1.13\r\n\t */\r\n\tlabelsOpposite?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[FunnelSeries]].\r\n */\r\nexport interface IFunnelSeriesEvents extends IPercentSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[FunnelSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IFunnelSeriesAdapters extends IPercentSeriesAdapters, IFunnelSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link 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\nexport class FunnelSeries extends PercentSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _slice: FunnelSlice;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _tick: FunnelTick;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _label: Label;\r\n\r\n\t/**\r\n\t * A reference to chart this series is for.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic _chart: SlicedChart;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IFunnelSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IFunnelSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IFunnelSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IFunnelSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: FunnelSeriesDataItem;\r\n\r\n\r\n\tprotected _nextY: number = 0;\r\n\r\n\t/**\r\n\t * List of slice elements.\r\n\t */\r\n\tprotected _sliceLinks: ListTemplate<this[\"_slice\"]>;\r\n\r\n\t/**\r\n\t * Holds sum of values for all slices\r\n\t */\r\n\tprotected _total: number;\r\n\r\n\t/**\r\n\t * Holds number of slices.\r\n\t */\r\n\tprotected _count: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"FunnelSeries\";\r\n\t\tthis.orientation = \"vertical\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.slicesContainer.width = percent(100);\r\n\t\tthis.slicesContainer.height = percent(100);\r\n\r\n\t\tthis._disposers.push(this.slicesContainer.events.on(\"maxsizechanged\", this.invalidateDataItems, this, false));\r\n\r\n\t\tthis.labelsOpposite = true;\r\n\r\n\t\tthis.labelsContainer.layout = \"absolute\";\r\n\r\n\t\tthis.bottomRatio = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a [[FunnelSlice]] element.\r\n\t *\r\n\t * @return Slice\r\n\t */\r\n\tprotected createSlice(): this[\"_slice\"] {\r\n\t\treturn new FunnelSlice();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a [[FunnelTick]] element.\r\n\t *\r\n\t * @return Tick\r\n\t */\r\n\tprotected createTick(): this[\"_tick\"] {\r\n\t\treturn new FunnelTick();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Funnel Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new FunnelSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits FunnelSlice.\r\n\t *\r\n\t * @param slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tslice.isMeasured = false;\r\n\t\tslice.defaultState.properties.scale = 1;\r\n\t\tslice.observe(\"scale\", this.handleSliceScale, this);\r\n\t\tslice.observe([\"dx\", \"dy\", \"x\", \"y\"], this.handleSliceMove, this);\r\n\t\tslice.tooltipText = \"{category}: {value.percent.formatNumber('#.#')}% ({value.value})\";\r\n\r\n\t\tlet hoverState = slice.states.create(\"hover\");\r\n\t\thoverState.properties.expandDistance = 0.2;\r\n\t}\r\n\r\n\t/**\r\n\t * [initLabel description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param label [description]\r\n\t */\r\n\tprotected initLabel(label: this[\"_label\"]) {\r\n\t\tsuper.initLabel(label);\r\n\t\tlabel.verticalCenter = \"middle\";\r\n\t\tlabel.horizontalCenter = \"middle\";\r\n\t\tlabel.isMeasured = true;\r\n\t\tlabel.padding(5, 5, 5, 5);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t\tthis._nextY = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElements description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements() {\r\n\r\n\t\tlet slicesContainer = this.slicesContainer;\r\n\t\tlet labelsContainer = this.labelsContainer;\r\n\t\tlet labelTemplate = this.labels.template;\r\n\r\n\t\tif (this.alignLabels) {\r\n\t\t\tlabelTemplate.interactionsEnabled = true;\r\n\t\t\tslicesContainer.isMeasured = true;\r\n\t\t\tlabelsContainer.isMeasured = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlabelTemplate.interactionsEnabled = false;\r\n\t\t\tslicesContainer.isMeasured = false;\r\n\t\t\tlabelsContainer.isMeasured = false;\r\n\t\t}\r\n\r\n\t\tlet total = 0;\r\n\t\tlet count = 0;\r\n\t\tthis.dataItems.each((dItem) => {\r\n\t\t\tif ($type.hasValue(dItem.value)) {\r\n\t\t\t\tcount++;\r\n\t\t\t\tif (dItem.value > 0) {\r\n\t\t\t\t\ttotal += Math.abs(dItem.getWorkingValue(\"value\") / dItem.value);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (this.ignoreZeroValues) {\r\n\t\t\t\t\t\tcount--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (!dItem.visible || dItem.__disabled || dItem.isHiding) {\r\n\t\t\t\t\t\t\tcount--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\ttotal += 1;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis._total = 1 / count * total;\r\n\t\tthis._count = count;\r\n\r\n\t\tsuper.validateDataElements();\r\n\r\n\t\tthis.arrangeLabels();\r\n\t}\r\n\r\n\t/**\r\n\t * [getNextValue description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem  [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getNextValue(dataItem: FunnelSeriesDataItem): number {\r\n\t\tlet index = dataItem.index;\r\n\t\tlet nextValue: number = dataItem.getWorkingValue(\"value\");\r\n\t\tif (index < this.dataItems.length - 1) {\r\n\t\t\tlet nextItem = this.dataItems.getIndex(index + 1);\r\n\t\t\tnextValue = nextItem.getWorkingValue(\"value\");\r\n\r\n\t\t\tif (!nextItem.visible || nextItem.isHiding || nextItem.__disabled || (nextItem.value == 0 && this.ignoreZeroValues)) {\r\n\t\t\t\treturn this.getNextValue(nextItem);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn nextValue;\r\n\t}\r\n\r\n\t/**\r\n\t * [formDataElement description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected formDataElement(): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tif ($type.hasValue(dataItem.value)) {\r\n\t\t\t// FunnelSlice\r\n\t\t\tlet slice = dataItem.slice;\r\n\t\t\tslice.orientation = this.orientation;\r\n\r\n\t\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\t\tsliceLink.orientation = this.orientation;\r\n\r\n\t\t\tlet tick = dataItem.tick;\r\n\t\t\tlet label = dataItem.label;\r\n\r\n\t\t\ttick.slice = slice;\r\n\t\t\ttick.label = label;\r\n\r\n\t\t\tthis.decorateSlice(dataItem);\r\n\r\n\t\t\tsliceLink.fill = slice.fill;\r\n\r\n\t\t\tif (dataItem.index == this.dataItems.length - 1) {\r\n\t\t\t\tsliceLink.disabled = true;\r\n\t\t\t}\r\n\r\n\t\t\t// do this at the end, otherwise bullets won't be positioned properly\r\n\t\t\tsuper.validateDataElement(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [decorateSlice description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected decorateSlice(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet slice = dataItem.slice;\r\n\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\tlet label = dataItem.label;\r\n\t\tlet tick = dataItem.tick;\r\n\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tlet nextValue = this.getNextValue(dataItem);\r\n\t\tlet workingValue = Math.abs(dataItem.getWorkingValue(\"value\"));\r\n\t\tlet bottomRatio = this.bottomRatio;\r\n\r\n\t\tlet d = 1;\r\n\t\tif (dataItem.value != 0) {\r\n\t\t\td = workingValue / Math.abs(dataItem.value);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (dataItem.__disabled || dataItem.isHiding || !dataItem.visible) {\r\n\t\t\t\td = 0.000001;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.ignoreZeroValues && dataItem.value == 0) {\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.__disabled = false;\r\n\t\t}\r\n\r\n\t\tif (this._nextY == Infinity) {\r\n\t\t\tthis._nextY = 0;\r\n\t\t}\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\r\n\t\t\tlet linkHeight = sliceLink.pixelHeight * d;\r\n\r\n\t\t\tmaxHeight = maxHeight + linkHeight; // to avoid one link gap in the bottom\r\n\r\n\t\t\tslice.topWidth = workingValue / this.dataItem.values.value.high * maxWidth;\r\n\t\t\tslice.bottomWidth = (workingValue - (workingValue - nextValue) * bottomRatio) / this.dataItem.values.value.high * maxWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = (workingValue - (workingValue - nextValue)) / this.dataItem.values.value.high * maxWidth;\r\n\r\n\t\t\tslice.y = this._nextY;\r\n\t\t\tslice.height = Math.min(100000, $math.max(0, maxHeight / this._count * d / this._total - linkHeight));\r\n\r\n\t\t\tslice.x = maxWidth / 2;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.x = slice.x;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.x = undefined;\r\n\t\t\t}\r\n\t\t\tlabel.y = slice.pixelY + slice.pixelHeight * tick.locationY;\r\n\r\n\t\t\tthis._nextY += slice.pixelHeight + linkHeight;\r\n\t\t\tsliceLink.y = this._nextY - linkHeight;\r\n\t\t\tsliceLink.x = slice.x;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet linkWidth = sliceLink.pixelWidth * d;\r\n\r\n\t\t\tmaxWidth = maxWidth + linkWidth; // to avoid one link gap in the bottom\r\n\r\n\t\t\tslice.topWidth = workingValue / this.dataItem.values.value.high * maxHeight;\r\n\t\t\tslice.bottomWidth = (workingValue - (workingValue - nextValue) * bottomRatio) / this.dataItem.values.value.high * maxHeight;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = (workingValue - (workingValue - nextValue)) / this.dataItem.values.value.high * maxHeight;\r\n\r\n\t\t\tslice.x = this._nextY;\r\n\t\t\tslice.width = Math.min(100000, maxWidth / this._count * d * 1 / this._total - linkWidth);\r\n\t\t\tslice.y = maxHeight / 2;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.y = slice.y;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.y = this.labelsContainer.measuredHeight;\r\n\t\t\t}\r\n\t\t\tlabel.x = slice.pixelX + slice.pixelWidth * tick.locationX;\r\n\r\n\t\t\tthis._nextY += slice.pixelWidth + linkWidth;\r\n\t\t\tsliceLink.x = this._nextY - linkWidth;\r\n\r\n\t\t\tsliceLink.y = slice.y;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getLastLabel(index: number):Label {\r\n\t\tif (index > 0) {\r\n\t\t\tlet lastLabel = this.labels.getIndex(index);\r\n\t\t\tif (lastLabel.__disabled || !lastLabel.visible) {\r\n\t\t\t\treturn this.getLastLabel(index - 1);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn lastLabel;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [arrangeLabels description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected arrangeLabels(): void {\r\n\r\n\t\tif (this.alignLabels) {\r\n\t\t\tlet count = this.labels.length;\r\n\t\t\tif (count > 1) {\r\n\r\n\t\t\t\tlet lastLabel = this.getLastLabel(count - 1);\r\n\t\t\t\tif (lastLabel) {\r\n\r\n\t\t\t\t\tlet lastY = lastLabel.pixelY;\r\n\t\t\t\t\tlet lastX = lastLabel.pixelX;\r\n\r\n\t\t\t\t\tif (count > 1) {\r\n\t\t\t\t\t\tfor (let i = count - 2; i >= 0; i--) {\r\n\t\t\t\t\t\t\tlet label = this.labels.getIndex(i);\r\n\r\n\t\t\t\t\t\t\tif (label.visible && !label.__disabled) {\r\n\t\t\t\t\t\t\t\tif (label.invalid) {\r\n\t\t\t\t\t\t\t\t\tlabel.validate();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\t\t\t\t\tif (label.pixelY + label.measuredHeight > lastY) {\r\n\t\t\t\t\t\t\t\t\t\tlabel.y = Math.min(1000000, lastY - label.measuredHeight);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// horizontal\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tif (label.pixelX + label.measuredWidth > lastX) {\r\n\t\t\t\t\t\t\t\t\t\tlabel.x = Math.min(1000000, lastX - label.measuredWidth);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tlastY = label.pixelY;\r\n\t\t\t\t\t\t\t\tlastX = label.pixelX;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlastY = 0;\r\n\t\t\t\t\t\tlastX = 0;\r\n\t\t\t\t\t\tfor (let i = 0; i < count; i++) {\r\n\t\t\t\t\t\t\tlet label = this.labels.getIndex(i);\r\n\t\t\t\t\t\t\tif (label.visible && !label.__disabled) {\r\n\t\t\t\t\t\t\t\tif (label.invalid) {\r\n\t\t\t\t\t\t\t\t\tlabel.validate();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\t\t\t\t\tif (label.pixelY < lastY) {\r\n\t\t\t\t\t\t\t\t\t\tlabel.y = Math.min(1000000, lastY);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// horizontal\r\n\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\tif (label.pixelX < lastX) {\r\n\t\t\t\t\t\t\t\t\t\tlabel.x = Math.min(1000000, lastX);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlastY += label.measuredHeight;\r\n\t\t\t\t\t\t\t\tlastX += label.measuredWidth;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param bullet  Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet): void {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = <this[\"_dataItem\"]>bullet.dataItem;\r\n\t\tlet slice: FunnelSlice = dataItem.slice;\r\n\r\n\t\tlet locationX = bullet.locationX;\r\n\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\tlocationX = 0.5;\r\n\t\t}\r\n\t\tlet locationY = bullet.locationY;\r\n\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\tlocationY = 1;\r\n\t\t}\r\n\r\n\t\tbullet.x = slice.pixelX + slice.measuredWidth * locationX;\r\n\t\tbullet.y = slice.pixelY + slice.measuredHeight * locationY;\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the funnel slices: \"horizontal\" or \"vertical\" (default).\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @param value Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tif (this.setPropertyValue(\"orientation\", value)) {\r\n\t\t\tthis.labelsOpposite = this.labelsOpposite;\r\n\t\t\tthis.invalidate();\r\n\t\t\tif (value == \"vertical\") {\r\n\t\t\t\tthis.ticks.template.locationX = 1;\r\n\t\t\t\tthis.ticks.template.locationY = 0.5;\r\n\t\t\t\tthis.labels.template.rotation = 0;\r\n\t\t\t\tthis.layout = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.ticks.template.locationX = 0.5;\r\n\t\t\t\tthis.ticks.template.locationY = 1;\r\n\t\t\t\tthis.labels.template.rotation = -90;\r\n\t\t\t\tthis.layout = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates how slice's bottom will change in relation to slices top AND\r\n\t * next slices top.\r\n\t *\r\n\t * Basically it's a relative value (0-1) that indicates bottom width\r\n\t * position between current slice's top width and the top withd of the next\r\n\t * one.\r\n\t *\r\n\t * The scale goes from 0 (closer to current slice width) to 1 (closer to next\r\n\t * slice with).\r\n\t *\r\n\t * `0` (default) will mean that bottom will be the same as top, resulting in\r\n\t * a prefectly square slice.\r\n\t *\r\n\t * From the data-viz standpoint `0` is a correct setting, since area of the\r\n\t * slices will depict their value correctly.\r\n\t *\r\n\t * `1` will mean that slice will become trapezoid with its bottom matching\r\n\t * width of the next slice.\r\n\t *\r\n\t * `0.5` will make bottom width be in the middle of width of current slice\r\n\t * and the next slice.\r\n\t *\r\n\t * @default 0\r\n\t * @param {number}\r\n\t */\r\n\tpublic set bottomRatio(value: number) {\r\n\t\tif (this.setPropertyValue(\"bottomRatio\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number}\r\n\t */\r\n\tpublic get bottomRatio(): number {\r\n\t\treturn this.getPropertyValue(\"bottomRatio\");\r\n\t}\r\n\r\n\t/**\r\n\t * A list of elements linking each actual slice.\r\n\t *\r\n\t * Please note that links are [[FunnelSlice]] objects, just like real links,\r\n\t * so they have all the same configuration options.\r\n\t *\r\n\t * You can use `template` of this link, to specify how links will look.\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.sliceLinks.template.fillOpacity = 0.5;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.sliceLinks.template.fillOpacity = 0.5;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t *   // ...\r\n\t *   \"series\": [{\r\n\t *     \"type\": \"FunnelSeries\",\r\n\t *      // ...\r\n\t *      \"sliceLinks\": {\r\n\t *        \"fillOpacity\": 0.5\r\n\t *      }\r\n\t *   }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @return Funnel links\r\n\t */\r\n\tpublic get sliceLinks(): ListTemplate<this[\"_slice\"]> {\r\n\t\tif (!this._sliceLinks) {\r\n\t\t\tlet sliceLink = new FunnelSlice();\r\n\t\t\tsliceLink.applyOnClones = true;\r\n\t\t\tsliceLink.fillOpacity = 0.5;\r\n\t\t\tsliceLink.expandDistance = - 0.3;\r\n\t\t\tsliceLink.hiddenState.properties.opacity = 0;\r\n\r\n\t\t\tthis._disposers.push(sliceLink);\r\n\r\n\t\t\tthis._sliceLinks = new ListTemplate(sliceLink);\r\n\t\t\tthis._disposers.push(new ListDisposer(this._sliceLinks));\r\n\t\t}\r\n\t\treturn this._sliceLinks;\r\n\t}\r\n\r\n\t/**\r\n\t * Shows hidden series.\r\n\t *\r\n\t * @param duration  Duration of reveal animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet delay: number = 0;\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (this.sequencedInterpolation) {\r\n\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t}\r\n\t\t\tdataItem.show(interpolationDuration, delay, [\"value\"]);\r\n\t\t});\r\n\r\n\t\tlet animation = super.show(duration);\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param duration  Duration of hiding animation (ms)\r\n\t * @return Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\t\tlet fields: string[] = [\"value\"];\r\n\t\tlet value: number = 0;\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet delay: number = 0;\r\n\t\tlet interpolationDuration = this.hiddenState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (this.sequencedInterpolation) {\r\n\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t}\r\n\t\t\tdataItem.hide(interpolationDuration, delay, value, fields);\r\n\t\t});\r\n\r\n\t\tlet animation: Animation = super.hide(duration);\r\n\t\tif (animation && !animation.isFinished()) {\r\n\t\t\tanimation.delay(delay);\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected setAlignLabels(value: boolean) {\r\n\t\tsuper.setAlignLabels(value);\r\n\t\tthis.ticks.template.disabled = !value;\r\n\t\tlet labelsContainer = this.labelsContainer;\r\n\t\tif (labelsContainer) {\r\n\t\t\t// do not align\r\n\t\t\tif (!value) {\r\n\t\t\t\tlabelsContainer.width = percent(100);\r\n\t\t\t\tlabelsContainer.height = percent(100);\r\n\t\t\t}\r\n\t\t\t//align\r\n\t\t\telse {\r\n\t\t\t\tlabelsContainer.height = undefined;\r\n\t\t\t\tlabelsContainer.width = undefined;\r\n\t\t\t\tlabelsContainer.margin(10, 10, 10, 10);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.labelsOpposite = this.labelsOpposite;\r\n\t}\r\n\r\n\t/**\r\n\t * Put labels on the oppsite side of the series?\r\n\t *\r\n\t * This setting is only used if `alignLabels = true`.\r\n\t *\r\n\t * If set to `true` (default) labels will be drawn to the right (on vertical\r\n\t * series), or to the bottom (on horizontal series).\r\n\t *\r\n\t * If set to `false`, labels will be positioned to the left or top\r\n\t * respectively.\r\n\t *\r\n\t * @default true\r\n\t * @since 4.1.13\r\n\t * @param  value  Labels on opposite side?\r\n\t */\r\n\tpublic set labelsOpposite(value: boolean) {\r\n\t\tthis.setPropertyValue(\"labelsOpposite\", value)\r\n\t\tlet labelTemplate = this.labels.template;\r\n\r\n\t\tlet labelAlign: Align = \"none\";\r\n\t\tlet labelValign: VerticalAlign = \"none\";\r\n\r\n\t\tif (!this.alignLabels) {\r\n\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\tlabelAlign = \"center\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabelValign = \"middle\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// opposite (left/bottom)\r\n\t\t\tif (value) {\r\n\t\t\t\tthis.labelsContainer.toFront();\r\n\t\t\t\t// left\r\n\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\tthis.ticks.template.locationX = 1;\r\n\t\t\t\t\tlabelTemplate.horizontalCenter = \"left\";\r\n\t\t\t\t\tlabelAlign = \"right\";\r\n\t\t\t\t}\r\n\t\t\t\t// bottom\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.ticks.template.locationY = 1;\r\n\t\t\t\t\tlabelTemplate.horizontalCenter = \"right\";\r\n\t\t\t\t\tlabelValign = \"bottom\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// non oposite (right/top)\r\n\t\t\telse {\r\n\t\t\t\tthis.labelsContainer.toBack();\r\n\t\t\t\t// right\r\n\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\tthis.ticks.template.locationX = 0;\r\n\t\t\t\t\tlabelAlign = \"left\";\r\n\t\t\t\t}\r\n\t\t\t\t// top\r\n\t\t\t\telse {\r\n\t\t\t\t\tlabelValign = \"top\";\r\n\t\t\t\t\tthis.ticks.template.locationY = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlabelTemplate.align = labelAlign;\r\n\t\tlabelTemplate.valign = labelValign;\r\n\r\n\t\tthis.validateLayout();\r\n\t\tthis.ticks.each((tick) => {\r\n\t\t\ttick.invalidate();\r\n\t\t})\r\n\t\tthis.invalidateDataItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Labels on opposite side?\r\n\t */\r\n\tpublic get labelsOpposite(): boolean {\r\n\t\treturn this.getPropertyValue(\"labelsOpposite\");\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"FunnelSeries\"] = FunnelSeries;\r\nregistry.registeredClasses[\"FunnelSeriesDataItem\"] = FunnelSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/FunnelSeries.ts","/**\r\n * Defines Pyramid Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IFunnelSeriesAdapters, IFunnelSeriesDataFields, IFunnelSeriesEvents, IFunnelSeriesProperties, FunnelSeries, FunnelSeriesDataItem } from \"./FunnelSeries\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PyramidSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PyramidSeriesDataItem extends FunnelSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PyramidSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PyramidSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesDataFields extends IFunnelSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesProperties extends IFunnelSeriesProperties {\r\n\r\n\t/**\r\n\t * Bottom width in pixels or percent\r\n\t */\r\n\tbottomWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Top width in pixels or percent\r\n\t */\r\n\ttopWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t */\r\n\tpyramidHeight?: number | Percent;\r\n\r\n\t/**\r\n\t * Indicates whether slice value should sould influence its height or area\r\n\t * size.\r\n\t *\r\n\t * @default \"area\"\r\n\t */\r\n\tvalueIs?: \"height\" | \"area\";\r\n}\r\n\r\n/**\r\n * Defines events for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesEvents extends IFunnelSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PyramidSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPyramidSeriesAdapters extends IFunnelSeriesAdapters, IPyramidSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPyramidSeriesEvents} for a list of available Events\r\n * @see {@link IPyramidSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PyramidSeries extends FunnelSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPyramidSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPyramidSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPyramidSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPyramidSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PyramidSeriesDataItem;\r\n\r\n\t/**\r\n\t * [_nextWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextWidth: number;\r\n\r\n\tprotected _pyramidHeight: number;\r\n\r\n\tprotected _pyramidWidth: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PyramidSeries\";\r\n\t\tthis.topWidth = percent(0);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.pyramidHeight = percent(100);\r\n\t\tthis.valueIs = \"area\";\r\n\r\n\t\tthis.sliceLinks.template.width = 0;\r\n\t\tthis.sliceLinks.template.height = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PyramidSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t\tthis._nextWidth = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * [getNextValue description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getNextValue(dataItem: FunnelSeriesDataItem): number {\r\n\t\tlet index = dataItem.index;\r\n\t\tlet nextValue: number = dataItem.getWorkingValue(\"value\");\r\n\t\tif (index < this.dataItems.length - 1) {\r\n\t\t\tlet nextItem = this.dataItems.getIndex(index + 1);\r\n\t\t\tnextValue = nextItem.getWorkingValue(\"value\");\r\n\t\t}\r\n\t\tif (nextValue == 0) {\r\n\t\t\tnextValue = 0.000001;\r\n\t\t}\r\n\t\treturn nextValue;\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElements description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements() {\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\tif (dataItem.value > 0) {\r\n\t\t\t\tlet relValue = dataItem.getWorkingValue(\"value\") / dataItem.value;\r\n\t\t\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\tmaxHeight -= (sliceLink.pixelHeight * relValue);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tmaxWidth -= (sliceLink.pixelWidth * relValue);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tthis._pyramidHeight = $utils.relativeToValue(this.pyramidHeight, maxHeight);\r\n\t\tthis._pyramidWidth = $utils.relativeToValue(this.pyramidHeight, maxWidth);\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet y = (maxHeight - this._pyramidHeight) / 2;\r\n\t\t\tthis.slicesContainer.y = y\r\n\t\t\tthis.labelsContainer.y = y;\r\n\t\t\tthis.ticksContainer.y = y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet x = (maxWidth - this._pyramidWidth) / 2;\r\n\t\t\tthis.slicesContainer.x = x;\r\n\t\t\tthis.labelsContainer.x = x;\r\n\t\t\tthis.ticksContainer.x = x;\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElements();\r\n\t}\r\n\r\n\t/**\r\n\t * [decorateSlice description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t */\r\n\tprotected decorateSlice(dataItem: this[\"_dataItem\"]) {\r\n\r\n\t\tlet sum = this.dataItem.values.value.absoluteSum;\r\n\r\n\t\tif (sum == 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet slice = dataItem.slice;\r\n\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\tlet label = dataItem.label;\r\n\t\tlet tick = dataItem.tick;\r\n\r\n\t\t// TODO can this be removed ?\r\n\t\tthis.getNextValue(dataItem);\r\n\r\n\t\tlet workingValue = Math.abs(dataItem.getWorkingValue(\"value\"));\r\n\r\n\t\tif (workingValue == 0) {\r\n\t\t\tworkingValue = 0.000001;\r\n\t\t}\r\n\r\n\t\tlet pyramidWidth = this._pyramidWidth;\r\n\t\tlet pyramidHeight = this._pyramidHeight;\r\n\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tlet linkWidth = sliceLink.pixelWidth;\r\n\t\tlet linkHeight = sliceLink.pixelHeight;\r\n\r\n\t\tif (dataItem.value == 0 && this.ignoreZeroValues) {\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.__disabled = false;\r\n\t\t}\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxWidth);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxWidth);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceHeight: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\r\n\t\t\t\tlet square = totalSquare * workingValue / sum;\r\n\r\n\t\t\t\tlet s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\r\n\r\n\t\t\t\tsliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsliceHeight = pyramidHeight * workingValue / sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceHeight * c;\r\n\t\t\t}\r\n\r\n\t\t\tslice.height = sliceHeight;\r\n\t\t\tslice.width = maxWidth;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.y = this._nextY;\r\n\t\t\t//slice.x = maxWidth / 2;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.x = maxWidth / 2;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.x = 0;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.y = slice.pixelY + slice.pixelHeight * tick.locationY + slice.dy;\r\n\r\n\t\t\tthis._nextY += slice.pixelHeight + linkHeight * workingValue / Math.max(Math.abs(dataItem.value), 0.00000001);\r\n\t\t\tsliceLink.y = this._nextY - linkHeight;\r\n\t\t\tsliceLink.x = maxWidth / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxHeight);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxHeight);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidWidth, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceWidth: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidWidth;\r\n\t\t\t\tlet square = totalSquare * workingValue / sum;\r\n\t\t\t\tsliceWidth = (sliceTopWidth - Math.sqrt(sliceTopWidth * sliceTopWidth - 2 * square * c)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceWidth * sliceTopWidth) / sliceWidth;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsliceWidth = pyramidWidth * workingValue / sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceWidth * c;\r\n\t\t\t}\r\n\r\n\t\t\tslice.width = sliceWidth;\r\n\t\t\tslice.height = maxHeight;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.x = this._nextY;\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.y = maxHeight / 2;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.y = this.labelsContainer.measuredHeight;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.x = slice.pixelX + slice.pixelWidth * tick.locationX + slice.dx;\r\n\r\n\t\t\tthis._nextY += slice.pixelWidth + linkWidth * workingValue / Math.max(Math.abs(dataItem.value), 0.00000001);\r\n\t\t\tsliceLink.x = this._nextY - linkWidth;\r\n\t\t\tsliceLink.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tthis._nextWidth = slice.bottomWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's tip in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` (default) means the pyramid will be perfectly pointy.\r\n\t * `50%` will have a cut off / blunt top that is half the width of the chart.\r\n\t * `100%` will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @default 0%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set topWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"topWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get topWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"topWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t *\r\n\t *\r\n\t * @default 100%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set pyramidHeight(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"pyramidHeight\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get pyramidHeight(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"pyramidHeight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's bottom (bsae) in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` means the pyramid's botto will be pointy.\r\n\t * `50%` will have a cut off / blunt bottom that is half the width of the chart.\r\n\t * `100%` (default) will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set bottomWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"bottomWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get bottomWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"bottomWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates how slice's value will influence its size.\r\n\t *\r\n\t * `\"area\"` (default) means that the whole area of the pyramid (counting in\r\n\t * modifications by `topWidth` and `bottomWidth`) will be divvied up between\r\n\t * slices based on their value.\r\n\t *\r\n\t * With this setting at `\"area\"` the area of the trapezoids of each slice\r\n\t * will represent their value relatively to values of the other slices.\r\n\t *\r\n\t * This is a correct way to depict \"weight\" of each slice based on their\r\n\t * values.\r\n\t *\r\n\t * `\"height\"` means whole height (as opposed to area) of the pyramid will be\r\n\t * divvied up between slices. Actual slice width or area is not counted in.\r\n\t *\r\n\t * From the data-viz standpoint this does not make a lot of sense, since\r\n\t * slices with lesser values might appear more prominent if they are placed\r\n\t * towards thick end of the pyramid since their areas will be bigger.\r\n\t *\r\n\t * @default \"area\"\r\n\t * @param {\"area\" | \"height\"}\r\n\t */\r\n\tpublic set valueIs(value: \"area\" | \"height\") {\r\n\t\tif (this.setPropertyValue(\"valueIs\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"area\" | \"height\"}\r\n\t */\r\n\tpublic get valueIs(): \"area\" | \"height\" {\r\n\t\treturn this.getPropertyValue(\"valueIs\");\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PyramidSeries\"] = PyramidSeries;\r\nregistry.registeredClasses[\"PyramidSeriesDataItem\"] = PyramidSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PyramidSeries.ts","/**\r\n * Defines Pictorial Stacked Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPyramidSeriesAdapters, IPyramidSeriesDataFields, IPyramidSeriesEvents, IPyramidSeriesProperties, PyramidSeries, PyramidSeriesDataItem } from \"./PyramidSeries\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PictorialStackedSeriesDataItem extends PyramidSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: PictorialStackedSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PictorialStackedSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesDataFields extends IPyramidSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesProperties extends IPyramidSeriesProperties {\r\n\r\n\t/**\r\n\t * Relative location to start series from.\r\n\t *\r\n\t * @default 0\r\n\t */\r\n\tstartLocation?: number;\r\n\r\n\t/**\r\n\t * Relative location to end series at.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\tendLocation?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesEvents extends IPyramidSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPictorialStackedSeriesAdapters extends IPyramidSeriesAdapters, IPictorialStackedSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a PictorialStacked series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPictorialStackedSeriesEvents} for a list of available Events\r\n * @see {@link IPictorialStackedSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PictorialStackedSeries extends PyramidSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IPictorialStackedSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IPictorialStackedSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IPictorialStackedSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IPictorialStackedSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t */\r\n\tpublic _dataItem: PictorialStackedSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds a Sprite that acts as an intelligent mask for the serries.\r\n\t */\r\n\tprotected _maskSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PictorialStackedSeries\";\r\n\t\tthis.topWidth = percent(100);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.valueIs = \"height\";\r\n\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.startLocation = 0;\r\n\t\tthis.endLocation = 1;\r\n\t\tthis.align = \"center\";\r\n\t\tthis.valign = \"middle\";\r\n\r\n\t\tthis._maskSprite = this.slicesContainer.createChild(Sprite);\r\n\t\tthis._maskSprite.visible = false;\r\n\t\tthis._maskSprite.zIndex = 100;\r\n\t\tthis._maskSprite.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Sizes the mask to fit the series.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\r\n\t\tlet maxWidth = this.slicesContainer.maxWidth;\r\n\t\tlet maxHeight = this.slicesContainer.maxHeight;\r\n\r\n\t\tlet maskSprite = this._maskSprite;\r\n\t\t//maskSprite.validatePosition(); // for some reason size of the maskSprite is 0x0 after we removed validatePosition in afterdraw\r\n\r\n\t\tlet pictureWidth = maskSprite.measuredWidth / maskSprite.scale;\r\n\t\tlet pictureHeight = maskSprite.measuredHeight / maskSprite.scale;\r\n\r\n\t\tlet scale = $math.min(maxHeight / pictureHeight, maxWidth / pictureWidth);\r\n\r\n\t\tif (scale == Infinity) {\r\n\t\t\tscale = 1; // can't return here, won't draw legend properly\r\n\t\t}\r\n\r\n\t\tscale = $math.max(0.001, scale);\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tlet newWidth = $math.min(maxWidth, pictureWidth * scale);\r\n\t\tlet newHeight = $math.min(maxHeight, pictureHeight * scale);\r\n\r\n\t\tmaskSprite.scale = scale;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tthis.topWidth = newWidth + 4;\r\n\t\t\tthis.bottomWidth = newWidth + 4;\r\n\t\t\tthis.pyramidHeight = newHeight * (endLocation - startLocation);\r\n\t\t\tmaskSprite.x = maxWidth / 2;\r\n\t\t\tmaskSprite.y = newHeight / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.topWidth = newHeight + 4;\r\n\t\t\tthis.bottomWidth = newHeight + 4;\r\n\t\t\tthis.pyramidHeight = newWidth * (endLocation - startLocation);\r\n\t\t\tmaskSprite.valign = \"middle\";\r\n\t\t\tmaskSprite.x = newWidth / 2;\r\n\t\t\tmaskSprite.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tmaskSprite.verticalCenter = \"middle\";\r\n\t\tmaskSprite.horizontalCenter = \"middle\";\r\n\r\n\t\tsuper.validateDataElements();\r\n\r\n\t\tlet y: number;\r\n\t\tlet x: number;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tif (this.valign == \"bottom\") {\r\n\t\t\t\ty = (maxHeight - newHeight);\r\n\t\t\t}\r\n\t\t\tif (this.valign == \"middle\") {\r\n\t\t\t\ty = (maxHeight - newHeight) / 2;\r\n\t\t\t}\r\n\t\t\tif (this.valign == \"top\") {\r\n\t\t\t\ty = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.align == \"left\") {\r\n\t\t\t\tx = -(maxWidth - newWidth) / 2;\r\n\t\t\t}\r\n\t\t\tif (this.align == \"center\") {\r\n\t\t\t\tx = 0;\r\n\t\t\t}\r\n\t\t\tif (this.align == \"right\") {\r\n\t\t\t\tx = (maxWidth - newWidth) / 2;\r\n\t\t\t}\r\n\r\n\t\t\tthis.slices.template.dy = startLocation * newHeight;\r\n\t\t\tif (this.alignLabels) {\r\n\t\t\t\tthis.slicesContainer.dx = x;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.valign == \"bottom\") {\r\n\t\t\t\ty = (maxHeight - newHeight) / 2;\r\n\t\t\t}\r\n\t\t\tif (this.valign == \"middle\") {\r\n\t\t\t\ty = 0;\r\n\t\t\t}\r\n\t\t\tif (this.valign == \"top\") {\r\n\t\t\t\ty = -(maxHeight - newHeight) / 2;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.align == \"left\") {\r\n\t\t\t\tx = 0;\r\n\t\t\t}\r\n\t\t\tif (this.align == \"center\") {\r\n\t\t\t\tx = (maxWidth - newWidth) / 2;\r\n\t\t\t}\r\n\t\t\tif (this.align == \"right\") {\r\n\t\t\t\tx = (maxWidth - newWidth);\r\n\t\t\t}\r\n\r\n\t\t\tthis.slices.template.dx = startLocation * newWidth;\r\n\t\t\tif (this.alignLabels) {\r\n\t\t\t\tthis.slicesContainer.dy = y;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.slicesContainer.x = x;\r\n\t\tthis.labelsContainer.x = x;\r\n\t\tthis.ticksContainer.x = x;\r\n\r\n\t\tthis.slicesContainer.y = y;\r\n\t\tthis.labelsContainer.y = y;\r\n\t\tthis.ticksContainer.y = y;\r\n\r\n\t\tif (newWidth > 0 && newHeight > 0) {\r\n\t\t\tthis.slicesContainer.mask = maskSprite;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PictorialStackedSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Sprite]] element that is used as a series mask.\r\n\t *\r\n\t * If set, this element's shape will be used to apply shape to the whole\r\n\t * stacked pictorial series.\r\n\t *\r\n\t * You can use this element's `path` property to set an SVG path for the\r\n\t * shape:\r\n\t *\r\n\t * ```TypeScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JSON\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * {\r\n\t *   // ...\r\n\t *   \"series\": [{\r\n\t *     \"type\": \"PictorialStackedSeries\",\r\n\t *     // ...\r\n\t *     \"maskSprite\": {\r\n\t *       \"path\": iconPath\r\n\t *     }\r\n\t *   }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @return Mask sprite\r\n\t */\r\n\tpublic get maskSprite(): Sprite {\r\n\t\treturn this._maskSprite;\r\n\t}\r\n\r\n\t/**\r\n\t * Inits FunnelSlice.\r\n\t *\r\n\t * @param slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tsuper.initSlice(slice);\r\n\r\n\t\tlet hs = slice.states.getKey(\"hover\");\r\n\t\tif (hs) {\r\n\t\t\ths.properties.expandDistance = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Relative location to start series from.\r\n\t *\r\n\t * Range of values: 0 to 1.\r\n\t *\r\n\t * This setting indicates where actual slices will start relatively to the\r\n\t * whole height/width of the series.\r\n\t *\r\n\t * For example, if we want slices to start at 30% from the top/left of the\r\n\t * series, we can set `startLocation = 0.3`.\r\n\t *\r\n\t * To fill shape outside of the location range, use background of the\r\n\t * property `slicesContainer`.\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.startLocation = 0.2;\r\n\t * series.endLocation = 0.8;\r\n\t * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.startLocation = 0.2;\r\n\t * series.endLocation = 0.8;\r\n\t * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t *   // ...\r\n\t *   \"series\": [{\r\n\t *     // ...\r\n\t *     \"startLocation\": 0.2,\r\n\t *     \"endLocation\": 0.8,\r\n\t *     \"slicesContainer\": {\r\n\t *       \"background\": {\r\n\t *         \"fill\": \"#eee\"\r\n\t *       }\r\n\t *     }\r\n\t *   }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @default 0\r\n\t * @since 4.1.13\r\n\t * @param  value  Start location\r\n\t */\r\n\tpublic set startLocation(value: number) {\r\n\t\tif (this.setPropertyValue(\"startLocation\", value)) {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return  Start location\r\n\t */\r\n\tpublic get startLocation(): number {\r\n\t\treturn this.getPropertyValue(\"startLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Relative location to end series at.\r\n\t *\r\n\t * Range of values: 0 to 1.\r\n\t *\r\n\t * This setting indicates where actual slices will end relatively to the\r\n\t * whole height/width of the series.\r\n\t *\r\n\t * For example, if we want slices to end at 70% from the top/left of the\r\n\t * series, we can set `endLocation = 0.7`.\r\n\t *\r\n\t * To fill shape outside of the location range, use background of the\r\n\t * property `slicesContainer`.\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.startLocation = 0.2;\r\n\t * series.endLocation = 0.8;\r\n\t * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.startLocation = 0.2;\r\n\t * series.endLocation = 0.8;\r\n\t * series.slicesContainer.background.fill = am4core.color(\"#eee\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t *   // ...\r\n\t *   \"series\": [{\r\n\t *     // ...\r\n\t *     \"startLocation\": 0.2,\r\n\t *     \"endLocation\": 0.8,\r\n\t *     \"slicesContainer\": {\r\n\t *       \"background\": {\r\n\t *         \"fill\": \"#eee\"\r\n\t *       }\r\n\t *     }\r\n\t *   }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @default 1\r\n\t * @since 4.1.13\r\n\t * @param  value  End location\r\n\t */\r\n\tpublic set endLocation(value: number) {\r\n\t\tif (this.setPropertyValue(\"endLocation\", value)) {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return End location\r\n\t */\r\n\tpublic get endLocation(): number {\r\n\t\treturn this.getPropertyValue(\"endLocation\");\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PictorialStackedSeries\"] = PictorialStackedSeries;\r\nregistry.registeredClasses[\"PictorialStackedSeriesDataItem\"] = PictorialStackedSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","/**\r\n * Module that defines everything related to building Cone Columns.\r\n * It is a container which has coneColumn element which is a Cone.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Cone } from \"../../core/elements/3d/Cone\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeColumnAdapters extends IColumnAdapters, IConeColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates ConeColumns.\r\n *\r\n * @see {@link IConeColumnEvents} for a list of available events\r\n * @see {@link IConeColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ConeColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IConeColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IConeColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IConeColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Cone column element\r\n\t */\r\n\tpublic coneColumn: Cone;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tcreateAssets() {\r\n\t\tthis.coneColumn = this.createChild(Cone);\r\n\t\tthis.coneColumn.shouldClone = false;\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = <any>this.coneColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[ConeColumn]].\r\n\t *\r\n\t * @param source Source ConeColumn\r\n\t */\r\n\tcopyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.coneColumn) {\r\n\t\t\tthis.coneColumn.copyFrom(source.coneColumn);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeColumn\"] = ConeColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ConeColumn.ts","/**\r\n * ConeSeries module\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { ConeColumn } from \"../elements/ConeColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ConeSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ConeSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: ConeColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: ConeSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeSeriesAdapters extends IColumnSeriesAdapters, IConeSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a cone graph.\r\n *\r\n * @see {@link IConeSeriesEvents} for a list of available Events\r\n * @see {@link IConeSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ConeSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Type of column.\r\n\t */\r\n\tpublic _column: ConeColumn;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ConeSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: IConeSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IConeSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IConeSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IConeSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ConeSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new ConeColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\t\t\r\n\t\tlet dx = 0;\r\n\t\tlet dy = 0;\r\n\t\tlet column = this.columns.getIndex(0);\r\n\r\n\t\tif(column){\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tdy = column.coneColumn.innerWidth / 2 + 1\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdx = column.coneColumn.innerHeight / 2 + 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn $path.rectToPath({\r\n\t\t\t\tx: -dx,\r\n\t\t\t\ty: 0,\r\n\t\t\t\twidth: this.xAxis.axisLength + dx,\r\n\t\t\t\theight: this.yAxis.axisLength + dy\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tlet column = dataItem.column;\r\n\t\tif(column){\r\n\t\t\tlet coneColumn = dataItem.column.coneColumn;\r\n\r\n\t\t\tconeColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tconeColumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconeColumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeSeries\"] = ConeSeries;\r\nregistry.registeredClasses[\"ConeSeriesDataItem\"] = ConeSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ConeSeries.ts","/**\r\n * Module that defines everything related to building Curved Columns.\r\n * It is a container which has CurvedColumn element which is a Sprite.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnProperties extends IColumnProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Tension\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * Orientation of the column\r\n\t *\r\n\t * @default \"vertical\"\r\n\t */\r\n\torientation?: Orientation;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnAdapters extends IColumnAdapters, ICurvedColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates CurvedColumns.\r\n *\r\n * @see {@link ICurvedColumnEvents} for a list of available events\r\n * @see {@link ICurvedColumnAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICurvedColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICurvedColumnEvents;\r\n\r\n\t/**\r\n\t * The element that holds curved column shape.\r\n\t */\r\n\tpublic curvedColumn: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * [createAssets description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected createAssets(): void {\r\n\t\tthis.curvedColumn = this.createChild(Sprite);\r\n\t\tthis.curvedColumn.shouldClone = false;\r\n\r\n\t\tthis.setPropertyValue(\"tension\", 0.7);\r\n\r\n\t\tthis.width = percent(120);\r\n\t\tthis.height = percent(120);\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = <any>this.curvedColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tlet w = this.realWidth;\r\n\t\tlet h = this.realHeight;\r\n\t\tlet x = this.realX - this.pixelX;\r\n\t\tlet y = this.realY - this.pixelY;\r\n\r\n\t\tlet points: IPoint[];\r\n\r\n\t\t// TODO can this be removed ?\r\n\t\t$utils.used(this.width);\r\n\r\n\t\tlet tensionX = 1;\r\n\t\tlet tensionY = 1;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\ttensionX = this.tension;\r\n\t\t\tpoints = [{ x: 0, y: h + y }, { x: w / 2, y: y }, { x: w, y: h + y }];\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttensionY = this.tension;\r\n\t\t\tpoints = [{ x: x, y: 0 }, { x: x + w, y: h / 2 }, { x: x, y: h }];\r\n\t\t}\r\n\r\n\t\tlet path = $path.moveTo(points[0]) + new $smoothing.Tension(tensionX, tensionY).smooth(points);\r\n\t\tthis.column.path = path;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[CurvedColumn]].\r\n\t *\r\n\t * @param source  Source CurvedColumn\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.curvedColumn) {\r\n\t\t\tthis.curvedColumn.copyFrom(source.curvedColumn);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension of the curve.\r\n\t *\r\n\t * Tension defines how \"lose\" the line will be.\r\n\t *\r\n\t * 1 is the maximum tension which would result in pointy columns with\r\n\t * straight edges.\r\n\t *\r\n\t * The smaller the tension th wider the column will be.\r\n\t *\r\n\t * @default 0.7\r\n\t * @param value tension (0-1)\r\n\t */\r\n\tpublic set tension(value: number) {\r\n\t\tthis.setPropertyValue(\"tension\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tension (0-1)\r\n\t */\r\n\tpublic get tension(): number {\r\n\t\treturn this.getPropertyValue(\"tension\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the column.\r\n\t *\r\n\t * Available options: \"vertical\" (default) and \"horizontal\".\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @param value  Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tthis.setPropertyValue(\"orientation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumn\"] = CurvedColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CurvedColumn.ts","/**\r\n * CurvedColumnSeries module.\r\n *\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { CurvedColumn } from \"../elements/CurvedColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CurvedColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: CurvedColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnSeriesAdapters extends IColumnSeriesAdapters, ICurvedColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a curved columns graph.\r\n *\r\n * @see {@link ICurvedColumnSeriesEvents} for a list of available Events\r\n * @see {@link ICurvedColumnSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines type of the column.\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\t/**\r\n\t * Defines type of the data item.\r\n\t */\r\n\tpublic _dataItem: CurvedColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t */\r\n\tpublic _dataFields: ICurvedColumnSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICurvedColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICurvedColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CurvedColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for the curved column.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new CurvedColumn();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\r\n\t\tlet column = dataItem.column;\r\n\t\tcolumn = dataItem.column;\r\n\r\n\t\tif (column) {\r\n\t\t\tlet curvedColumn = dataItem.column.curvedColumn;\r\n\r\n\t\t\tcurvedColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tcolumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\t\t\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumnSeries\"] = CurvedColumnSeries;\r\nregistry.registeredClasses[\"CurvedColumnSeriesDataItem\"] = CurvedColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface ICircleBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface ICircleBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICircleBulletAdapters extends IBulletAdapters, ICircleBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class CircleBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: ICircleBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: ICircleBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ICircleBulletEvents;\r\n\r\n\t/**\r\n\t * A label (textual) element for the bullet.\r\n\t */\r\n\tpublic circle: Circle;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CircleBullet\";\r\n\r\n\t\tlet circle = this.createChild(Circle);\r\n\t\tcircle.shouldClone = false;\r\n\t\tcircle.radius = 5;\r\n\t\tcircle.isMeasured = false;\r\n\t\tthis.circle = circle;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[CircleBullet]].\r\n\t *\r\n\t * @param source  Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.circle.copyFrom(source.circle);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CircleBullet\"] = CircleBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CircleBullet.ts","/**\r\n * Bullet module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Bullet, IBulletProperties, IBulletAdapters, IBulletEvents } from \"./Bullet\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Bullet]]\r\n */\r\nexport interface IErrorBulletProperties extends IBulletProperties { }\r\n\r\n/**\r\n * Defines events for [[Bullet]]\r\n */\r\nexport interface IErrorBulletEvents extends IBulletEvents { }\r\n\r\n/**\r\n * Defines adapters\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface IErrorBulletAdapters extends IBulletAdapters, IErrorBulletProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a bullet with a textual label.\r\n *\r\n * Uses [[Label]] instance to draw the label, so the label itself is\r\n * configurable.\r\n *\r\n * @see {@link IBulletEvents} for a list of available events\r\n * @see {@link IBulletAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ErrorBullet extends Bullet {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IErrorBulletProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IErrorBulletAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IErrorBulletEvents;\r\n\r\n\tpublic errorLine:Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ErrorBullet\";\r\n\t\tthis.errorLine = this.createChild(Sprite);\r\n\t\tthis.errorLine.shouldClone = false;\r\n\t\tthis.width = 20;\r\n\t\tthis.height = 20;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.isDynamic = true;\r\n\t}\r\n\r\n\r\n\tvalidatePosition(){\r\n\t\tsuper.validatePosition();\r\n\t\tlet w = this.pixelWidth / 2;\r\n\t\tlet h = this.pixelHeight / 2;\r\n\r\n\t\tthis.errorLine.path = $path.moveTo({x:-w, y:-h}) + $path.lineTo({x:w, y:-h}) + $path.moveTo({x:0, y:-h}) + $path.lineTo({x:0, y:h}) + $path.moveTo({x:-w, y:h}) + $path.lineTo({x:w, y:h});\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all proprities and related stuff from another instance of\r\n\t * [[ErrorBullet]].\r\n\t *\r\n\t * @param source  Source element\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.errorLine.copyFrom(source.errorLine);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ErrorBullet\"] = ErrorBullet;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ErrorBullet.ts","/**\r\n * Functionality for drawing simple NavigationBar.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Component, IComponentProperties, IComponentAdapters, IComponentEvents, IComponentDataFields } from \"../../core/Component\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { DataItem } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { TextLink } from \"../../core/elements/TextLink\";\r\nimport { Triangle } from \"../../core/elements/Triangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[NavigationBar]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class NavigationBarDataItem extends DataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: NavigationBar;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBarDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Name of the navigation bar item.\r\n\t *\r\n\t * @param value  Name\r\n\t */\r\n\tpublic set name(value: string) {\r\n\t\tthis.setProperty(\"name\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties[\"name\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarDataFields extends IComponentDataFields {\r\n\r\n\t/**\r\n\t * Name of nav var item.\r\n\t */\r\n\tname?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarProperties extends IComponentProperties {\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[NavigationBar]].\r\n */\r\nexport interface INavigationBarEvents extends IComponentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[NavigationBar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface INavigationBarAdapters extends IComponentAdapters, INavigationBarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * NavigationBar class can be used to create a multi-level breadcrumb-style\r\n * navigation control.\r\n *\r\n * @see {@link INavigationBarEvents} for a list of available events\r\n * @see {@link INavigationBarAdapters} for a list of available Adapters\r\n * @todo Implement better\r\n * @important\r\n */\r\nexport class NavigationBar extends Component {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: INavigationBarDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: INavigationBarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: INavigationBarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: INavigationBarEvents;\r\n\r\n\t/**\r\n\t * A list of breadcrumbs (links) in the nav bar.\r\n\t */\r\n\tpublic links: ListTemplate<TextLink>;\r\n\r\n\t/**\r\n\t * [_linksIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _linksIterator: $iter.ListIterator<TextLink>;\r\n\r\n\t/**\r\n\t * [_separatorsIterator description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _separatorsIterator: $iter.ListIterator<Sprite>;\r\n\r\n\t/**\r\n\t * A reference to the link which is currently active.\r\n\t */\r\n\tpublic activeLink: TextLink;\r\n\r\n\t/**\r\n\t * A list of elements used as nav bar item separators.\r\n\t */\r\n\tpublic separators: ListTemplate<Triangle>;\r\n\r\n\t/**\r\n\t * Identifies the type of the [[DataItem]] used in this element.\r\n\t */\r\n\tpublic _dataItem!: NavigationBarDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"NavigationBar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet textLink = new TextLink();\r\n\t\ttextLink.valign = \"middle\";\r\n\t\ttextLink.paddingTop = 8;\r\n\t\ttextLink.paddingBottom = 8;\r\n\r\n\t\tthis.paddingBottom = 2;\r\n\r\n\t\tthis.links = new ListTemplate<TextLink>(textLink);\r\n\t\tthis._disposers.push(new ListDisposer(this.links));\r\n\t\tthis._disposers.push(textLink);\r\n\r\n\t\tthis._linksIterator = new $iter.ListIterator<TextLink>(this.links, () => this.links.create());\r\n\t\tthis._linksIterator.createNewItems = true;\r\n\r\n\t\tlet triangle = new Triangle();\r\n\t\ttriangle.direction = \"right\";\r\n\t\ttriangle.width = 8;\r\n\t\ttriangle.height = 12;\r\n\t\ttriangle.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\ttriangle.fillOpacity = 0.5;\r\n\t\ttriangle.valign = \"middle\";\r\n\t\ttriangle.marginLeft = 10;\r\n\t\ttriangle.marginRight = 10;\r\n\r\n\t\tthis.separators = new ListTemplate<Triangle>(triangle);\r\n\t\tthis._disposers.push(new ListDisposer(this.separators));\r\n\t\tthis._disposers.push(triangle);\r\n\r\n\t\tlet activeLink = new TextLink();\r\n\t\tthis.activeLink = activeLink;\r\n\t\tactiveLink.copyFrom(textLink);\r\n\t\tactiveLink.valign = \"middle\";\r\n\t\tactiveLink.fontWeight = \"bold\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.layout = \"grid\";\r\n\t\tthis.dataFields.name = \"name\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Completely redraws the navigation bar.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tthis.removeChildren();\r\n\t\tthis._linksIterator.reset();\r\n\t\tsuper.validateDataElements();\r\n\t\t//@todo: dispose\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a visual element for a data item (nav item).\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem  Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\tlet textLink: TextLink;\r\n\t\tif (dataItem.index < this.dataItems.length - 1) {\r\n\t\t\ttextLink = this._linksIterator.getLast();\r\n\t\t\ttextLink.parent = this;\r\n\t\t\tlet separator = this.separators.create();\r\n\t\t\tseparator.parent = this;\r\n\t\t\tseparator.valign = \"middle\";\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttextLink = this.activeLink;\r\n\t\t\ttextLink.events.copyFrom(this.links.template.events);\r\n\t\t\ttextLink.hide(0);\r\n\t\t\ttextLink.show();\r\n\t\t\ttextLink.parent = this;\r\n\t\t}\r\n\t\ttextLink.dataItem = dataItem;\r\n\t\ttextLink.text = dataItem.name;\r\n\t\ttextLink.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"NavigationBar\"] = NavigationBar;\r\nregistry.registeredClasses[\"NavigationBarDataItem\"] = NavigationBarDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/NavigationBar.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { XYCursor, IXYCursorAdapters, IXYCursorEvents, IXYCursorProperties } from \"./XYCursor\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { ISpriteEvents } from \"../../core/Sprite\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorProperties extends IXYCursorProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t */\r\n\tstartAngle: number;\r\n\r\n\t/**\r\n\t * Ending angle of the cursor's radial line.\r\n\t */\r\n\tendAngle: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorEvents extends IXYCursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarCursorAdapters extends IXYCursorAdapters, IRadarCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Cursor for [[RadarChart]].\r\n *\r\n * @see {@link IRadarCursorEvents} for a list of available events\r\n * @see {@link IRadarCursorAdapters} for a list of available Adapters\r\n */\r\nexport class RadarCursor extends XYCursor {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t */\r\n\tpublic _properties!: IRadarCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t */\r\n\tpublic _adapter!: IRadarCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IRadarCursorEvents;\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\r\n\tprotected _prevAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarCursor\";\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.mask = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param point  Point to check\r\n\t * @return Fits within container?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\tlet radius = $math.getDistance(point);\r\n\r\n\t\t//if(!$math.isAngleInRange(angle, this.startAngle, this.endAngle)){\r\n\t\t\t//return false;\r\n\t\t//}\r\n\t\tif (radius < this.truePixelRadius + 1 && radius > this.pixelInnerRadius - 1) { // ok to add/remove some\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t *\r\n\t * @param value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the cursor's radial line.\r\n\t *\r\n\t * @param value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\tprotected triggerMoveReal(point:IPoint) {\r\n\r\n\t\tif (!this.xAxis || (this.xAxis && (!this.xAxis.cursorTooltipEnabled || this.xAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineX(this.point);\r\n\t\t}\r\n\t\tif (!this.yAxis || (this.yAxis && (!this.yAxis.cursorTooltipEnabled || this.yAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineY(this.point);\r\n\t\t}\r\n\r\n\t\tthis.updateSelection();\r\n\t\tsuper.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the horizontal (circular) cursor's line.\r\n\t *\r\n\t * @param point New target point\r\n\t */\r\n\tprotected updateLineX(point: IPoint) {\r\n\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\tif (radius > 0 && $type.isNumber(startAngle) && $type.isNumber(endAngle) && $type.isNumber(innerRadius)) {\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\t\t\tlet path: string;\r\n\r\n\t\t\tif (this.lineX && this.lineX.visible) {\r\n\r\n\t\t\t\tthis.lineX.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t// fill\r\n\t\t\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\r\n\t\t\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet fillStartAngle: number = $math.fitAngleToRange($math.getAngle(startPoint), startAngle, endAngle);\r\n\t\t\t\t\t\tlet fillEndAngle: number = $math.fitAngleToRange($math.getAngle(endPoint), startAngle, endAngle);\r\n\r\n\t\t\t\t\t\tlet arc: number = fillEndAngle - fillStartAngle;\r\n\r\n\t\t\t\t\t\t// clockwise\r\n\t\t\t\t\t\t// this is needed, normalizeAngle doesn't solve it\r\n\t\t\t\t\t\tif (startAngle < endAngle) {\r\n\t\t\t\t\t\t\tif (arc < 0) {\r\n\t\t\t\t\t\t\t\tarc += 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// ccw\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\t\t\t\tarc -= 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tangle -= arc / 2;\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle, arc, radius)\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: innerRadius * $math.cos(angle + arc), y: innerRadius * $math.sin(angle + arc) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle + arc, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// line\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineX.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the vertical (radial) cursor's line.\r\n\t *\r\n\t * @param point New target point\r\n\t */\r\n\tprotected updateLineY(point: IPoint) {\r\n\t\tif (this.lineY && this.lineY.visible) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\t\t\tlet truePixelRadius = this.truePixelRadius;\r\n\t\t\tlet radius = $math.fitToRange($math.getDistance(point), 0, this.truePixelRadius);\r\n\t\t\tif ($type.isNumber(radius) && $type.isNumber(startAngle)) {\r\n\t\t\t\tthis.lineY.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\tlet path: string;\r\n\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\t\t\t// fill\r\n\t\t\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet innerRadius: number = $math.fitToRange($math.getDistance(startPoint), 0, truePixelRadius);\r\n\t\t\t\t\t\tradius = $math.fitToRange($math.getDistance(endPoint), 0, truePixelRadius);\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(endAngle), y: innerRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineY.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet truePixelRadius: number = this.truePixelRadius;\r\n\t\t\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\t\t\tlet startAngle: number = Math.min(this.startAngle, this.endAngle);\r\n\t\t\t\tlet endAngle: number = Math.max(this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), startAngle, endAngle);\r\n\t\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\r\n\t\t\t\tlet downRadius: number = $math.getDistance(downPoint);\r\n\t\t\t\tif (downRadius < truePixelRadius) {\r\n\r\n\t\t\t\t\tlet currentRadius = $math.fitToRange($math.getDistance(point), 0, truePixelRadius);\r\n\r\n\t\t\t\t\tthis._prevAngle = angle;\r\n\r\n\t\t\t\t\tlet path: string = $path.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t\tlet downSin: number = $math.sin(downAngle);\r\n\t\t\t\t\tlet downCos: number = $math.cos(downAngle);\r\n\r\n\t\t\t\t\tlet sin: number = $math.sin(angle);\r\n\t\t\t\t\tlet cos: number = $math.cos(angle);\r\n\r\n\t\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\") {\r\n\t\t\t\t\t\tpath += $path.lineTo({ x: radius * downCos, y: radius * downSin }) + $path.arcTo(downAngle, angle - downAngle, radius) + $path.lineTo({ x: innerRadius * cos, y: innerRadius * sin }) + $path.arcTo(angle, downAngle - angle, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomY\" || behavior == \"selectY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(startAngle), y: currentRadius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(endAngle), y: downRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, startAngle - endAngle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomXY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(downAngle), y: currentRadius * $math.sin(downAngle) }) + $path.arcTo(downAngle, angle - downAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(angle), y: downRadius * $math.sin(angle) }) + $path.arcTo(angle, downAngle - angle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.selection.path = path;\r\n\t\t\t\t}\r\n\t\t\t\tthis.selection.moveTo({ x: 0, y: 0 });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions() {\r\n\t\t// positions are used by axes or series\r\n\t\tlet chart: RadarChart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\tlet innerRadius = this.pixelInnerRadius;\r\n\t\t\tlet radius: number = this.truePixelRadius - innerRadius;\r\n\r\n\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(this.point), startAngle, endAngle);\r\n\t\t\tlet xPosition = ((angle - startAngle) / (endAngle - startAngle));\r\n\t\t\tthis.xPosition = xPosition;\r\n\r\n\t\t\tthis.yPosition = $math.fitToRange(($math.getDistance(this.point) - innerRadius) / radius, 0, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when it's triggered.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes horizontal position.\r\n\t *\r\n\t * @param event Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.xAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\t\tthis.updateLineX($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes vertical position.\r\n\t *\r\n\t * @todo Description\r\n\t * @param event Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.yAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\t\tthis.updateLineY($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * needs to be overriden\r\n\t * @ignore\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges(): void {\r\n\t\tlet downPoint = this.downPoint;\r\n\t\tif (downPoint) {\r\n\t\t\tlet upPoint: IPoint = this.upPoint;\r\n\r\n\t\t\tlet chart: RadarChart = this.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), this.startAngle, this.endAngle);\r\n\t\t\t\tlet upAngle: number = $math.fitAngleToRange($math.getAngle(upPoint), this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downRadius = $math.fitToRange($math.getDistance(downPoint), 0, radius);\r\n\t\t\t\tlet upRadius = $math.fitToRange($math.getDistance(upPoint), 0, radius);\r\n\r\n\t\t\t\tlet startX: number = 0;\r\n\t\t\t\tlet endX: number = 1;\r\n\r\n\t\t\t\tlet startY: number = 0;\r\n\t\t\t\tlet endY: number = 1;\r\n\r\n\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\t\t\t\t\tstartX = $math.round((downAngle - startAngle) / arc, 5);\r\n\t\t\t\t\tendX = $math.round((upAngle - startAngle) / arc, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (behavior == \"zoomY\" || behavior == \"selectY\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tstartY = $math.round(downRadius / radius, 5);\r\n\t\t\t\t\tendY = $math.round(upRadius / radius, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xRange = { start: Math.min(startX, endX), end: Math.max(startX, endX) };\r\n\t\t\t\tthis.yRange = { start: Math.min(startY, endY), end: Math.max(startY, endY) };\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when `updateSize`\r\n\t * is triggered.\r\n\t *\r\n\t * RadarCursor is quite complicated and needs own sizing logic.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void { }\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value  Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular line in pixels.\r\n\t *\r\n\t * @return Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.truePixelRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [truePixelRadius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @return Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get truePixelRadius(): number {\r\n\t\treturn $utils.relativeToValue(percent(100), $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value  Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular line in pixels.\r\n\t *\r\n\t * @return Inner radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRadius = percent(100 * innerRadius.value * this.chart.innerRadiusModifyer);\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeRadiusToValue(innerRadius, this.truePixelRadius) || 0;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\t// overriding xy method\r\n\t\treturn point;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarCursor\"] = RadarCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/RadarCursor.ts","import * as m from \"../es2015/charts\";\nwindow.am4charts = m;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./charts.js\n// module id = null\n// module chunks = "],"sourceRoot":""}

Anon7 - 2022
AnonSec Team