{"version":3,"sources":["webpack:///../../../../../src/.internal/charts/axes/AxisRendererCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisLabelCircular.ts","webpack:///../../../../../src/.internal/charts/axes/AxisFillCircular.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/CategoryAxis.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxisBreak.ts","webpack:///../../../../../src/.internal/charts/axes/DateAxis.ts","webpack:///../../../../../src/.internal/charts/series/XYSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/Cursor.ts","webpack:///../../../../../src/.internal/charts/cursors/XYCursor.ts","webpack:///../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","webpack:///../../../../../src/.internal/charts/types/XYChart.ts","webpack:///../../../../../src/.internal/charts/series/LineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/LineSeries.ts","webpack:///../../../../../src/.internal/charts/series/RadarSeries.ts","webpack:///../../../../../src/.internal/charts/cursors/RadarCursor.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererRadial.ts","webpack:///../../../../../src/.internal/charts/types/RadarChart.ts","webpack:///../../../../../src/.internal/charts/elements/ClockHand.ts","webpack:///../../../../../src/.internal/charts/types/GaugeChart.ts","webpack:///../../../../../src/.internal/charts/types/PercentChart.ts","webpack:///../../../../../src/.internal/charts/elements/PieTick.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries.ts","webpack:///../../../../../src/.internal/charts/types/PieChart.ts","webpack:///../../../../../src/.internal/charts/series/PieSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/PieChart3D.ts","webpack:///../../../../../src/.internal/charts/types/SlicedChart.ts","webpack:///../../../../../src/.internal/charts/elements/ChordNode.ts","webpack:///../../../../../src/.internal/core/elements/QuadraticCurve.ts","webpack:///../../../../../src/.internal/charts/elements/ChordLink.ts","webpack:///../../../../../src/.internal/charts/types/ChordDiagram.ts","webpack:///../../../../../src/.internal/charts/series/ColumnSeries.ts","webpack:///../../../../../src/.internal/charts/series/TreeMapSeries.ts","webpack:///../../../../../src/.internal/charts/types/TreeMap.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","webpack:///../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","webpack:///../../../../../src/.internal/charts/series/ColumnSeries3D.ts","webpack:///../../../../../src/.internal/charts/types/XYChart3D.ts","webpack:///../../../../../src/.internal/charts/elements/Candlestick.ts","webpack:///../../../../../src/.internal/charts/series/CandlestickSeries.ts","webpack:///../../../../../src/.internal/charts/elements/OHLC.ts","webpack:///../../../../../src/.internal/charts/series/OHLCSeries.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","webpack:///../../../../../src/.internal/charts/series/StepLineSeries.ts","webpack:///../../../../../src/.internal/charts/elements/RadarColumn.ts","webpack:///../../../../../src/.internal/charts/series/RadarColumnSeries.ts","webpack:///../../../../../src/.internal/charts/series/PyramidSeries.ts","webpack:///../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","webpack:///../../../../../src/.internal/charts/elements/ConeColumn.ts","webpack:///../../../../../src/.internal/charts/series/ConeSeries.ts","webpack:///../../../../../src/.internal/charts/elements/CurvedColumn.ts","webpack:///../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","webpack:///../../../../../src/.internal/charts/axes/DurationAxis.ts","webpack:///../../../../../src/.internal/charts/elements/CircleBullet.ts","webpack:///../../../../../src/.internal/charts/elements/ErrorBullet.ts","webpack:///../../../../../src/.internal/charts/elements/NavigationBar.ts","webpack:///./charts.js","webpack:///../../../../../src/.internal/charts/axes/GridCircular.ts"],"names":["__webpack_require__","d","__webpack_exports__","AxisRendererCircular","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_1__AxisRenderer__","__WEBPACK_IMPORTED_MODULE_2__AxisFillCircular__","__WEBPACK_IMPORTED_MODULE_3__GridCircular__","__WEBPACK_IMPORTED_MODULE_4__AxisLabelCircular__","__WEBPACK_IMPORTED_MODULE_5__core_Registry__","__WEBPACK_IMPORTED_MODULE_6__core_utils_Percent__","__WEBPACK_IMPORTED_MODULE_7__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_8__core_rendering_Path__","__WEBPACK_IMPORTED_MODULE_9__core_utils_Utils__","__WEBPACK_IMPORTED_MODULE_10__core_utils_Type__","_super","_this","call","this","pixelRadiusReal","layout","className","isMeasured","startAngle","endAngle","useChartAngles","radius","Object","grid","template","location","labels","ticks","pixelPerfect","tooltipLocation","line","strokeOpacity","applyTheme","prototype","setAxis","axis","tooltip","adapter","add","x","target","point","pixelX","y","pixelY","pixelRadius","Math","cos","atan2","sin","validate","chart","invalid","defineProperty","PI","getPropertyValue","value","setPercentProperty","invalidate","setPropertyValue","innerRadius","positionToPoint","position","coordinate","positionToCoordinate","angle","axisLength","positionToAngle","arc","end","start","renderer","inversed","updateAxisLine","path","updateGridElement","endPosition","element","gridInnerRadius","zIndex","toggleVisibility","updateTickElement","tick","tickLength","length","inside","updateLabelElement","label","fixPoint","positionItem","minLabelPosition","maxLabelPosition","fitsToBounds","invalidateAxisItems","invalidateSeries","getPositionRangePath","startPosition","cornerRadius","pixelInnerRadius","createGrid","createFill","createLabel","pointToPosition","coordinateToPosition","registeredClasses","AxisLabelCircular","__WEBPACK_IMPORTED_MODULE_1__AxisLabel__","__WEBPACK_IMPORTED_MODULE_2__core_Registry__","__WEBPACK_IMPORTED_MODULE_3__core_utils_Math__","__WEBPACK_IMPORTED_MODULE_4__core_utils_Type__","__WEBPACK_IMPORTED_MODULE_5__core_utils_Utils__","fdx","fdy","padding","axisRadius","sign","axisRadiusY","relativeRotation","dy","_measuredHeight","dx","_measuredWidth","labelRadius","pixelWidth","bbox","width","pixelHeight","height","rotation","dH","dW","pixelPaddingBottom","pixelPaddingTop","pixelPaddingLeft","pixelPaddingRight","AxisFillCircular","paper","__WEBPACK_IMPORTED_MODULE_2__core_utils_Percent__","draw","fillPath","__WEBPACK_IMPORTED_MODULE_1__AxisFill__","__WEBPACK_IMPORTED_MODULE_3__core_Registry__","CategoryAxisBreak_CategoryAxisBreak","CategoryAxisBreak","tslib_es6","indexToPosition","adjustedStartValue","adjustedEndValue","invalidateDataItems","category","categoryToIndex","AxisBreak","Registry","CategoryAxis_CategoryAxisDataItem","CategoryAxisDataItem","Adapter","text","locations","endCategory","isEnabled","apply","properties","setProperty","Axis","CategoryAxis_CategoryAxis","CategoryAxis","dataItemsByCategory","Dictionary","axisFieldName","_lastDataItem","createDataItem","component","_disposers","push","createAxisBreak","validateDataRange","Iterator","_series","iterator","series","xAxis","yAxis","invalidateDataRange","firstSeriesDataItem","getSeriesDataItem","lastSeriesDataItem","startIndex","index","endIndex","axisBreaks","dataCount","dataItems","utils_Math","floor","ceil","maxCount","minGridDistance","frequency","min","_startIndex","_endIndex","fixAxisBreaks","_frequency","maxZoomFactor","resetIterators","itemIndex","i","dataItem","getIndex","__disabled","len","round","isInBreak","appendDataItem","validateDataElement","each","axisBreak","frequency_1","breakSize","itemIndex_1","b","validateBreaks","validateAxisRanges","ghostLabel","invalidateLayout","Type","fillEndIndex","fillPosition","fillEndPosition","isRange","disabled","undefined","measuredWidth","measuredHeight","currentText","fill","axisFill","updateFillElement","fillRule","mask","processDataItem","dataContext","existingDataItem","getKey","remove","setKey","difference","adjustDifference","startLocation","endLocation","breakStartIndex","breakEndIndex","max","categoryToPosition","categoryToPoint","anyToPoint","anyToPosition","zoomToCategories","startCategory","zoomToIndexes","getAnyRangePath","startPos","endPos","roundPosition","positionToIndex","last","sdi_1","category_1","seriesDataItem","categoryX","categoryY","dataItem_1","getX","key","categories","basePoint","getY","getAngle","stackKey","getCellStartPosition","getCellEndPosition","getTooltipText","breakStartPosition","breakEndPosition","breakPosition","getPositionLabel","initRenderer","baseGrid","DateAxisBreak_DateAxisBreak","DateAxisBreak","startValue","getTime","endValue","ValueAxisBreak","DateAxis_DateAxisDataItem","DateAxisDataItem","values","date","endDate","dates","setDate","ValueAxis","DateAxis_DateAxis","DateAxis","gridIntervals","List","dateFormats","periodChangeDateFormats","_baseIntervalReal","timeUnit","count","_minDifference","snapTooltip","pushAll","gridInterval","_gridInterval","gridDuration","Time","applyInternalDefaults","hasKey","language","translate","validateDataItems","periodCount","baseDuration","zoom","handleSelectionExtremesChange","calculateZoom","chooseInterval","_minZoomed","_maxZoomed","_gridCount","baseInterval","_gridDate","Date","_nextGridUnit","_intervalDuration","_difference","baseAxis","field_1","getAxisField","findClosestIndex","validateData","minDifference","Number","MAX_VALUE","uid","seriesDataChangeUpdate","postProcessSeriesDataItems","postProcessSeriesDataItem","addEmptyUnitsBreaks","utils_Object","getDate","startDate","setCalculatedValue","dataItemsByAxis","toString","skipEmptyPeriods","clear","startTime","startTimeStr","this_1","create","_axisBreaks","breakGridCount","gridDate","getGridDate","intervalCount","realIntervalCount","prevTimestamp","newDate","timestamp","durationBreaksRemoved","getBreaklessDate","validateAxisElements","prevGridDate","dataItemsIterator_1","_dataItemsIterator","this_2","format","markUnitChange","dateFormatter","find","renderer_1","timeUnit_1","intervalCount_1","startPoint","endPoint","prevGridDate_1","timestamp_1","text_1","moveValue","adjustedMax","endTimestamp","valueToPosition","location_1","adjustMinMax","step","fixMin","fixMax","duration","gridCount","intervalDuration","lastIndex","formatLabel","dateToPosition","dateToPoint","valueToPoint","positionToDate","positionToValue","getTimeByLocation","baseValue","stack","getValue","workingLocations","endTime","processSeriesDataItem","axisLetter","time","openTime","openDate","prevSeriesTime","_prevSeriesTime","abs","differece","updateAxisBySeries","_baseInterval","timeInterval","invalidateData","breakTemplate","startLine","endLine","fillShape","tooltipDateFormat","dateFormat","findNearest","leftCount","leftDataItem","leftDate","minZoomed","rightCount","rightDataItem","rightDate","maxZoomed","getCurrentLabelFormat","zoomToDates","skipRangeEvent","instantly","parse","zoomToValues","asIs","field","copyFrom","source","showTooltipAtPosition","local","toAxisPosition","closestDate_1","actualTime_1","dateX","dateY","globalPosition","toGlobalPosition","XYSeries_XYSeriesDataItem","XYSeriesDataItem","valueX","valueY","openValueX","openValueY","openDateX","openDateY","setLocation","setValue","setCategory","openCategoryX","openCategoryY","getMin","fields","working","stackValue","utils_Array","getWorkingValue","getMax","Series","XYSeries_XYSeries","XYSeries","_xAxis","Disposer","_yAxis","_xValueFields","_yValueFields","cursorTooltipEnabled","mainContainer","Sprite","setElement","stacked","pointerOrientation","events","on","returnBulletDefaultState","readerTitle","dataChangeUpdate","_tmin","_tmax","_smin","_smax","defineFields","data","updateItemReaderText","dataFields","_xField","_yField","Error","name","disable","enable","setInitialWorkingValues","e","_chart","raiseCriticalError","disposeData","dataItemsX","dataItemsY","xAxisFieldName","xField","xOpenField","Utils","yAxisFieldName","yField","yOpenField","_xOpenField","_yOpenField","addValueField","indexOf","setCategoryAxisField","setDateAxisField","afterDraw","createMask","path_1","getMaskPath","axisRanges","range","Path","dataRangeInvalid","_showBullets","minBulletDistance","get","xAxes","oldAxis","removeKey","dispose","removeValue","set","registerSeries","yAxes","_baseAxis","processValues","minX","Infinity","maxX","minY","maxY","getStackValue","stackX","stackY","processSeriesDataItems","xAxisId","yAxisId","stackedSeries","dispatchImmediately","appeared","hideTooltip","_prevTooltipDataItem","xPosition","yPosition","visible","isHiding","isShowing","updateLegendValue","tooltipDataItem","tooltipXField","tooltipYField","tooltipPoint","getPoint","tooltipX","tooltipY","type","_a","bullets","_b","next","done","isHover","showTooltip","tooltipText","bullet","isDisposed","positionBullet","hasValue","bulletLocationX","getBulletLocationX","bulletLocationY","getBulletLocationY","locationX","locationY","moveTo","bulletLocation","show","anim","delay","interpolationDuration","defaultState","transitionDuration","a","sequencedInterpolation","sequencedInterpolationDelay","animation","isFinished","hide","hiddenState","validateDataElements","handleDataItemWorkingValueChange","axisSeries","invalidateProcessedData","backwards","prevSeries","prevDataItem","prevValue","_tooltipXField","_tooltipYField","selectionMin","selectionMax","processConfig","config","map","processingErrors","xKey","yKey","stackKeyX","stackKeyY","val","itemReaderText","Cursor_Cursor","Cursor","_stick","Percent","shouldClone","trackable","clickable","interaction","Interaction","body","handleCursorDown","handleCursorUp","handleCursorMove","event","interactionsEnabled","_generalBehavior","downPoint","isLocalElement","pointer","svg","_stickPoint","triggerMove","isHidden","hideReal","stick","triggerMoveReal","invalidatePosition","getPositions","dispatch","triggerDown","triggerDownReal","setGlobalStyle","Mouse","grabbing","triggerUp","triggerUpReal","updatePoint","upPoint","getHitOption","interactions","default","updateSelection","innerWidth","innerHeight","cancelable","preventDefault","plotContainer","lockElement","Container","XYCursor_XYCursor","XYCursor","_lineX","_lineY","behavior","maxPanOut","interfaceColors","InterfaceColorSet","selection","createChild","fillOpacity","getFor","lineX","stroke","Color","strokeDasharray","lineY","updateSize","_usesSelection","w","_positionPrecision","h","validatePosition","snapToSeries","updateLinePositions","getPanningRanges","selectionX","selectionY","getRanges","startX","startY","deltaX","deltaY","xRange","yRange","endX","endY","handleXTooltipPosition","handleYTooltipPosition","fullWidthLineX","currentItemStartPoint","currentItemEndPoint","fullWidthLineY","parent","reset","_selection","_snapToDisposer","handleSnap","opposite","animationDuration","easing","animationEasing","animate","property","to","XYChartScrollbar_XYChartScrollbar","XYChartScrollbar","scrollbarChart","XYChart_XYChart","margin","_scrollbarChart","minHeight","minWidth","unselectedOverlay","toBack","_unselectedOverlay","background","thumbBackground","thumb","hoverState","states","downState","handleSeriesAdded","handleSeriesRemoved","sourceSeries","newValue","zoomOutButton","addXAxis","addYAxis","clone","title","rangeChangeDuration","id","axisFills","showOnInit","zoomOutAxes","filters","DesaturateFilter","updateByOrientation","orientation","clonedFrom","oldValue","off","handleDataChanged","dataProvider","updateThumb","Scrollbar","XYChart_XYChartDataItem","XYChartDataItem","SerialChart","XYChart","_axisRendererX","AxisRendererX","_axisRendererY","AxisRendererY","maskBullets","chartContainer","topAxesCont","topAxesContainer","yAxesAndPlotCont","yAxesAndPlotContainer","bottomAxesCont","bottomAxesContainer","leftAxesCont","contentAlign","updateXAxesMargins","leftAxesContainer","plotCont","mouseWheelBehavior","_cursorContainer","rightAxesCont","rightAxesContainer","seriesContainer","bulletsContainer","ZoomOutButton","align","valign","MAX_SAFE_INTEGER","marginTop","marginRight","_bulletMask","exportable","toFront","updateSeriesLegend","updatePlotElements","_parseDataFrom","leftAxesWidth","rightAxesWidth","paddingLeft","paddingRight","handleXAxisChange","updateXAxis","handleYAxisChange","updateYAxis","processXAxis","observe","handleXAxisRangeChange","processAxis","processYAxis","handleYAxisRangeChange","getCommonAxisRange","scrollbarX","zoomAxes","toggleZoomOutButton","updateScrollbar","show_1","seriesAppeared","scrollbarY","scrollbar","skipRangeEvents","axes","axisStart","axisEnd","processRenderer","_dataUsers","gridContainer","breakContainer","addDisposer","dataUsers","inited","_xAxes","handleAxisRemoval","autoDispose","_yAxes","colors","_cursor","cursor","removeDispose","handleCursorPositionChange","handleCursorZoomStart","handleCursorZoomEnd","handleCursorPanStart","handleCursorPanning","handleCursorPanEnd","handleCursorCanceled","handleHideCursor","createCursor","showSeriesTooltip","exceptAxis","showAxisTooltip","hideObjectTooltip","sprites","sprite","topLeft","bottomRight","seriesPoints","sum","setBounds","sort","averageY","svgContainer","SVGContainer","top_1","bottom","dropped","nextHeight","pointY","pixelMarginTop","nextY","pixelMarginBottom","except","getUpdatedRange","priority","_panStartXRange","_panStartYRange","_panEndXRange","delta","panEndRange","_panEndYRange","panStartRange","newStart","newEnd","newRange","_scrollbarX","startGrip","endGrip","handleXScrollbarChange","arg","_scrollbarY","handleYScrollbarChange","fixRange","declination","realRange","dataInvalid","diff","axisRange","handleWheel","svgPoint","htmlContainer","cssScale","plotPoint","shift","rangeX","rangeY","differenceX","newStartX","newEndX","differenceY","newStartY","newEndY","maxWidth","maxHeight","_mouseWheelDisposer","wheelable","hoverable","dataSourceDateFields","populateDataSourceFields","dataSourceNumberFields","configOrder","createSeries","_zoomOutButton","button","addData","rawDataItem","removeCount","LineSeriesSegment_LineSeriesSegment","LineSeriesSegment","fillSprite","strokeSprite","drawSegment","points","closePoints","smoothnessX","smoothnessY","Smoothing","smooth","lineElement","fillElement","LineSeries_LineSeriesDataItem","LineSeriesDataItem","LineSeries_LineSeries","LineSeries","minDistance","segments","createSegment","applyOnClones","_segmentsIterator","createNewItems","connect","tensionX","tensionY","segmentsContainer","previousDataItem","initialY","workingValue","setWorkingValue","setWorkingLocation","initialX","segment","tooltipColorSource","openSegment","_workingStartIndex","sliceData","_workingEndIndex","openIndex","closeIndex","propertiesChanged","getFirst","contents","hasProperties","updateSegmentProperties","addPoints","closeSegment","itemProperties","checkOnly","changed","propertyName","currentValue","currentValueStr","valueStr","createLegendMarker","marker","disposeChildren","Line","x2","Rectangle","legendDataItem","color","colorOrig","copyToLegendMarker","hasLabels_1","children","child","Label","RadarSeries_RadarSeriesDataItem","RadarSeriesDataItem","RadarSeries_RadarSeries","RadarSeries","connectEnds","unshift","RadarCursor_RadarCursor","RadarCursor","truePixelRadius","updateLineX","updateLineY","fillStartAngle","downAngle","downRadius","currentRadius","_prevAngle","downSin","downCos","upAngle","upRadius","innerRadiusModifyer","AxisRendererRadial_AxisRendererRadial","AxisRendererRadial","gridType","axisAngle","horizontalCenter","verticalCenter","gridLocation","count_1","cellEndLocation","updateBaseGridElement","count_2","updateBreakElement","createBreakSprites","WavedCircle","updateTooltip","tooltipOrientation","bigNum","axisFullLength","RadarChart_RadarChartDataItem","RadarChartDataItem","RadarChart_RadarChart","RadarChart","radarContainer","Circle","opacity","beforeDraw","rect","innerRect","wr","hr","mr","maxRadius","diameter","_pixelInnerRadius","definedBBox","ClockHand_ClockHand","ClockHand","_axis","pin","startWidth","endWidth","hand","Trapezoid","leftSide","rightSide","x0","x1","_pin","_hand","showValue","_value","newAngle","currentAngle","rotationDirection","updateValue","GaugeChart_GaugeChartDataItem","GaugeChartDataItem","GaugeChart_GaugeChart","GaugeChart","hands","processHand","PercentChart_PercentChartDataItem","PercentChartDataItem","PercentChart_PercentChart","PercentChart","feedLegend","legend","legendData_1","hiddenInLegend","legendSettings","labelText","itemLabelText","valueText","valueLabels","itemValueText","PercentSeries","setLegend","itemContainers","PercentSeriesDataItem","slice","PieTick_PieTick","PieTick","_label","_slice","ix","scale","y0","iy","y1","y2","alignLabels","r","attr","Tick","PieSeries_PieSeriesDataItem","PieSeriesDataItem","radiusValue","toValue","PieSeries_PieSeries","PieSeries","createSlice","Slice","createTick","initSlice","handleSliceScale","handleSliceMove","shiftRadius","togglable","_leftItems","_rightItems","_currentStartAngle","_arcRect","_maxRadiusPercent","radiusValuePercent","percent","reverse","aAngle","middleAngle","bAngle","arrangeLabels","normalizedMiddleAngle","arcRect","distance","radiusY","_pixelRadius","PieChart_PieChartDataItem","PieChartDataItem","PieChart_PieChart","PieChart","updateRadius","validateLayout","updateSeriesAngles","chartCont","chartRadius","chartPixelInnerRadius","seriesRadius","PieSeries3D_PieSeries3DDataItem","PieSeries3DDataItem","depthValue","PieSeries3D_PieSeries3D","PieSeries3D","Slice3D","depth","depthPercent","PieChart3D_PieChart3DDataItem","PieChart3DDataItem","PieChart3D_PieChart3D","PieChart3D","invalidateDataUsers","SlicedChart_SlicedChartDataItem","SlicedChartDataItem","SlicedChart_SlicedChart","SlicedChart","ChordNode_ChordNode","ChordNode","updateRotation","setStateOnChildren","invalidateLinks","total","arc_1","sliceStartAngle_1","Bullet","childAngle","childRadius","labelAngle","adjustedTotal","nextAngle","_outgoingSorted","link","linksContainer","nonRibbon","percentWidth","valueAngle","toNode","_incomingSorted","fromNode","mAngle","trueStartAngle","tx","ty","FlowDiagramNode","QuadraticCurve_QuadraticCurve","QuadraticCurve","cpx","cpy","p1","p2","cp","point1","point2","ChordLink_ChordLink","ChordLink","middleLine","isTemplate","fromX","fromY","toX","toY","bulletsMask","mAngle1","mAngle2","positionBullets","FlowDiagramLink","ChordDiagram_ChordDiagramDataItem","ChordDiagramDataItem","FlowDiagram","ChordDiagram_ChordDiagram","ChordDiagram","nodePadding","chordContainer","nodesContainer","newTotal","_sorted","strNode","node","getNodeValue","minNodeSize","links","createNode","createLink","ColumnSeries_ColumnSeriesDataItem","ColumnSeriesDataItem","_column","column","setColumn","addSprite","columns","_rangesColumns","ColumnSeries_ColumnSeries","ColumnSeries","_startLocation","_endLocation","simplifiedProcessing","clustered","columnsContainer","_columnsContainer","baseAxisSeries","clusterCount","cellStartLocation","disableUnusedColumns","validateDataElementReal","getStartLocation","getEndLocation","l","t","percentHeight","paddingTop","paddingBottom","outOfBounds","offset","fixHorizontalCoordinate","fixVerticalCoordinate","bottomLocation","topLocation","rightLocation","leftLocation","column_1","itemsFocusable","role","focusable","once","ev","populateString","realX","realY","realWidth","realHeight","virtualParent","setColumnStates","rangeColumn","rangesColumns","itemWidth","itemHeight","open_1","change","droppedFromOpen","_dropFromOpenState","setState","_riseFromOpenState","droppedFromPrevious","_dropFromPreviousState","_riseFromPreviousState","_columns","createColumnTemplate","Column","fromOpenState_1","fromPreviousState_1","removeChildren","RoundedRectangle","TreeMapSeries_TreeMapSeriesDataItem","TreeMapSeriesDataItem","treeMapDataItem","_dataContext","TreeMapSeries_TreeMapSeries","TreeMapSeries","configField","showReal","TreeMap_TreeMapDataItem","TreeMapDataItem","rows","hasChildren","level","TreeMap_TreeMap","TreeMap","layoutAlgorithm","squarify","zoomable","maxLevels","currentLevel","ColorSet","sorting","strictMinMax","xRenderer","yRenderer","seriesTemplates","zoomToChartDataItem","_homeDataItem","_navigationBar","navigationBar","createTreeSeries","homeDataItem","_homeText","layoutItems","_updateDataItemIndexes","_tempSeries","navigationData","parentDataItem","initSeries","createTreeSeriesReal","cursorOverStyle","zoomToSeriesDataItem","toggleBullets","currentlyZoomed","rangeChangeAnimation","_dataDisposers","binaryTree","dice","sliceDice","validateRawData","nodes","n","sums","Array","partition","j","valueOffset","valueTarget","k","hi","mid","valueLeft","valueRight","xk","yk","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","alpha","beta","ratio","sqrt","i0","i1","row","handleDataItemValueChange","AxisRendererX3D_AxisRendererX3D","AxisRendererX3D","dx3D","dy3D","getHeight","handle3DChanged","AxisRendererY3D_AxisRendererY3D","AxisRendererY3D","getWidth","ColumnSeries3D_ColumnSeries3DDataItem","ColumnSeries3DDataItem","ColumnSeries3D_ColumnSeries3D","ColumnSeries3D","column3D","Column3D","XYChart3D_XYChart3DDataItem","XYChart3DDataItem","XYChart3D_XYChart3D","XYChart3D","fixLayout","fixColumns","depthIndex","s","i_1","maskColumns","Candlestick_Candlestick","Candlestick","createAssets","lowLine","highLine","CandlestickSeries_CandlestickSeriesDataItem","CandlestickSeriesDataItem","lowValueX","lowValueY","highValueX","highValueY","CandlestickSeries_CandlestickSeries","CandlestickSeries","positiveColor","negativeColor","dropFromOpenState","riseFromOpenState","validateCandlestick","lowLine_1","highLine_1","close_1","yOpen","yClose","yLow","yLowField","yHigh","yHighField","open_2","close_2","xOpen","xClose","xLow","xLowField","xHigh","xHighField","rangeLowLine","rangehighLine","_xLowField","_yLowField","_xHighField","_yHighField","cw","ch","OHLC_OHLC","OHLC","openLine","highLowLine","closeLine","OHLCSeries_OHLCSeriesDataItem","OHLCSeriesDataItem","OHLCSeries_OHLCSeries","OHLCSeries","openLine_1","highLowLine_1","closeLine_1","rangeOpenLine","rangeCloseLine","rangeHighLowLine","StepLineSeriesSegment_StepLineSeriesSegment","StepLineSeriesSegment","noRisers","vertical","StepLineSeries_StepLineSeriesDataItem","StepLineSeriesDataItem","StepLineSeries_StepLineSeries","StepLineSeries","prevPoint","point0","RadarColumn_RadarColumn","RadarColumn","radarColumn","getTooltipX","getTooltipY","RadarColumnSeries_RadarColumnSeriesDataItem","RadarColumnSeriesDataItem","RadarColumnSeries_RadarColumnSeries","RadarColumnSeries","lAngle","rAngle","tRadius","bRadius","cellAngle","temp","PyramidSeries_PyramidSeriesDataItem","PyramidSeriesDataItem","FunnelSeries","PyramidSeries_PyramidSeries","PyramidSeries","topWidth","bottomWidth","pyramidHeight","valueIs","sliceLinks","_nextWidth","getNextValue","nextValue","slicesContainer","relValue","sliceLink","_pyramidHeight","_pyramidWidth","labelsContainer","ticksContainer","decorateSlice","pyramidWidth","linkWidth","linkHeight","sliceTopWidth","c","tan","sliceHeight","sliceBottomWidth","square","_nextY","sliceWidth","PictorialStackedSeries_PictorialStackedSeriesDataItem","PictorialStackedSeriesDataItem","PictorialStackedSeries_PictorialStackedSeries","PictorialStackedSeries","_maskSprite","maskSprite","pictureWidth","pictureHeight","newWidth","newHeight","hs","expandDistance","ConeColumn_ConeColumn","ConeColumn","coneColumn","Cone","ConeSeries_ConeSeriesDataItem","ConeSeriesDataItem","ConeSeries_ConeSeries","ConeSeries","CurvedColumn_CurvedColumn","CurvedColumn","curvedColumn","tension","CurvedColumnSeries_CurvedColumnSeriesDataItem","CurvedColumnSeriesDataItem","CurvedColumnSeries_CurvedColumnSeries","CurvedColumnSeries","DurationAxis_DurationAxisDataItem","DurationAxisDataItem","DurationAxis_DurationAxis","DurationAxis","_baseUnit","durationFormatter","axisDurationFormat","strictMode","minMaxStep","baseUnit","initialMin","initialMax","divisors","realDivisor","divisors_1","divisors_1_1","divisor","exponent","log","LOG10E","power","pow","reducedCount","getValueUnit","getFormat","_tooltipDurationFormat","_stepDecimalPlaces","tooltipDurationFormat","CircleBullet_CircleBullet","CircleBullet","circle","ErrorBullet_ErrorBullet","ErrorBullet","errorLine","isDynamic","NavigationBar_NavigationBarDataItem","NavigationBarDataItem","DataItem","NavigationBar_NavigationBar","NavigationBar","textLink","TextLink","_linksIterator","triangle","Triangle","direction","marginLeft","separators","activeLink","fontWeight","getLast","separator","Component","window","am4charts","charts_namespaceObject","GridCircular","__WEBPACK_IMPORTED_MODULE_1__Grid__"],"mappings":";;;;;;;;;;;;;;;;;;;2DAAAA,EAAAC,EAAAC,EAAA,sBAAAC,IAAA,IAAAC,EAAAJ,EAAA,QAAAK,EAAAL,EAAA,QAAAM,EAAAN,EAAA,QAAAO,EAAAP,EAAA,QAAAQ,EAAAR,EAAA,QAAAS,EAAAT,EAAA,QAAAU,EAAAV,EAAA,QAAAW,EAAAX,EAAA,QAAAY,EAAAZ,EAAA,QAAAa,EAAAb,EAAA,QAAAc,EAAAd,EAAA,QAqGAG,EAAA,SAAAY,GAsDC,SAAAZ,IAAA,IAAAa,EAGCD,EAAAE,KAAAC,OAAOA,YAVDF,EAAAG,gBAA0B,EAahCH,EAAKI,OAAS,OAEdJ,EAAKK,UAAY,uBACjBL,EAAKM,YAAa,EAClBN,EAAKO,YAAc,GACnBP,EAAKQ,SAAW,IAEhBR,EAAKS,gBAAiB,EACtBT,EAAKU,OAASC,OAAAjB,EAAA,EAAAiB,CAAQ,KAEtBX,EAAKM,YAAa,EAElBN,EAAKY,KAAKC,SAASC,SAAW,EAE9Bd,EAAKe,OAAOF,SAASC,SAAW,EAChCd,EAAKe,OAAOF,SAASH,OAAS,GAE9BV,EAAKgB,MAAMH,SAASC,SAAW,EAC/Bd,EAAKgB,MAAMH,SAASI,cAAe,EACnCjB,EAAKkB,gBAAkB,EAEvBlB,EAAKmB,KAAKC,cAAgB,EAE1BpB,EAAKqB,eAoYP,OAvd0CjC,EAAA,EAAAD,EAAAY,GAyFlCZ,EAAAmC,UAAAC,QAAP,SAAeC,GAAf,IAAAxB,EAAAE,KACCH,EAAAuB,UAAMC,QAAOtB,KAAAC,KAACsB,GACdA,EAAKlB,YAAa,EAGlB,IAAImB,EAAUD,EAAKC,QAEnBA,EAAQC,QAAQC,IAAI,KAAM,SAACC,EAAGC,GAC7B,IAAIC,EAAgBjC,EAAA,kBAA0B+B,EAAGC,EAAOE,OAAQC,EAAGH,EAAOI,QAAUjC,GACpF,OAAOA,EAAKkC,YAAcC,KAAKC,IAAID,KAAKE,MAAMP,EAAME,EAAGF,EAAMF,IAAME,EAAMF,IAG1EH,EAAQC,QAAQC,IAAI,KAAM,SAACK,EAAGH,GAC7B,IAAIC,EAAgBjC,EAAA,kBAA0B+B,EAAGC,EAAOE,OAAQC,EAAGH,EAAOI,QAAUjC,GACpF,OAAOA,EAAKkC,YAAcC,KAAKG,IAAIH,KAAKE,MAAMP,EAAME,EAAGF,EAAMF,IAAME,EAAME,KASpE7C,EAAAmC,UAAAiB,SAAP,WAEKrC,KAAKsC,OAAStC,KAAKsC,MAAMC,SAC5BvC,KAAKsC,MAAMD,WAGZxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,OAQfS,OAAA+B,eAAWvD,EAAAmC,UAAA,kBAAX,WACC,OAAO,EAAIa,KAAKQ,GAAKzC,KAAKgC,6CAU3BvB,OAAA+B,eAAWvD,EAAAmC,UAAA,cAWX,WACC,OAAOpB,KAAK0C,iBAAiB,eAZ9B,SAAkBC,GACb3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAO,EAAO,IAAI,IAC1D3C,KAAKsB,MACRtB,KAAKsB,KAAKuB,8CAiBbpC,OAAA+B,eAAWvD,EAAAmC,UAAA,mBAAX,WACC,OAAOzB,EAAA,sBAA6BK,KAAKQ,OAAQR,KAAKC,kBAAoB,mCAU3EQ,OAAA+B,eAAWvD,EAAAmC,UAAA,mBAWX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAZ9B,SAAuBC,GAClB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAO,EAAO,IAAI,IAC/D3C,KAAKsB,MACRtB,KAAKsB,KAAKuB,8CAmBbpC,OAAA+B,eAAWvD,EAAAmC,UAAA,sBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,uBAR9B,SAA0BC,GACzB3C,KAAK8C,iBAAiB,iBAAkBH,oCAezClC,OAAA+B,eAAWvD,EAAAmC,UAAA,wBAAX,WACC,OAAOzB,EAAA,sBAA6BK,KAAK+C,YAAa/C,KAAKC,kBAAoB,mCASzEhB,EAAAmC,UAAA4B,gBAAP,SAAuBC,GACtB,IAAIC,EAAqBlD,KAAKmD,qBAAqBF,GAC/CG,EAAgBpD,KAAKK,YAAcL,KAAKM,SAAWN,KAAKK,YAAc6C,EAAalD,KAAKqD,WAC5F,OAAS3B,EAAG1B,KAAKgC,YAAcvC,EAAA,IAAU2D,GAAQtB,EAAG9B,KAAKgC,YAAcvC,EAAA,IAAU2D,KAS3EnE,EAAAmC,UAAAkC,gBAAP,SAAuBL,GACtB,IAIIG,EAJA9B,EAAatB,KAAKsB,KAElBiC,GAAevD,KAAKM,SAAWN,KAAKK,aAAeiB,EAAKkC,IAAMlC,EAAKmC,OAWvE,OANCL,EADG9B,EAAKoC,SAASC,SACT3D,KAAKK,YAAciB,EAAKkC,IAAMP,GAAYM,EAG1CvD,KAAKK,YAAc4C,EAAW3B,EAAKmC,OAASF,EAG9C9D,EAAA,MAAY2D,EAAO,IAQpBnE,EAAAmC,UAAAwC,eAAP,WACC,IAAIpD,EAAiBR,KAAKgC,YACtB3B,EAAqBL,KAAKK,WAG1BkD,EAFmBvD,KAAKM,SAECD,EAC7BL,KAAKiB,KAAK4C,KAAOnE,EAAA,QAAegC,EAAGlB,EAASf,EAAA,IAAUY,GAAayB,EAAGtB,EAASf,EAAA,IAAUY,KAAiBX,EAAA,MAAYW,EAAYkD,EAAK/C,EAAQA,IAWzIvB,EAAAmC,UAAA0C,kBAAP,SAAyBpD,EAAoBuC,EAAkBc,GAC9Dd,IAAuBc,EAAcd,GAAYvC,EAAKE,SAEtD,IAAIgB,EAAgB5B,KAAKgD,gBAAgBC,GACzC,GAAIvC,EAAKsD,QAAS,CACjB,IAAIZ,EAAgB3D,EAAA,QAAgBwC,KAAKE,MAAMP,EAAME,EAAGF,EAAMF,GAC1DlB,EAAiBb,EAAA,sBAA6BC,EAAA,SAAec,EAAKF,QAAUE,EAAKF,OAASC,OAAAjB,EAAA,EAAAiB,CAAQ,KAAMT,KAAKgC,aAE7GiC,EAAkBtE,EAAA,sBAA6Be,EAAKqC,YAAa/C,KAAKgC,aAC1EtB,EAAKwD,OAAS,EAEd,IAAInB,EAAsBpD,EAAA,sBAA6BC,EAAA,SAAeqE,GAAmBA,EAAkBjE,KAAK+C,YAAa/C,KAAKgC,aAAa,GAC/ItB,EAAKmD,KAAOnE,EAAA,QAAegC,EAAGqB,EAActD,EAAA,IAAU2D,GAAQtB,EAAGiB,EAActD,EAAA,IAAU2D,KAAY1D,EAAA,QAAegC,EAAGlB,EAASf,EAAA,IAAU2D,GAAQtB,EAAGtB,EAASf,EAAA,IAAU2D,KAEzKpD,KAAKmE,iBAAiBzD,EAAMuC,EAAU,EAAG,IAWnChE,EAAAmC,UAAAgD,kBAAP,SAAyBC,EAAgBpB,EAAkBc,GAE1Dd,IAAuBc,EAAcd,GAAYoB,EAAKzD,SAEtD,IAAIgB,EAAgB5B,KAAKgD,gBAAgBC,GAEzC,GAAIoB,EAAKL,QAAS,CACjB,IAAIxD,EAAiBR,KAAKgC,YACtBoB,EAAgB3D,EAAA,QAAgBwC,KAAKE,MAAMP,EAAME,EAAGF,EAAMF,GAC1D4C,EAAqBD,EAAKE,OAC1BF,EAAKG,SACRF,GAAcA,GAEfD,EAAKH,OAAS,EACdG,EAAKR,KAAOnE,EAAA,QAAegC,EAAGlB,EAASf,EAAA,IAAU2D,GAAQtB,EAAGtB,EAASf,EAAA,IAAU2D,KAAY1D,EAAA,QAAegC,GAAIlB,EAAS8D,GAAc7E,EAAA,IAAU2D,GAAQtB,GAAItB,EAAS8D,GAAc7E,EAAA,IAAU2D,KAG7LpD,KAAKmE,iBAAiBE,EAAMpB,EAAU,EAAG,IAWnChE,EAAAmC,UAAAqD,mBAAP,SAA0BC,EAA2BzB,EAAkBc,EAAqBnD,GAEtFhB,EAAA,SAAegB,KACnBA,EAAW8D,EAAM9D,UAGlBqC,IAAuBc,EAAcd,GAAYrC,EAEjD,IAAIgB,EAAgB5B,KAAKgD,gBAAgBC,GAEzCyB,EAAMC,SAAS/C,EAAO5B,KAAKgC,aAC3B0C,EAAMR,OAAS,EAEflE,KAAK4E,aAAaF,EAAO9C,GAEzB5B,KAAKmE,iBAAiBO,EAAOzB,EAAUjD,KAAK6E,iBAAkB7E,KAAK8E,mBAU7D7F,EAAAmC,UAAA2D,aAAP,SAAoBnD,GACnB,OAAO,GAQRnB,OAAA+B,eAAWvD,EAAAmC,UAAA,kBAaX,WACC,OAAOpB,KAAK0C,iBAAiB,mBAd9B,SAAsBC,GAEjB3C,KAAK8C,iBAAiB,aAAcH,KACvC3C,KAAKgF,sBACDhF,KAAKsB,MACRtB,KAAKsB,KAAK2D,qDAiBbxE,OAAA+B,eAAWvD,EAAAmC,UAAA,gBAaX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAd9B,SAAoBC,GAEf3C,KAAK8C,iBAAiB,WAAYH,KACrC3C,KAAKgF,sBACDhF,KAAKsB,MACRtB,KAAKsB,KAAK2D,qDAsBNhG,EAAAmC,UAAA8D,qBAAP,SAA4BC,EAAuBpB,EAAqBvD,EAA2BuC,EAAgCqC,GAClI,IAAIvB,EAAe,GACnB,GAAIjE,EAAA,SAAeuF,IAAkBvF,EAAA,SAAemE,GAAc,CAE5DnE,EAAA,SAAeY,KACnBA,EAASR,KAAKQ,QAGf2E,EAAgB1F,EAAA,IAAU0F,EAAenF,KAAKsB,KAAKmC,QACnDM,EAActE,EAAA,IAAUsE,EAAa/D,KAAKsB,KAAKkC,MAE7B2B,IACjBpB,EAAcoB,GAGf,IAAInD,EAAsBrC,EAAA,sBAA6Ba,EAAQR,KAAKgC,aAChEqD,EAA2B1F,EAAA,sBAA6BoD,EAAa/C,KAAKgC,aAAa,GAEvF3B,EAAqBL,KAAKsD,gBAAgB6B,GAG1C5B,EAFmBvD,KAAKsD,gBAAgBS,GAEf1D,EAE7BwD,EAAOnE,EAAA,IAAUW,EAAYkD,EAAKvB,EAAaqD,EAAkBrD,EAAaoD,GAG/E,OAAOvB,GAQD5E,EAAAmC,UAAAkE,WAAP,WACC,OAAO,IAAIjG,EAAA,GAQLJ,EAAAmC,UAAAmE,WAAP,SAAkBjE,GACjB,OAAO,IAAIlC,EAAA,EAAiBkC,IAQtBrC,EAAAmC,UAAAoE,YAAP,WACC,OAAO,IAAIlG,EAAA,GAWLL,EAAAmC,UAAAqE,gBAAP,SAAuB7D,GACtB,IAAIwB,EAAQ3D,EAAA,gBAAsBA,EAAA,SAAemC,GAAQ5B,KAAKK,WAAYL,KAAKM,UAC/E,OAAON,KAAK0F,sBAAsBtC,EAAQpD,KAAKK,YAAc,IAAML,KAAKqD,aAE1EpE,EAvdA,CAA0CE,EAAA,GA+d1CI,EAAA,EAASoG,kBAAwC,qBAAI1G,qCCpkBrDH,EAAAC,EAAAC,EAAA,sBAAA4G,IAAA,IAAA1G,EAAAJ,EAAA,QAAA+G,EAAA/G,EAAA,QAAAgH,EAAAhH,EAAA,QAAAiH,EAAAjH,EAAA,QAAAkH,EAAAlH,EAAA,QAAAmH,EAAAnH,EAAA,QAyEA8G,EAAA,SAAA/F,GA+CC,SAAA+F,IAAA,IAAA9F,EACCD,EAAAE,KAAAC,OAAOA,YAbDF,EAAAoG,IAAc,EAOdpG,EAAAqG,IAAc,EAOpBrG,EAAKK,UAAY,oBACjBL,EAAKsG,QAAQ,EAAG,EAAG,EAAG,GACtBtG,EAAKc,SAAW,GAChBd,EAAKU,OAAS,EACdV,EAAKM,YAAa,EAClBN,EAAKqB,eA2IP,OAjMuCjC,EAAA,EAAA0G,EAAA/F,GAiEtCY,OAAA+B,eAAWoD,EAAAxE,UAAA,wBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,yBAR9B,SAA4BC,GAC3B3C,KAAK8C,iBAAiB,mBAAoBH,GAAO,oCAelDlC,OAAA+B,eAAWoD,EAAAxE,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAM,EAAO,IAAI,oCAapDiD,EAAAxE,UAAAY,YAAP,SAAmBqE,GAClB,IAAIC,EAAe,EAKnB,OAJItG,KAAKwE,SACR8B,GAAQ,GAGFL,EAAA,gBAAuBjG,KAAKQ,OAAQ6F,GAAcC,GAYnDV,EAAAxE,UAAAuD,SAAP,SAAgB/C,EAAeyE,EAAoBE,GAClD,IAAInD,EAAgB2C,EAAA,QAAgB9D,KAAKE,MAAMP,EAAME,EAAGF,EAAMF,GAE1DsE,EAAA,SAAeO,KAClBA,EAAcF,GAGXrG,KAAKuC,SACRvC,KAAKqC,WAGN,IAAImE,EAAmBxG,KAAKwG,iBAI5BxG,KAAKyG,IAAMzG,KAAK0G,iBAAmB,GAAK9E,EAAME,EAAIuE,IAAe,EAAIA,IAErErG,KAAK2G,IAAM3G,KAAK4G,gBAAkB,GAAKhF,EAAMF,EAAI2E,IAAe,EAAIA,IAEpE,IAAIQ,EAAc7G,KAAKgC,YAAYqE,GAEnC,GAAIL,EAAA,SAAeQ,GAAmB,CAErC,IAAIM,EAAa9G,KAAK+G,KAAKC,MACvBC,EAAcjH,KAAK+G,KAAKG,OAExB9D,EAAQ,IAAMA,GAAS,IACD,IAArBoD,IACHA,EAAmB,GACnBM,EAAa,KAIW,IAArBN,IACHS,GAAgBA,GAEO,IAApBT,IACHA,GAAoB,GACpBM,EAAa,EACbG,GAAgBA,IAIlBjH,KAAKmH,SAAWX,EAAmBpD,EAAQ,GAE3C,IAAIgE,EAAKrB,EAAA,IAAUS,GAAoB,EACnCa,EAAKtB,EAAA,IAAUS,GAAoB,EAEnCW,EAAWnH,KAAKmH,SAEpBnH,KAAK2G,GAAKM,EAAcG,EAAKrB,EAAA,IAAUoB,GAAYL,EAAaO,EAAKtB,EAAA,IAAUoB,GAC/EnH,KAAKyG,IAAMQ,EAAcG,EAAKrB,EAAA,IAAUoB,GAAYL,EAAaO,EAAKtB,EAAA,IAAUoB,GAEhF,IAAIG,EAAqBtH,KAAKsH,mBAC1BC,EAAkBvH,KAAKuH,gBACvBC,EAAmBxH,KAAKwH,iBACxBC,EAAoBzH,KAAKyH,kBAExBzH,KAAKwE,OAILpB,EAAQ,IAAMA,GAAS,GAC1ByD,IAAgBS,EAAqBC,GAAmBxB,EAAA,IAAUS,IAAqBgB,EAAmBC,GAAqB1B,EAAA,IAAUS,GAGzIK,IAAgBS,EAAqBtH,KAAK+G,KAAKG,OAASK,GAAmBxB,EAAA,IAAUS,IAAqBgB,EAAmBC,EAAoBzH,KAAK+G,KAAKC,OAASjB,EAAA,IAAUS,GAP/KK,IAAgBI,EAAcK,EAAqBC,GAAmBxB,EAAA,IAAUS,IAAqBM,EAAaU,EAAmBC,GAAqB1B,EAAA,IAAUS,GAkBtK,OANAxG,KAAKkG,IAAMlG,KAAK2G,GAChB3G,KAAKmG,IAAMnG,KAAKyG,GAEhB7E,EAAMF,GAAKqE,EAAA,IAAU3C,GAASyD,EAC9BjF,EAAME,GAAKiE,EAAA,IAAU3C,GAASyD,EAAcN,EAAcF,EAEnDzE,GAGTgE,EAjMA,CAAuCC,EAAA,GAyMvCC,EAAA,EAASH,kBAAqC,kBAAIC,qICpMlD8B,EAAA,SAAA7H,GAqCC,SAAA6H,EAAYpG,GAAZ,IAAAxB,EACCD,EAAAE,KAAAC,KAAMsB,IAAKtB,YAEXF,EAAKK,UAAY,mBAEjBL,EAAKkE,QAAUlE,EAAK6H,MAAMlG,IAAI,QAE9B3B,EAAKU,OAASC,OAAAmH,EAAA,EAAAnH,CAAQ,KAEtBX,EAAKqB,eAiEP,OA/GsCjC,EAAA,EAAAwI,EAAA7H,GAsD9B6H,EAAAtG,UAAAyG,KAAP,WAEC,GADAhI,EAAAuB,UAAMyG,KAAI9H,KAAAC,MACNA,KAAKsB,KAAM,CACd,IAAIoC,EAAuD1D,KAAKsB,KAAKoC,SACrE1D,KAAK8H,SAAWpE,EAASwB,qBAAqBlF,KAAKmF,cAAenF,KAAK+D,YAAa/D,KAAKQ,OAAQwF,EAAA,SAAehG,KAAK+C,aAAe/C,KAAK+C,YAAcW,EAASX,YAAa/C,KAAKoF,cAClLpF,KAAK6D,KAAO7D,KAAK8H,WASnBrH,OAAA+B,eAAWkF,EAAAtG,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAM,EAAO,IAAI,oCAehElC,OAAA+B,eAAWkF,EAAAtG,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAM,EAAO,IAAI,oCAe3DlC,OAAA+B,eAAWkF,EAAAtG,UAAA,oBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,qBAR9B,SAAwBC,GACvB3C,KAAK8C,iBAAiB,eAAgBH,GAAO,oCAU/C+E,EA/GA,CAAsCK,EAAA,GAuHtCC,EAAA,EAASrC,kBAAoC,iBAAI+B,mvLC9HjDO,EAAA,SAAApI,GAiCC,SAAAqI,IAAA,IAAApI,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,oBACjBL,EAAKqB,eA6HP,OAjKuCgH,EAAA,EAAAD,EAAArI,GA6CtCY,OAAA+B,eAAW0F,EAAA9G,UAAA,qBAAX,WACC,GAAIpB,KAAKsB,KACR,OAAOtB,KAAKsB,KAAK8G,gBAAgBpI,KAAKqI,qDAUxC5H,OAAA+B,eAAW0F,EAAA9G,UAAA,mBAAX,WACC,GAAIpB,KAAKsB,KACR,OAAOtB,KAAKsB,KAAK8G,gBAAgBpI,KAAKsI,mDASxC7H,OAAA+B,eAAW0F,EAAA9G,UAAA,qBAYX,WACC,OAAOpB,KAAK0C,iBAAiB,sBAb9B,SAAyBC,GACpB3C,KAAK8C,iBAAiB,gBAAiBH,IACtC3C,KAAKsB,OACRtB,KAAKsB,KAAKiH,sBACVvI,KAAKsB,KAAK2D,qDAiBbxE,OAAA+B,eAAW0F,EAAA9G,UAAA,mBAYX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAb9B,SAAuBC,GAClB3C,KAAK8C,iBAAiB,cAAeH,IACpC3C,KAAKsB,OACRtB,KAAKsB,KAAKiH,sBACVvI,KAAKsB,KAAK2D,qDAiBbxE,OAAA+B,eAAW0F,EAAA9G,UAAA,kBAYX,WACC,IAAIoH,EAAmBxI,KAAK0C,iBAAiB,iBAC7C,OAAI8F,EACIxI,KAAKsB,KAAKmH,gBAAgBD,GAG1BxI,KAAK0C,iBAAiB,mBAlB/B,SAAsBC,GACjB3C,KAAK8C,iBAAiB,aAAcH,IACnC3C,KAAKsB,OACRtB,KAAKsB,KAAKiH,sBACVvI,KAAKsB,KAAK2D,qDAwBbxE,OAAA+B,eAAW0F,EAAA9G,UAAA,gBAYX,WACC,IAAIoH,EAAmBxI,KAAK0C,iBAAiB,eAC7C,OAAI8F,EACIxI,KAAKsB,KAAKmH,gBAAgBD,GAG1BxI,KAAK0C,iBAAiB,iBAlB/B,SAAoBC,GACf3C,KAAK8C,iBAAiB,WAAYH,IACjC3C,KAAKsB,OACRtB,KAAKsB,KAAKiH,sBACVvI,KAAKsB,KAAK2D,qDAmBdiD,EAjKA,CAAuCQ,EAAA,GAyKvCC,EAAA,EAAShD,kBAAqC,kBAAIsC,sDCvMlDW,EAAA,SAAA/I,GAmBC,SAAAgJ,IAAA,IAAA/I,EACCD,EAAAE,KAAAC,OAAOA,YANDF,EAAA0B,QAAU,IAAIsH,EAAA,EAA6DhJ,GAOjFA,EAAKK,UAAY,uBACjBL,EAAKiJ,KAAO,aAEZjJ,EAAKkJ,UAAUR,SAAW,EAC1B1I,EAAKkJ,UAAUC,YAAc,EAE7BnJ,EAAKqB,eAuCP,OAlE0CgH,EAAA,EAAAU,EAAAhJ,GAmCzCY,OAAA+B,eAAWqG,EAAAzH,UAAA,gBAOX,WACC,OAAIpB,KAAKwB,QAAQ0H,UAAU,YACnBlJ,KAAKwB,QAAQ2H,MAAM,WAAYnJ,KAAKoJ,WAAqB,UAE1DpJ,KAAKoJ,WAAqB,cAXlC,SAAoBzG,GACnB3C,KAAKqJ,YAAY,WAAY1G,oCAoB9BlC,OAAA+B,eAAWqG,EAAAzH,UAAA,mBAOX,WACC,OAAOpB,KAAKoJ,WAAwB,iBARrC,SAAuBzG,GACtB3C,KAAKqJ,YAAY,cAAe1G,oCASlCkG,EAlEA,CAA0CS,EAAA,GA6J1CC,EAAA,SAAA1J,GA0EC,SAAA2J,IAAA,IAAA1J,EAGCD,EAAAE,KAAAC,OAAOA,YAdDF,EAAA2J,oBAA6D,IAAIC,EAAA,EAevE5J,EAAKK,UAAY,eAGjBL,EAAK6J,cAAgB,WAErB7J,EAAK8J,cAAgB9J,EAAK+J,iBAC1B/J,EAAK8J,cAAcE,UAAYhK,EAC/BA,EAAKiK,WAAWC,KAAKlK,EAAK8J,eAI1B9J,EAAKqB,eA+tBP,OAxzByEgH,EAAA,EAAAqB,EAAA3J,GAmG9D2J,EAAApI,UAAAyI,eAAV,WACC,OAAO,IAAIjB,GAQFY,EAAApI,UAAA6I,gBAAV,WACC,OAAO,IAAIhC,GASLuB,EAAApI,UAAA8I,kBAAP,eAAApK,EAAAE,KAECH,EAAAuB,UAAM8I,kBAAiBnK,KAAAC,MAEvBmK,EAAA,KAAWnK,KAAKoK,QAAQC,WAAY,SAACC,GACpC,GAAKA,EAAOC,iBAAiBf,GAAkBc,EAAOE,iBAAiBhB,EACtEc,EAAOG,0BAEH,CAEJ,IAAIC,EAAsB5K,EAAK6K,kBAAkBL,EAAQxK,EAAK2D,OAC1DmH,EAAqB9K,EAAK6K,kBAAkBL,EAAQxK,EAAK0D,KAAK,GAC9DkH,EACHJ,EAAOO,WAAaH,EAAoBI,MAGxCR,EAAO7G,MAAQ3D,EAAK2D,MAEjBmH,EACHN,EAAOS,SAAWH,EAAmBE,MAAQ,EAG7CR,EAAO9G,IAAM1D,EAAK0D,IAIf1D,EAAKkL,WAAWzG,OAAS,GAC5B+F,EAAOG,0BAYJjB,EAAApI,UAAAiB,SAAP,eAAAvC,EAAAE,KAECH,EAAAuB,UAAMiB,SAAQtC,KAAAC,MAEd,IAAIiL,EAAoBjL,KAAKkL,UAAU3G,OAEnCsG,EAAaM,EAAA,WAAiBlJ,KAAKmJ,MAAMpL,KAAKyD,MAAQwH,EAAY,GAAI,EAAGA,GACzEF,EAAWI,EAAA,WAAiBlJ,KAAKoJ,KAAKrL,KAAKwD,IAAMyH,GAAY,EAAGA,GAEhEjL,KAAK0D,SAASnB,SACjBvC,KAAK0D,SAASrB,WAIf,IAAIiJ,EAAmBtL,KAAK0D,SAASL,WAAarD,KAAK0D,SAAS6H,gBAC5DC,EAAoBvJ,KAAKwJ,IAAIzL,KAAKkL,UAAU3G,OAAQtC,KAAKoJ,MAAMN,EAAWF,GAAcS,IAa5F,GAXAtL,KAAK0L,YAAczJ,KAAKmJ,MAAMP,EAAaW,GAAaA,EACxDxL,KAAK2L,UAAY1J,KAAKoJ,KAAKrL,KAAKwD,IAAMyH,GAEtCjL,KAAK4L,gBAED5L,KAAK0L,aAAe1L,KAAK2L,WAC5B3L,KAAK2L,YAGN3L,KAAK6L,WAAaL,IAEdxL,KAAKqD,YAAc,GAAvB,CAIArD,KAAK8L,cAAgB9L,KAAKkL,UAAU3G,OAChCvE,KAAKkL,UAAU3G,QAAU,IAC5BvE,KAAK8L,cAAgB,GAGtB9L,KAAK+L,iBAKLlB,EAAaM,EAAA,IAAU,EAAGnL,KAAK0L,YAAc1L,KAAK6L,YAClDd,EAAWI,EAAA,IAAUnL,KAAKkL,UAAU3G,OAAQvE,KAAK2L,UAAY3L,KAAK6L,YAIlE,IAFA,IAAIG,EAAY,EAEPC,EAAI,EAAGA,EAAIpB,EAAYoB,IAAK,EAChCC,EAAWlM,KAAKkL,UAAUiB,SAASF,IAC9BG,YAAa,EAGdH,EAAIlB,EAAb,IAAK,IAAkBsB,EAAMrM,KAAKkL,UAAU3G,OAAQ0H,EAAII,EAAKJ,IAAK,EAC7DC,EAAWlM,KAAKkL,UAAUiB,SAASF,IAC9BG,YAAa,EAGvB,IAASH,EAAIpB,EAAYoB,EAAIlB,EAAUkB,IACtC,GAAIA,EAAIjM,KAAKkL,UAAU3G,OAAQ,CAC9B,IAAI2H,EAA8BlM,KAAKkL,UAAUiB,SAASF,GAC1D,GAAIA,EAAIjM,KAAK6L,YAAc5J,KAAKqK,MAAML,EAAIjM,KAAK6L,YACX7L,KAAKuM,UAAUN,KAEjDjM,KAAKwM,eAAeN,GACpBlM,KAAKyM,oBAAoBP,EAAUF,IAGpCA,SAIAhM,KAAKyM,oBAAoBP,EAAUF,GACnCE,EAASE,YAAa,EAKzBpM,KAAKwM,eAAexM,KAAK4J,eACzB5J,KAAKyM,oBAAoBzM,KAAK4J,cAAeoC,EAAY,EAAGhM,KAAKkL,UAAU3G,QAE1DvE,KAAKgL,WAEX0B,KAAK,SAACC,GAChB,IAAItE,EAA6BsE,EAAUtE,mBACvCC,EAA2BqE,EAAUrE,iBAEzC,GAAI6C,EAAA,WAAkB1H,MAAO4E,EAAoB7E,IAAK8E,IAAsB7E,MAAO3D,EAAK4L,YAAalI,IAAK1D,EAAK6L,YAK9G,IAHA,IAAIiB,EAAoBzB,EAAA,WAAiBlJ,KAAKoJ,KAAKvL,EAAK+L,WAAac,EAAUE,WAAY,EAAGvE,EAAmBD,GAC7GyE,EAAY,EAEPC,EAAI1E,EAAoB0E,GAAKzE,EAAkByE,GAAQH,EAAW,CAC1E,IAAIV,EAA8BpM,EAAKoL,UAAUiB,SAASY,GAC1DjN,EAAK0M,eAAeN,GACpBpM,EAAK2M,oBAAoBP,EAAUY,GACnCA,OAKH9M,KAAKgN,iBACLhN,KAAKiN,qBAELjN,KAAKkN,WAAWrK,aAChB7C,KAAK0D,SAASyJ,qBAWR3D,EAAApI,UAAAqL,oBAAP,SAA2BP,EAA6BF,EAAoBlB,GAC3EjL,EAAAuB,UAAMqL,oBAAmB1M,KAAAC,KAACkM,GAI1B,IAAIxI,EAAyB1D,KAAK0D,SAC7B0J,EAAA,SAAetC,KACnBA,EAAQ9K,KAAKyI,gBAAgByD,EAAS1D,WAGvC,IAAIuC,EAAW/K,KAAKyI,gBAAgByD,EAASjD,aAExCmE,EAAA,SAAerC,KACnBA,EAAWD,GAGZ,IAKIuC,EACAC,EACAC,EAPAtK,EAAmBjD,KAAKoI,gBAAgB0C,EAAOoB,EAASlD,UAAUR,UAClEzE,EAAsB/D,KAAKoI,gBAAgB2C,EAAUmB,EAASlD,UAAUC,aAE5EiD,EAASjJ,SAAWA,EAMhBiJ,EAASsB,UACZH,EAAetC,EACfuC,EAAetN,KAAKoI,gBAAgB0C,EAAOoB,EAASlD,UAAUR,UAC9D+E,EAAkBvN,KAAKoI,gBAAgBiF,EAAcnB,EAASlD,UAAUC,cAGzEiD,EAAStK,MAAQ8B,EAASV,gBAAgBC,GAE1C,IAAIoB,EAAiB6H,EAAS7H,KAC1BA,IAASA,EAAKoJ,UACjB/J,EAASU,kBAAkBC,EAAMpB,EAAUc,GAG5C,IAAIrD,EAAawL,EAASxL,KACtBA,IAASA,EAAK+M,UACjB/J,EAASI,kBAAkBpD,EAAMuC,EAAUc,GAI5C,IAAIW,EAAmBwH,EAASxH,MAC5BA,IAAUA,EAAM+I,WAEdvB,EAASsB,cAAyBE,GAAdhJ,EAAMqE,OAC9BmD,EAASnD,KAAOmD,EAASnD,MAG1BrF,EAASe,mBAAmBC,EAAOzB,EAAUc,IAEzCmI,EAASxH,MAAMiJ,cAAgB3N,KAAKkN,WAAWS,eAAiBzB,EAASxH,MAAMkJ,eAAiB5N,KAAKkN,WAAWU,kBACnH5N,KAAKkN,WAAWnE,KAAOmD,EAASxH,MAAMmJ,cAIxC,IAAIC,EAAiB5B,EAAS6B,SAC1BD,IAASA,EAAKL,WAEZvB,EAASsB,UACbH,EAAevC,EAAQ9K,KAAK6L,WAC5ByB,EAAetN,KAAKoI,gBAAgB0C,EAAOgD,EAAKlN,UAChD2M,EAAkBvN,KAAKoI,gBAAgBiF,EAAcS,EAAKlN,WAG3D8C,EAASsK,kBAAkBF,EAAMR,EAAcC,GAC1CrB,EAASsB,SACbxN,KAAKiO,SAAS/B,EAAUF,IAK1B,IAAIkC,EAAiBhC,EAASgC,KAC1BA,GACHxK,EAASsK,kBAAkBE,EAAMZ,EAAcC,IAW1C/D,EAAApI,UAAA+M,gBAAP,SAAuBjC,EAA6BkC,GAEnDvO,EAAAuB,UAAM+M,gBAAepO,KAAAC,KAACkM,EAAUkC,GAEhC,IAAIC,EAAyCrO,KAAKyJ,oBAAoB6E,OAAOpC,EAAS1D,UAClF6F,GAAoBnC,GACvBlM,KAAKkL,UAAUqD,OAAOF,GAGvBrO,KAAKyJ,oBAAoB+E,OAAOtC,EAAS1D,SAAU0D,IAa7C1C,EAAApI,UAAAgH,gBAAP,SAAuB0C,EAAelK,GAChCwM,EAAA,SAAexM,KACnBA,EAAW,IAGZ,IAAIiK,EAAqB7K,KAAK6K,WAC1BE,EAAmB/K,KAAK+K,SAExB0D,EAAqBzO,KAAK0O,iBAAiB7D,EAAYE,GAEvD4D,EAAgB3O,KAAK2O,cAGzBF,GAAcE,EACdF,GAAe,EAHGzO,KAAK4O,YAKvB,IAAI5D,EAAahL,KAAKgL,WAiCtB,OA/BAb,EAAA,aAAmBa,EAAWX,WAAY,SAACsC,GAC1C,IAAIkC,EAA0BlC,EAAUtE,mBACpCyG,EAAwBnC,EAAUrE,iBAEtC,GAAIwC,EAAQD,EACX,OAAO,EAGR,GAAIM,EAAA,WAAkB1H,MAAOoL,EAAiBrL,IAAKsL,IAAmBrL,MAAOoH,EAAYrH,IAAKuH,IAAa,CAC1G8D,EAAkB5M,KAAK8M,IAAIlE,EAAYgE,GACvCC,EAAgB7M,KAAKwJ,IAAIV,EAAU+D,GAEnC,IAAIjC,EAAoBF,EAAUE,UAG9B/B,EAAQgE,EACXjE,IAAeiE,EAAgBD,IAAoB,EAAIhC,GAG/C/B,EAAQ+D,IAKhB/D,EAAQ+D,GAAmB/D,EAAQ+D,GAAmBhC,GAIxD,OAAO,IAGD1B,EAAA,OAAaL,EAAQlK,EAAW+N,EAAgB9D,GAAc4D,EAAY,IAa3EjF,EAAApI,UAAA4N,mBAAP,SAA0BxG,EAAkB5H,GAC3C,IAAIkK,EAAgB9K,KAAKyI,gBAAgBD,GACzC,OAAOxI,KAAKoI,gBAAgB0C,EAAOlK,IAY7B4I,EAAApI,UAAA6N,gBAAP,SAAuBzG,EAAkB5H,GACxC,IAAIqC,EAAWjD,KAAKgP,mBAAmBxG,EAAU5H,GAC7CgB,EAAQ5B,KAAK0D,SAASV,gBAAgBC,GACtCG,EAAQpD,KAAK0D,SAASJ,gBAAgBL,GAC1C,OAASvB,EAAGE,EAAMF,EAAGI,EAAGF,EAAME,EAAGsB,MAAOA,IAazCoG,EAAApI,UAAA8N,WAAA,SAAW1G,EAAkB5H,GAC5B,OAAOZ,KAAKiP,gBAAgBzG,EAAU5H,IAahC4I,EAAApI,UAAA+N,cAAP,SAAqB3G,EAAkB5H,GACtC,OAAOZ,KAAKgP,mBAAmBxG,EAAU5H,IASnC4I,EAAApI,UAAAqH,gBAAP,SAAuBD,GACtB,GAAI4E,EAAA,SAAe5E,GAAW,CAC7B,IAAI0D,EAA8BlM,KAAKyJ,oBAAoB6E,OAAO9F,GAClE,GAAI0D,EACH,OAAOA,EAASpB,QAWZtB,EAAApI,UAAAgO,iBAAP,SAAwBC,EAAuBpG,GAC9CjJ,KAAKsP,cAActP,KAAKyI,gBAAgB4G,GAAgBrP,KAAKyI,gBAAgBQ,GAAe,IActFO,EAAApI,UAAAmO,gBAAP,SAAuB9L,EAAeD,EAAamL,EAAkCC,GACpF,IAAIY,EAAmBxP,KAAKgP,mBAAmBvL,EAAOkL,GAClDc,EAAiBzP,KAAKgP,mBAAmBxL,EAAKoL,GAClD,OAAO5O,KAAKkF,qBAAqBsK,EAAUC,IAWrCjG,EAAApI,UAAAsO,cAAP,SAAqBzM,EAAkBrC,GACtC,IAAIkK,EAAgB9K,KAAK2P,gBAAgB1M,GACzC,OAAOjD,KAAKoI,gBAAgB0C,EAAOlK,IAW7B4I,EAAApI,UAAAuJ,kBAAP,SAAyBL,EAAkBrH,EAAkB2M,GAA7D,IAAA9P,EAAAE,KAEC,GAAIoN,EAAA,SAAenK,GAAW,CAC7B,IAAI6H,EAAQ9K,KAAK2P,gBAAgB1M,GAE7BiJ,EAAWlM,KAAKkL,UAAUiB,SAASrB,GACvC,GAAIoB,EAAU,CACb,IAEI2D,EAFAC,EAAW5D,EAAS1D,SAIxB,IAAKoH,EAAM,CACV,IAAIG,EAAiBzF,EAAOY,UAAUiB,SAASrB,GAC/C,OAAIR,EAAOC,OAASvK,MACf+P,EAAeC,WAAaF,EACxBC,EAGLzF,EAAOE,OAASxK,MACf+P,EAAeE,WAAaH,EACxBC,GAIT5F,EAAA,aAAmBG,EAAOY,UAAUb,WAAY,SAAC6B,GAChD,OAAI5B,EAAOC,OAASzK,GACfoM,EAAS8D,WAAaF,GACzBD,EAAM3D,GACC,GAGL5B,EAAOE,OAAS1K,GACfoM,EAAS+D,WAAaH,IACzBD,EAAM3D,GACC,KAMH2D,GAGP,IAAK,IAAI5D,EAAI3B,EAAOY,UAAU3G,OAAS,EAAG0H,GAAK,EAAGA,IAAK,CACtD,IAAIiE,EAAW5F,EAAOY,UAAUiB,SAASF,GACzC,GAAI3B,EAAOC,OAASvK,MACfkQ,EAASF,WAAaF,EACzB,OAAOI,EAGT,GAAI5F,EAAOE,OAASxK,MACfkQ,EAASD,WAAaH,EACzB,OAAOI,MAmBP1G,EAAApI,UAAA+O,KAAP,SAAYjE,EAA4BkE,EAAcxP,GACrD,IAAIqC,EAIJ,OAHImK,EAAA,SAAegD,KAClBnN,EAAWjD,KAAKgP,mBAAmB9C,EAASmE,WAAWD,GAAMxP,IAE1DwM,EAAA,MAAYnK,GACRjD,KAAKsQ,UAAU5O,EAGf1B,KAAK0D,SAASV,gBAAgBC,GAAUvB,GAc1C8H,EAAApI,UAAAmP,KAAP,SAAYrE,EAA4BkE,EAAcxP,GACrD,IAAIqC,EAIJ,OAHImK,EAAA,SAAegD,KAClBnN,EAAWjD,KAAKgP,mBAAmB9C,EAASmE,WAAWD,GAAMxP,IAE1DwM,EAAA,MAAYnK,GACRjD,KAAKsQ,UAAUxO,EAGf9B,KAAK0D,SAASV,gBAAgBC,GAAUnB,GAe1C0H,EAAApI,UAAAoP,SAAP,SAAgBtE,EAA4BkE,EAAaxP,EAAmB6P,GAC3E,OAAOzQ,KAAKsD,gBAAgBtD,KAAKgP,mBAAmB9C,EAASmE,WAAWD,GAAMxP,KAYxE4I,EAAApI,UAAAsP,qBAAP,SAA4BzN,GAC3B,OAAOjD,KAAK0P,cAAczM,EAAU,IAY9BuG,EAAApI,UAAAuP,mBAAP,SAA0B1N,GACzB,OAAOjD,KAAK0P,cAAczM,EAAU,IAW9BuG,EAAApI,UAAAwP,eAAP,SAAsB3N,GACrB,IAAIiJ,EAA8BlM,KAAKkL,UAAUiB,SAASnM,KAAK2P,gBAAgB1M,IAC/E,GAAIiJ,EACH,OAAOlM,KAAKwB,QAAQ2H,MAAM,iBAAkB+C,EAAS1D,WAWhDgB,EAAApI,UAAAuO,gBAAP,SAAuB1M,IACtBA,EAAWkI,EAAA,MAAYlI,EAAU,KAClB,IACdA,EAAW,GAGZ,IAAI4H,EAAqB7K,KAAK6K,WAC1BE,EAAmB/K,KAAK+K,SACxB0D,EAAqB1D,EAAWF,EAEhCG,EAAahL,KAAKgL,WAElBF,EAAgB,KA0CpB,OAvCAX,EAAA,aAAmBa,EAAWX,WAAY,SAACsC,GAC1C,IAAIkE,EAA6BlE,EAAUxH,cACvC2L,EAA2BnE,EAAU5I,YAErC8K,EAA0BlC,EAAUtE,mBACpCyG,EAAwBnC,EAAUrE,iBAEtCuG,EAAkB1D,EAAA,IAAU0D,EAAiBhE,GAC7CiE,EAAgB3D,EAAA,IAAU2D,EAAe/D,GAEzC,IAAI8B,EAAoBF,EAAUE,UAKlC,GAHA4B,IAAeK,EAAgBD,IAAoB,EAAIhC,GAGnD5J,EAAW6N,EACdjG,IAAeiE,EAAgBD,IAAoB,EAAIhC,QAGnD,KAAI5J,EAAW4N,GAIf,CACJ,IAAIE,GAAiB9N,EAAW4N,IAAuBC,EAAmBD,GAE1E,OADA/F,EAAQ+D,EAAkB5M,KAAKqK,MAAMyE,GAAiBjC,EAAgBD,KAC/D,EAGR,OAAO,IAGHzB,EAAA,SAAetC,KACnBA,EAAQ7I,KAAKmJ,MAAMnI,EAAWwL,EAAa5D,IAExCC,GAASC,GACZD,IAGMA,GAeDtB,EAAApI,UAAA4P,iBAAP,SAAwB/N,GACvB,IAAIiJ,EAA8BlM,KAAKkL,UAAUiB,SAASnM,KAAK2P,gBAAgB1M,IAC/E,GAAIiJ,EACH,OAAOA,EAAS1D,UAUlB/H,OAAA+B,eAAWgH,EAAApI,UAAA,iBAAX,WAGC,OAAOpB,KAAK0D,SAASV,gBAAgB,oCAQ/BwG,EAAApI,UAAA6P,aAAP,WACCpR,EAAAuB,UAAM6P,aAAYlR,KAAAC,MAEHA,KAAK0D,SACXwN,SAASzD,UAAW,GAE/BjE,EAxzBA,CAAyEF,EAAA,GAg0BzEX,EAAA,EAAShD,kBAAgC,aAAI4D,EAC7CZ,EAAA,EAAShD,kBAAwC,qBAAIiD,kECv7BrDuI,EAAA,SAAAtR,GAmDC,SAAAuR,IAAA,IAAAtR,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,gBACjBL,EAAKqB,eA+CP,OArGmCgH,EAAA,EAAAiJ,EAAAvR,GA8DlCY,OAAA+B,eAAW4O,EAAAhQ,UAAA,iBAaX,WACC,OAAOpB,KAAK0C,iBAAiB,kBAd9B,SAAqBC,GAChB3C,KAAK8C,iBAAiB,YAAaH,KACtC3C,KAAKqR,WAAa1O,EAAM2O,UACpBtR,KAAKsB,OACRtB,KAAKsB,KAAKuB,aACV7C,KAAKsB,KAAK2D,sDAiBbxE,OAAA+B,eAAW4O,EAAAhQ,UAAA,eAaX,WACC,OAAOpB,KAAK0C,iBAAiB,gBAd9B,SAAmBC,GACd3C,KAAK8C,iBAAiB,UAAWH,KACpC3C,KAAKuR,SAAW5O,EAAM2O,UAClBtR,KAAKsB,OACRtB,KAAKsB,KAAKuB,aACV7C,KAAKsB,KAAK2D,sDAYdmM,EArGA,CAAmCI,EAAA,GA6GnC7I,EAAA,EAAShD,kBAAiC,cAAIwL,8BC9I9CM,EAAA,SAAA5R,GAYC,SAAA6R,IAAA,IAAA5R,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,mBACjBL,EAAKqB,aAELrB,EAAK6R,OAAOC,QACZ9R,EAAK6R,OAAOE,aAsCd,OAxDsC1J,EAAA,EAAAuJ,EAAA7R,GA0BrCY,OAAA+B,eAAWkP,EAAAtQ,UAAA,YAQX,WACC,OAAOpB,KAAK8R,MAAY,UATzB,SAAgBF,GACf5R,KAAK+R,QAAQ,OAAQH,GACrB5R,KAAK2C,MAAQiP,EAAKN,2CAgBnB7Q,OAAA+B,eAAWkP,EAAAtQ,UAAA,eAQX,WACC,OAAOpB,KAAK8R,MAAe,aAT5B,SAAmBF,GAClB5R,KAAK+R,QAAQ,UAAWH,GACxB5R,KAAKuR,SAAWK,EAAKN,2CAUvBI,EAxDA,CAAsCM,EAAA,GA4KtCC,EAAA,SAAApS,GA2OC,SAAAqS,IAAA,IAAApS,EAGCD,EAAAE,KAAAC,OAAOA,YA/IDF,EAAAqS,cAAqC,IAAIC,EAAA,EA6BzCtS,EAAAuS,YAA4C,IAAI3I,EAAA,EAuBhD5J,EAAAwS,wBAAwD,IAAI5I,EAAA,EA6CzD5J,EAAAyS,mBAAqCC,SAAU,MAAOC,MAAO,GAa7D3S,EAAA4S,kBAkCT5S,EAAKK,UAAY,WAEjBL,EAAKgD,iBAAiB,kBAAkB,GACxChD,EAAK6S,aAAc,EAMnB7S,EAAKqS,cAAcS,UAChBJ,SAAU,cAAeC,MAAO,IAChCD,SAAU,cAAeC,MAAO,IAChCD,SAAU,cAAeC,MAAO,KAChCD,SAAU,cAAeC,MAAO,KAChCD,SAAU,cAAeC,MAAO,MAChCD,SAAU,cAAeC,MAAO,MAChCD,SAAU,SAAUC,MAAO,IAC3BD,SAAU,SAAUC,MAAO,IAC3BD,SAAU,SAAUC,MAAO,KAC3BD,SAAU,SAAUC,MAAO,KAC3BD,SAAU,SAAUC,MAAO,IAC3BD,SAAU,SAAUC,MAAO,IAC3BD,SAAU,SAAUC,MAAO,KAC3BD,SAAU,SAAUC,MAAO,KAC3BD,SAAU,SAAUC,MAAO,KAC3BD,SAAU,OAAQC,MAAO,IACzBD,SAAU,OAAQC,MAAO,IACzBD,SAAU,OAAQC,MAAO,IACzBD,SAAU,OAAQC,MAAO,KACzBD,SAAU,MAAOC,MAAO,IACxBD,SAAU,MAAOC,MAAO,IACxBD,SAAU,MAAOC,MAAO,IACxBD,SAAU,MAAOC,MAAO,IACxBD,SAAU,MAAOC,MAAO,IACxBD,SAAU,OAAQC,MAAO,IACzBD,SAAU,QAASC,MAAO,IAC1BD,SAAU,QAASC,MAAO,IAC1BD,SAAU,QAASC,MAAO,IAC1BD,SAAU,QAASC,MAAO,IAC1BD,SAAU,OAAQC,MAAO,IACzBD,SAAU,OAAQC,MAAO,IACzBD,SAAU,OAAQC,MAAO,IACzBD,SAAU,OAAQC,MAAO,KACzBD,SAAU,OAAQC,MAAO,KACzBD,SAAU,OAAQC,MAAO,MACzBD,SAAU,OAAQC,MAAO,MACzBD,SAAU,OAAQC,MAAO,MACzBD,SAAU,OAAQC,MAAO,MACzBD,SAAU,OAAQC,MAAO,MACzBD,SAAU,OAAQC,MAAO,MACzBD,SAAU,OAAQC,MAAO,MACzBD,SAAU,OAAQC,MAAO,OAI5B3S,EAAK6J,cAAgB,OAGrB7J,EAAKqB,eAkyCP,OA3kDqEgH,EAAA,EAAA+J,EAAArS,GA0N7DqS,EAAA9Q,UAAA6M,SAAP,SAAgB/B,GACf,IAAIvJ,EAAQuJ,EAASvJ,MACjBrB,EAAO4K,EAASpC,UAChB+I,EAAevR,EAAKwR,cACpBC,EAAeC,EAAA,YAAkBH,EAAaL,SAAUK,EAAaJ,OAErExQ,KAAKqK,OAAO3J,EAAQrB,EAAKmK,KAAOsH,GAAgB,GAAK9Q,KAAKqK,MAAMrK,KAAKqK,OAAO3J,EAAQrB,EAAKmK,KAAOsH,GAAgB,GACnH7G,EAAS6B,SAAS3B,YAAa,EAG/BF,EAAS6B,SAAS3B,YAAa,GA6EvB8F,EAAA9Q,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MAGtBA,KAAKqS,YAAYa,OAAO,gBAC5BlT,KAAKqS,YAAY7D,OAAO,cAAexO,KAAKmT,SAASC,UAAU,sBAE3DpT,KAAKqS,YAAYa,OAAO,WAC5BlT,KAAKqS,YAAY7D,OAAO,SAAUxO,KAAKmT,SAASC,UAAU,iBAEtDpT,KAAKqS,YAAYa,OAAO,WAC5BlT,KAAKqS,YAAY7D,OAAO,SAAUxO,KAAKmT,SAASC,UAAU,iBAEtDpT,KAAKqS,YAAYa,OAAO,SAC5BlT,KAAKqS,YAAY7D,OAAO,OAAQxO,KAAKmT,SAASC,UAAU,eAEpDpT,KAAKqS,YAAYa,OAAO,QAC5BlT,KAAKqS,YAAY7D,OAAO,MAAOxO,KAAKmT,SAASC,UAAU,cAEnDpT,KAAKqS,YAAYa,OAAO,SAC5BlT,KAAKqS,YAAY7D,OAAO,OAAQxO,KAAKmT,SAASC,UAAU,cAEpDpT,KAAKqS,YAAYa,OAAO,UAC5BlT,KAAKqS,YAAY7D,OAAO,QAASxO,KAAKmT,SAASC,UAAU,gBAErDpT,KAAKqS,YAAYa,OAAO,SAC5BlT,KAAKqS,YAAY7D,OAAO,OAAQxO,KAAKmT,SAASC,UAAU,eAGpDpT,KAAKsS,wBAAwBY,OAAO,gBACxClT,KAAKsS,wBAAwB9D,OAAO,cAAexO,KAAKmT,SAASC,UAAU,sBAEvEpT,KAAKsS,wBAAwBY,OAAO,WACxClT,KAAKsS,wBAAwB9D,OAAO,SAAUxO,KAAKmT,SAASC,UAAU,iBAElEpT,KAAKsS,wBAAwBY,OAAO,WACxClT,KAAKsS,wBAAwB9D,OAAO,SAAUxO,KAAKmT,SAASC,UAAU,iBAElEpT,KAAKsS,wBAAwBY,OAAO,SACxClT,KAAKsS,wBAAwB9D,OAAO,OAAQxO,KAAKmT,SAASC,UAAU,eAEhEpT,KAAKsS,wBAAwBY,OAAO,QACxClT,KAAKsS,wBAAwB9D,OAAO,MAAOxO,KAAKmT,SAASC,UAAU,cAE/DpT,KAAKsS,wBAAwBY,OAAO,SACxClT,KAAKsS,wBAAwB9D,OAAO,OAAQxO,KAAKmT,SAASC,UAAU,cAEhEpT,KAAKsS,wBAAwBY,OAAO,UACxClT,KAAKsS,wBAAwB9D,OAAO,QAASxO,KAAKmT,SAASC,UAAU,eAAiB,IAAMpT,KAAKmT,SAASC,UAAU,gBAW5GlB,EAAA9Q,UAAAyI,eAAV,WACC,OAAO,IAAI4H,GAQFS,EAAA9Q,UAAA6I,gBAAV,WACC,OAAO,IAAIkH,GAQLe,EAAA9Q,UAAAiS,kBAAP,WAEC,IAAI5P,EAAgBzD,KAAKyD,MACrBD,EAAcxD,KAAKwD,IACnB8P,GAAuBtT,KAAK+O,IAAM/O,KAAKyL,KAAOzL,KAAKuT,aAEvD1T,EAAAuB,UAAMiS,kBAAiBtT,KAAAC,MAEvBA,KAAK8L,eAAiB9L,KAAK+O,IAAM/O,KAAKyL,KAAOzL,KAAKuT,aAIlD9P,IAAiBD,EAAMC,IAAU,EAAI6P,IADPtT,KAAK+O,IAAM/O,KAAKyL,KAAOzL,KAAKuT,eAE1DvT,KAAKwT,MAAO/P,MAAOA,EAAOD,IAAKA,IAAO,GAAO,IASvC0O,EAAA9Q,UAAAqS,8BAAP,aASOvB,EAAA9Q,UAAAsS,cAAP,eAAA5T,EAAAE,KACCH,EAAAuB,UAAMsS,cAAa3T,KAAAC,MAEnB,IAAI6S,EAA8B7S,KAAK2T,eAAe,EAAG3T,KAAK0O,iBAAiB1O,KAAK4T,WAAY5T,KAAK6T,YAAa7T,KAAK8T,YAEnHd,EAAA,YAAkBH,EAAaL,SAAUK,EAAaJ,OAASzS,KAAKuT,eACvEV,EAAe1K,EAAA,KAAKnI,KAAK+T,eAG1B/T,KAAK8S,cAAgBD,EAErB7S,KAAKgU,UAAYhB,EAAA,MAAY,IAAIiB,KAAKjU,KAAKyL,KAAMoH,EAAaL,SAAUK,EAAaJ,OACrFzS,KAAKkU,cAAgBlB,EAAA,YAAkBH,EAAaL,UAGpDxS,KAAKmU,kBAAoBnB,EAAA,YAAkBH,EAAaL,SAAUK,EAAaJ,OAC/E,IAAIA,EAAgBxQ,KAAKoJ,KAAKrL,KAAKoU,YAAcpU,KAAKmU,mBACtD1B,EAAQxQ,KAAKmJ,MAAMpL,KAAKyD,MAAQgP,GAAS,EAEzCO,EAAA,IAAUhT,KAAKgU,UAAWnB,EAAaL,SAAUC,EAAQI,EAAaJ,OAGtEtI,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnC,GAAIA,EAAO+J,UAAYvU,EAAM,CAC5B,IAAIwU,EAAgChK,EAAOiK,aAAazU,GAGpD+K,EAAqBP,EAAOY,UAAUsJ,iBAAiB1U,EAAK8T,WAAY,SAAClS,GAAM,OAAQA,EAAE4S,IAAQ,QAEjGvJ,EAAmBT,EAAOY,UAAUsJ,iBAAiB1U,EAAK+T,WAAa,EAAG,SAACnS,GAAM,OAAQA,EAAE4S,IAAQ,SAAW,EAElHhK,EAAOO,WAAaA,EACpBP,EAAOS,SAAWA,MAUdmH,EAAA9Q,UAAAqT,aAAP,WACC5U,EAAAuB,UAAMqT,aAAY1U,KAAAC,MACboN,EAAA,SAAepN,KAAK+T,aAAatB,SACrCzS,KAAK+T,aAAatB,MAAQ,IAO5BhS,OAAA+B,eAAW0P,EAAA9Q,UAAA,qBAAX,eAAAtB,EAAAE,KACK0U,EAAgBC,OAAOC,UAW3B,OAVA5U,KAAKsK,OAAOoC,KAAK,SAACpC,GACboK,EAAgB5U,EAAK4S,eAAepI,EAAOuK,OAC9CH,EAAgB5U,EAAK4S,eAAepI,EAAOuK,QAIzCH,GAAiBC,OAAOC,WAA8B,GAAjBF,IACxCA,EAAgB1B,EAAA,YAAkB,QAG5B0B,mCAUDxC,EAAA9Q,UAAA0T,uBAAP,SAA8BxK,GAC7BtK,KAAK0S,eAAepI,EAAOuK,KAAOF,OAAOC,WASnC1C,EAAA9Q,UAAA2T,2BAAP,eAAAjV,EAAAE,KACCmK,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnCH,EAAA,KAAWG,EAAOY,UAAUb,WAAY,SAAC6B,GACxCpM,EAAKkV,0BAA0B9I,OAIjClM,KAAKiV,uBAUC/C,EAAA9Q,UAAA4T,0BAAP,SAAiC9I,GAAjC,IAAApM,EAAAE,KAEK+T,EAA8B/T,KAAK+T,aAEvCmB,EAAA,KAAahJ,EAAS4F,MAAO,SAAC1B,GAC7B,IAAIwB,EAAa1F,EAASiJ,QAAQ/E,GAC9BgF,EAAkBpC,EAAA,MAAYA,EAAA,KAAWpB,GAAOmC,EAAavB,SAAUuB,EAAatB,OACpFZ,EAAgBmB,EAAA,IAAUA,EAAA,KAAWoC,GAAYrB,EAAavB,SAAUuB,EAAatB,OAEzFvG,EAASmJ,mBAAmBjF,EAAKgF,EAAU9D,UAAW,QACtDpF,EAASmJ,mBAAmBjF,EAAKyB,EAAQP,UAAW,SAE7BpF,EAASpC,UACzBwL,gBAAgBhH,OAAOxO,EAAK+U,KAAKrG,OAAO4G,EAAU9D,UAAUiE,WAAYrJ,MAevEgG,EAAA9Q,UAAA6T,oBAAV,eAAAnV,EAAAE,KAEC,GAAIA,KAAKwV,kBAAoBpI,EAAA,SAAepN,KAAKyL,MAAQ2B,EAAA,SAAepN,KAAK+O,KAAM,CAClF,IAAIyD,EAAqBxS,KAAK+T,aAAavB,SACvCC,EAAgBzS,KAAK+T,aAAatB,MAEtCzS,KAAKgL,WAAWyK,QAKhB,IAHA,IAAI7D,EAAaoB,EAAA,MAAY,IAAIiB,KAAKjU,KAAKyL,KAAM+G,EAAUC,GACvD9F,OAAS,eAGZqG,EAAA,IAAUpB,EAAMY,EAAUC,GAE1B,IAAIiD,EAAoB9D,EAAKN,UACzBqE,EAAuBD,EAAUH,WAEvBpL,EAAA,SAAeyL,EAAKtL,OAAOD,WAAY,SAACC,GACrD,QAASA,EAAOgL,gBAAgBhH,OAAOxO,EAAK+U,KAAKvG,OAAOqH,KAYpDhJ,IAEHA,EAAUkF,QAAU,IAAIoC,KAAKyB,EAAY,GACzC/I,OAAYe,GAVRf,KACJA,EAA2BiJ,EAAK5K,WAAW6K,UACjCT,UAAY,IAAInB,KAAKyB,YAd3B9D,EAAKN,UAAYtR,KAAK+O,IAAM/O,KAAKuT,oBAkCnCrB,EAAA9Q,UAAAwK,cAAP,eAAA9L,EAAAE,KACCH,EAAAuB,UAAMwK,cAAa7L,KAAAC,MACnB,IAAIgL,EAAahL,KAAK8V,YACtB3L,EAAA,KAAWa,EAAWX,WAAY,SAACsC,GAClC,IAAIoJ,EAAyB9T,KAAKoJ,KAAKvL,EAAKgU,YAAc7R,KAAKwJ,IAAI3L,EAAK0D,IAAKmJ,EAAU5I,aAAe9B,KAAK8M,IAAIjP,EAAK2D,MAAOkJ,EAAUxH,iBAAmBrF,EAAK0D,IAAM1D,EAAK2D,QACxKkJ,EAAUkG,aAAe/S,EAAK6T,eAAe,EAAGhH,EAAUrE,iBAAmBqE,EAAUtE,mBAAoB0N,GAC3G,IAAIC,EAAWhD,EAAA,MAAY,IAAIiB,KAAKtH,EAAUtE,oBAAqBsE,EAAUkG,aAAaL,SAAU7F,EAAUkG,aAAaJ,OACvHuD,EAAS1E,UAAY3E,EAAUyI,UAAU9D,WAC5C0B,EAAA,IAAUgD,EAAUrJ,EAAUkG,aAAaL,SAAU7F,EAAUkG,aAAaJ,OAG7E9F,EAAUqJ,SAAWA,KAahB9D,EAAA9Q,UAAA6U,YAAP,SAAmBrE,EAAYsE,GAC9B,IAAI1D,EAAqBxS,KAAK8S,cAAcN,SACxC2D,EAA4BnW,KAAK8S,cAAcL,MAEnDO,EAAA,MAAYpB,EAAMY,GAElB,IAAI4D,EAAwBxE,EAAKN,UAE7B+E,EAAgBrD,EAAA,KAAWpB,GAE3B0E,EAAoBtD,EAAA,IAAUqD,EAAS7D,EAAU0D,GAAe5E,UAGhE3E,EAA0C3M,KAAKuM,UAAU+J,GACzD3J,IACH0J,EAAU,IAAIpC,KAAKtH,EAAUkF,QAAQP,WACrC0B,EAAA,MAAYqD,EAAS7D,EAAU2D,GAC3BE,EAAQ/E,UAAY3E,EAAUkF,QAAQP,WACzC0B,EAAA,IAAUqD,EAAS7D,EAAU2D,GAE9BG,EAAYD,EAAQ/E,WAIrB,IAAIiF,EAAgCvW,KAAK0O,iBAAiB0H,EAAeE,GAKzE,OAHiCrU,KAAKqK,MAAMiK,EAAwBvD,EAAA,YAAkBR,IAG7D2D,EACjBnW,KAAKiW,YAAYrE,EAAMsE,EAAgBC,GAGxCE,GAaDnE,EAAA9Q,UAAAoV,iBAAP,SAAwB7J,EAA0B6F,EAAoBC,GACrE,IAAIb,EAAO,IAAIqC,KAAKtH,EAAU4E,UAC9ByB,EAAA,MAAYpB,EAAMY,EAAUC,GAC5BO,EAAA,IAAUpB,EAAMY,EAAUC,GAE1B,IAAI6D,EAAY1E,EAAKN,UAGrB,OADA3E,EAA2B3M,KAAKuM,UAAU+J,IAElCtW,KAAKwW,iBAAiB7J,EAAW6F,EAAUC,GAE5Cb,GASDM,EAAA9Q,UAAAqV,qBAAP,eAAA3W,EAAAE,KACC,GAAIoN,EAAA,SAAepN,KAAK+O,MAAQ3B,EAAA,SAAepN,KAAKyL,KAAM,CAEzDzL,KAAK0T,gBAGL,IAAI4C,EAAYtW,KAAKgU,UAAU1C,UAC3BkB,EAAWxS,KAAK8S,cAAcN,SAC9B0D,EAAgBlW,KAAK8S,cAAcL,MACnCiE,EAAe1D,EAAA,KAAWhT,KAAKgU,WAE/B2C,EAAoB3W,KAAK4W,mBAC7B5W,KAAK+L,iBAEL,qBACC,IAAI6F,EAAOiF,EAAKZ,YAAY,IAAIhC,KAAKyC,GAAeR,GAEpDI,EAAY1E,EAAKN,UAEjB,IAAIO,EAAUmB,EAAA,KAAWpB,GACzBC,EAAUmB,EAAA,IAAUnB,EAASW,EAAU0D,GAEvC,IAAIY,EAASD,EAAKxE,YAAY/D,OAAOkE,GAEjCqE,EAAKE,gBAAkBL,GACtB1D,EAAA,YAAkBpB,EAAM8E,EAAcG,EAAK3C,gBAC7B,SAAb1B,IACHsE,EAASD,EAAKvE,wBAAwBhE,OAAOkE,IAKhD,IAAIzJ,EAAO8N,EAAKG,cAAcF,OAAOlF,EAAMkF,GAEvC5K,EAAWyK,EAAkBM,KAAK,SAACvV,GAAM,OAAAA,EAAEqH,OAASA,IACxD8N,EAAKrK,eAAeN,GAEpBA,EAASS,eAAYe,EACrBxB,EAAS0F,KAAOA,EAChB1F,EAAS2F,QAAUA,EAEnB3F,EAASnD,KAAOA,EAEhB2N,EAAe9E,EAEfiF,EAAKpK,oBAAoBP,WA/BnBoK,GAAatW,KAAK6T,gBAmCzB,IAAIqD,EAAyBlX,KAAK0D,SAElCyG,EAAA,KAAWnK,KAAKgL,WAAWX,WAAY,SAACsC,GACvC,GAAIA,EAAUE,UAAY,EAAG,CAC5B,IAAIsK,EAAqBxK,EAAUkG,aAAaL,SAC5C4E,EAAwBzK,EAAUkG,aAAaJ,MAGnD,GAAItH,EAAA,YAAkBwB,EAAU0K,WAAY1K,EAAU2K,UAAuC,EAA3BJ,EAAS3L,gBAK1E,IAJA,IAEIgM,EAFAC,EAAoB7K,EAAUqJ,SAAS1E,UAGvCmB,EAAgB,eAEnB,IAAIb,EAAaoB,EAAA,KAAWrG,EAAUqJ,UAGtC,GAFAwB,EAAYxE,EAAA,IAAUpB,EAAMuF,EAAUC,EAAgB3E,GAAOnB,UAC7DmB,IACI+E,EAAY7K,EAAUtE,oBAAsBmP,EAAY7K,EAAUrE,iBAAkB,CACvF,IAAIuJ,EAAUmB,EAAA,KAAWpB,GACzBC,EAAUmB,EAAA,IAAUnB,EAASsF,EAAUC,GAEvC,IAAIN,EAAiBhX,EAAKuS,YAAY/D,OAAO6I,GAEzCrX,EAAKiX,gBAAkBQ,GACtBvE,EAAA,YAAkBpB,EAAM2F,EAAczX,EAAKoU,gBAC7B,SAAbiD,IACHL,EAAShX,EAAKwS,wBAAwBhE,OAAO6I,IAKhD,IAAIM,EAAe3X,EAAKkX,cAAcF,OAAOlF,EAAMkF,GAE/C5K,EAA8ByK,EAAkBM,KAAK,SAACvV,GAAM,OAAAA,EAAEqH,OAAS0O,IAE3E3X,EAAK0M,eAAeN,GACpBA,EAASS,UAAYA,EACrBA,EAAUzB,UAAUwM,UAAUxL,GAE9BA,EAAS0F,KAAOA,EAChB1F,EAAS2F,QAAUA,EACnB3F,EAASnD,KAAO0O,EAChBF,EAAe3F,EACf9R,EAAK2M,oBAAoBP,KA9BpBsL,GAAa7K,EAAUgL,sBA6C5BzF,EAAA9Q,UAAAqL,oBAAP,SAA2BP,GAE1B,GAAIkB,EAAA,SAAepN,KAAK+O,MAAQ3B,EAAA,SAAepN,KAAKyL,KAAM,CACzD,IAAI/H,EAAyB1D,KAAK0D,SAE9B4S,EAAYpK,EAASvJ,MACrBiV,EAAe1L,EAASqF,SAEvBnE,EAAA,SAAewK,KACnBA,EAAetB,GAGhB,IAAIrT,EAAmBjD,KAAK6X,gBAAgBvB,GACxCvS,EAAsB/D,KAAK6X,gBAAgBD,GAC3CrK,EAAkBxJ,GAEjBmI,EAASsB,SAAWxN,KAAK8S,cAAcL,MAAQ,IACnD1O,EAAcd,GAAYc,EAAcd,GAAYjD,KAAK8S,cAAcL,OAGxEvG,EAASjJ,SAAWA,EAEpB,IAAIoB,EAAiB6H,EAAS7H,KAC1BA,IAASA,EAAKoJ,UACjB/J,EAASU,kBAAkBC,EAAMpB,EAAUc,GAG5C,IAAIrD,EAAawL,EAASxL,KACtBA,IAASA,EAAK+M,UACjB/J,EAASI,kBAAkBpD,EAAMuC,EAAUc,GAG5C,IAAI+J,EAAiB5B,EAAS6B,SAC1BD,IAASA,EAAKL,WACjB/J,EAASsK,kBAAkBF,EAAM7K,EAAUsK,GACtCrB,EAASsB,SACbxN,KAAKiO,SAAS/B,IAIhB,IAAIgC,EAAiBhC,EAASgC,KAC1BA,GACHxK,EAASsK,kBAAkBE,EAAMjL,EAAUc,GAG5C,IAAIW,EAAmBwH,EAASxH,MAChC,GAAIA,IAAUA,EAAM+I,SAAU,CAC7B,IAAIqK,EAAWpT,EAAM9D,SAEL,GAAZkX,IAKFA,EAJ+B,GAA5B9X,KAAK8S,cAAcL,OAA6C,QAA/BzS,KAAK8S,cAAcN,UAAuBtG,EAASsB,QAI5E,EAHA,IAOb9J,EAASe,mBAAmBC,EAAOzB,EAAUc,EAAa+T,MAU7DrX,OAAA+B,eAAW0P,EAAA9Q,UAAA,oBAAX,WACC,OAAO4R,EAAA,YAAkBhT,KAAK+T,aAAavB,SAAUxS,KAAK+T,aAAatB,wCAYjEP,EAAA9Q,UAAA2W,aAAP,SAAoBtM,EAAasD,GAChC,OAAStD,IAAKA,EAAKsD,IAAKA,EAAKiJ,KAAMhY,KAAKuT,eAS/BrB,EAAA9Q,UAAA6W,OAAV,SAAiBtV,GAChB,OAAOqQ,EAAA,MAAY,IAAIiB,KAAKtR,GAAQ3C,KAAK+T,aAAavB,SAAUxS,KAAK+T,aAAatB,OAAOnB,UAAYtR,KAAKuT,aAAevT,KAAK2O,eASrHuD,EAAA9Q,UAAA8W,OAAV,SAAiBvV,GAChB,OAAOqQ,EAAA,MAAY,IAAIiB,KAAKtR,GAAQ3C,KAAK+T,aAAavB,SAAUxS,KAAK+T,aAAatB,OAAOnB,UAAYtR,KAAKuT,aAAevT,KAAK4O,aAaxHsD,EAAA9Q,UAAAuS,eAAP,SAAsB7I,EAAeqN,EAAkBC,GACtD,IAAIjG,EAAqCnS,KAAKmS,cAE1CU,EAA8BV,EAAchG,SAASrB,GAErDuN,EAA2BrF,EAAA,YAAkBH,EAAaL,SAAUK,EAAaJ,OAEjF6F,EAAoBnG,EAAc5N,OAAS,EAC/C,GAAIuG,GAASwN,EACZ,OAAOnQ,EAAA,KAAKgK,EAAchG,SAASmM,IAGpC,IAAI7F,EAAgBxQ,KAAKoJ,KAAK8M,EAAWE,GAEzC,OAAIF,EAAWE,GAAoBvN,EAAQ,EACnC3C,EAAA,KAAKgK,EAAchG,SAASrB,EAAQ,IAGxC2H,GAAS2F,EACLjQ,EAAA,KAAKgK,EAAchG,SAASrB,IAE/BA,EAAQ,EAAIqH,EAAc5N,OACtBvE,KAAK2T,eAAe7I,EAAQ,EAAGqN,EAAUC,GAEzCjQ,EAAA,KAAKgK,EAAchG,SAASrB,KAW/BoH,EAAA9Q,UAAAmX,YAAP,SAAmB5V,GAClB,OAAO3C,KAAKgX,cAAcF,OAAOnU,IAS3BuP,EAAA9Q,UAAAoX,eAAP,SAAsB5G,GACrB,OAAO5R,KAAK6X,gBAAgBjG,EAAKN,YAS3BY,EAAA9Q,UAAA+N,cAAP,SAAqByC,GACpB,OAAIA,aAAgBqC,KACZjU,KAAKwY,eAAe5G,GAGpB5R,KAAK6X,gBAAgBjG,IAUvBM,EAAA9Q,UAAAqX,YAAP,SAAmB7G,GAClB,IAAI3O,EAAWjD,KAAKwY,eAAe5G,GAC/BhQ,EAAQ5B,KAAK0D,SAASV,gBAAgBC,GACtCG,EAAQpD,KAAK0D,SAASJ,gBAAgBL,GAC1C,OAASvB,EAAGE,EAAMF,EAAGI,EAAGF,EAAME,EAAGsB,MAAOA,IAUlC8O,EAAA9Q,UAAA8N,WAAP,SAAkB0C,GACjB,OAAIA,aAAgBqC,KACZjU,KAAKyY,YAAY7G,GAGjB5R,KAAK0Y,aAAa9G,IAUpBM,EAAA9Q,UAAAuX,eAAP,SAAsB1V,GACrB,OAAO,IAAIgR,KAAKjU,KAAK4Y,gBAAgB3V,KAa/BiP,EAAA9Q,UAAA+O,KAAP,SAAYjE,EAA4BkE,EAAaxP,GACpD,IAAI+B,EAAgB3C,KAAK6Y,kBAAkB3M,EAAUkE,EAAKxP,GAO1D,OAJKwM,EAAA,SAAezK,KACnBA,EAAQ3C,KAAK8Y,WAGP9Y,KAAK0D,SAASV,gBAAgBhD,KAAK6X,gBAAgBlV,IAAQjB,GAa5DwQ,EAAA9Q,UAAAmP,KAAP,SAAYrE,EAA4BkE,EAAaxP,GACpD,IAAI+B,EAAgB3C,KAAK6Y,kBAAkB3M,EAAUkE,EAAKxP,GACtDmY,EAAgB7M,EAAS8M,SAAS,SAAU,SAMhD,OAJK5L,EAAA,SAAezK,KACnBA,EAAQ3C,KAAK8Y,WAGP9Y,KAAK0D,SAASV,gBAAgBhD,KAAK6X,gBAAgBlV,EAAQoW,IAAQjX,GAcpEoQ,EAAA9Q,UAAAoP,SAAP,SAAgBtE,EAA4BkE,EAAaxP,EAAmB6P,GAC3E,IAAI9N,EAAgB3C,KAAK6Y,kBAAkB3M,EAAUkE,EAAKxP,GACtDmY,EAAgB7M,EAAS8M,SAASvI,EAAU,SAMhD,OAJKrD,EAAA,SAAezK,KACnBA,EAAQ3C,KAAK8Y,WAGP9Y,KAAKsD,gBAAgBtD,KAAK6X,gBAAgBlV,EAAQoW,KAahD7G,EAAA9Q,UAAAyX,kBAAV,SAA4B3M,EAA4BkE,EAAaxP,GACpE,GAAKwM,EAAA,SAAegD,GAApB,CAIKhD,EAAA,SAAexM,KACnBA,EAAWsL,EAAS+M,iBAAiB7I,GAEhChD,EAAA,SAAexM,KACnBA,EAAW,IAIb,IAAI8U,EAAoBxJ,EAASyF,OAAOvB,GAAW,KAC/C8I,EAAkBhN,EAASyF,OAAOvB,GAAY,MAElD,OAAIhD,EAAA,SAAesI,IAActI,EAAA,SAAe8L,GACxCxD,GAAawD,EAAUxD,GAAa9U,OAD5C,IAYMsR,EAAA9Q,UAAA+X,sBAAP,SAA6BjN,EAA4BkN,GAExD,IACIC,EADA/O,EAAS4B,EAASpC,UAGlB8H,EAAmB1F,EAAU,OAASkN,GAC1C,GAAIxH,EAAJ,CACCyH,EAAOzH,EAAKN,UAKb,IAIIgI,EAJAC,EAAuBrN,EAAU,WAAakN,GAC9CI,EAAyBxZ,KAAKyZ,gBAQlC,GAJIF,IACHD,EAAWC,EAASjI,WAGjBlE,EAAA,SAAekM,GAAW,CAC7B,IAAI7K,EAAaxM,KAAKyX,IAAIL,EAAOC,GAE7BtZ,KAAK0S,eAAepI,EAAOuK,KAAOpG,IACrCzO,KAAK0S,eAAepI,EAAOuK,KAAOpG,GAIpC,IAAIkL,EAAoBN,EAAOG,EAE3BG,EAAY,GACX3Z,KAAK0S,eAAepI,EAAOuK,KAAO8E,IACrC3Z,KAAK0S,eAAepI,EAAOuK,KAAO8E,GAIpC3Z,KAAKyZ,gBAAkBJ,IASjBnH,EAAA9Q,UAAAwY,mBAAP,WACC/Z,EAAAuB,UAAMwY,mBAAkB7Z,KAAAC,MAExB,IAAI+T,EAA8B/T,KAAK2T,eAAe,EAAG3T,KAAK0U,cAAe,GAEzE1U,KAAK0U,eAAiB1B,EAAA,YAAkB,MAAO,KAAgC,QAAzBe,EAAavB,WACtEuB,EAAavB,SAAW,QACxBuB,EAAatB,MAAQ,GAGlBzS,KAAK0U,eAAiB1B,EAAA,YAAkB,OAAQ,KAAgC,QAAzBe,EAAavB,WACvEuB,EAAavB,SAAW,MACxBuB,EAAatB,MAAQ,GAItBzS,KAAKuS,kBAAoBwB,GAiB1BtT,OAAA+B,eAAW0P,EAAA9Q,UAAA,oBAOX,WACC,OAAIpB,KAAK6Z,cACD7Z,KAAK6Z,cAGL7Z,KAAKuS,uBAZd,SAAwBuH,GACvB9Z,KAAK6Z,cAAgBC,mCAoCtBrZ,OAAA+B,eAAW0P,EAAA9Q,UAAA,wBAiBX,WACC,OAAOpB,KAAK0C,iBAAiB,yBAlB9B,SAA4BC,GAK3B,GAJI3C,KAAK8C,iBAAiB,mBAAoBH,IAC7C3C,KAAK+Z,iBAGFpX,EAAO,CACV,IAAIqX,EAAgBha,KAAKgL,WAAWrK,SACpCqZ,EAAcC,UAAUxM,UAAW,EACnCuM,EAAcE,QAAQzM,UAAW,EACjCuM,EAAcG,UAAU1M,UAAW,EACnCuM,EAAcnN,UAAY,oCAkB5BpM,OAAA+B,eAAW0P,EAAA9Q,UAAA,yBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,0BAR9B,SAA6BC,GAC5B3C,KAAK8C,iBAAiB,oBAAqBH,oCAiB5ClC,OAAA+B,eAAW0P,EAAA9Q,UAAA,sBASX,WACC,OAAOpB,KAAK0C,iBAAiB,uBAV9B,SAA0BC,GACrB3C,KAAK8C,iBAAiB,iBAAkBH,IAC3C3C,KAAK+Z,kDAsBA7H,EAAA9Q,UAAAwP,eAAP,SAAsB3N,GACrB,IAAI8F,EACA6I,EAAO5R,KAAK2Y,eAAe1V,GAG/B,GAFA2O,EAAOoB,EAAA,MAAYpB,EAAM5R,KAAK+T,aAAavB,SAAUxS,KAAK+T,aAAatB,OAEnErF,EAAA,SAAepN,KAAKoa,mBACvBrR,EAAO/I,KAAKgX,cAAcF,OAAOlF,EAAM5R,KAAKoa,uBAExC,CACJ,IAAIC,EAAara,KAAKqS,YAAY/D,OAAOtO,KAAK+T,aAAavB,UAE1DzJ,EADGsR,EACIra,KAAKgX,cAAcF,OAAOlF,EAAMyI,GAGhCra,KAAKgR,iBAAiB/N,GAG/B,OAAOjD,KAAKwB,QAAQ2H,MAAM,iBAAkBJ,IAWtCmJ,EAAA9Q,UAAAsO,cAAP,SAAqBzM,EAAkBrC,GACtC,IAAImT,EAAe/T,KAAK+T,aACpBvB,EAAWuB,EAAavB,SACxBC,EAAQsB,EAAatB,MAErBb,EAAa5R,KAAK2Y,eAAe1V,GAQrC,GANA+P,EAAA,MAAYpB,EAAMY,EAAUC,GAExB7R,EAAW,GACdoS,EAAA,IAAUpB,EAAMY,EAAU5R,EAAW6R,GAGlCzS,KAAKuM,UAAUqF,EAAKN,WACvB,KAAOM,EAAKN,UAAYtR,KAAK+O,MAC5BiE,EAAA,IAAUpB,EAAMY,EAAUC,GACrBzS,KAAKuM,UAAUqF,EAAKN,cAM3B,OAAOtR,KAAKwY,eAAe5G,IAWrBM,EAAA9Q,UAAAsP,qBAAP,SAA4BzN,GAC3B,OAAOjD,KAAK0P,cAAczM,EAAU,IAW9BiP,EAAA9Q,UAAAuP,mBAAP,SAA0B1N,GACzB,OAAOjD,KAAK0P,cAAczM,EAAU,IAiB9BiP,EAAA9Q,UAAAuJ,kBAAP,SAAyBL,EAAkBrH,EAAkBqX,GAC5D,IAAI3X,EAAgB3C,KAAK4Y,gBAAgB3V,GACrC2O,EAAaoB,EAAA,MAAY,IAAIiB,KAAKtR,GAAQ3C,KAAK+T,aAAavB,SAAUxS,KAAK+T,aAAatB,OACxFvG,EAAW5B,EAAOgL,gBAAgBhH,OAAOtO,KAAK6U,KAAKvG,OAAOsD,EAAKN,UAAUiE,YAG7E,IAAKrJ,GAAYoO,EAAa,CAM7B,IAJA,IAAIC,EAAY,EACZC,OAAY,EACZC,EAAW,IAAIxG,KAAKrC,EAAKN,WAEtBmJ,EAASnJ,UAAYtR,KAAK0a,YAChCD,EAAWzH,EAAA,IAAUyH,EAAUza,KAAK+T,aAAavB,UAAWxS,KAAK+T,aAAatB,SAC9E+H,EAAelQ,EAAOgL,gBAAgBhH,OAAOtO,KAAK6U,KAAKvG,OAAOmM,EAASnJ,UAAUiE,mBAIjFgF,EACgB,OAQjB,IAHA,IAAII,EAAa,EACbC,OAAa,EACbC,EAAY,IAAI5G,KAAKrC,EAAKN,WACvBuJ,EAAUvJ,UAAYtR,KAAK8a,YACjCD,EAAY7H,EAAA,IAAU6H,EAAW7a,KAAK+T,aAAavB,SAAUxS,KAAK+T,aAAatB,SAC/EmI,EAAgBtQ,EAAOgL,gBAAgBhH,OAAOtO,KAAK6U,KAAKvG,OAAOuM,EAAUvJ,UAAUiE,mBAInFoF,EACiB,OAKlB,GAAIH,IAAiBI,EACpB,OAAOJ,EAEH,IAAKA,GAAgBI,EACzB,OAAOA,EAEH,GAAIJ,GAAgBI,EACxB,OAAIL,EAAYI,EACRH,EAGAI,EAIV,OAAO1O,GAeDgG,EAAA9Q,UAAA4P,iBAAP,SAAwB/N,GAEvB,IAAI2O,EAAO5R,KAAK2Y,eAAe1V,GAC/B,OAAOjD,KAAKgX,cAAcF,OAAOlF,EAAM5R,KAAK+a,0BAQnC7I,EAAA9Q,UAAA2Z,sBAAV,WACC,OAAO/a,KAAKqS,YAAY/D,OAAOtO,KAAK8S,cAAgB9S,KAAK8S,cAAcN,SAAW,QAQ5EN,EAAA9Q,UAAA6P,aAAP,WACCpR,EAAAuB,UAAM6P,aAAYlR,KAAAC,MAClB,IAAI0D,EAAW1D,KAAK0D,SAChBA,IAEHA,EAAS5C,MAAMH,SAASC,SAAW,EACnC8C,EAAShD,KAAKC,SAASC,SAAW,EAClC8C,EAAS7C,OAAOF,SAASC,SAAW,EACpC8C,EAASwN,SAASzD,UAAW,IAU/BhN,OAAA+B,eAAW0P,EAAA9Q,UAAA,iBAAX,WACC,OAASM,EAAG,EAAGI,EAAG,oCAYZoQ,EAAA9Q,UAAA4Z,YAAP,SAAmB5F,EAAiBvD,EAAeoJ,EAA0BC,GAC5E9F,EAAYpV,KAAKgX,cAAcmE,MAAM/F,GACrCvD,EAAU7R,KAAKgX,cAAcmE,MAAMtJ,GACnC7R,KAAKob,aAAahG,EAAU9D,UAAWO,EAAQP,UAAW2J,EAAgBC,IASjEhJ,EAAA9Q,UAAAia,KAAV,SAAeC,GACd,MAAgB,gBAATA,GAA2Bzb,EAAAuB,UAAMia,KAAItb,KAAAC,KAACsb,IAQvCpJ,EAAA9Q,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACfxb,KAAKqS,YAAcmJ,EAAOnJ,YAC1BrS,KAAKsS,wBAA0BkJ,EAAOlJ,wBAClCkJ,EAAsB,gBACzBxb,KAAK+T,aAAeyH,EAAOzH,eAWtB7B,EAAA9Q,UAAAqa,sBAAP,SAA6BxY,EAAkByY,GAA/C,IAAA5b,EAAAE,KAKC,GAHK0b,IACJzY,EAAWjD,KAAK2b,eAAe1Y,IAE5BjD,KAAK2S,YAAa,CACrB,IAGIiJ,EADAC,EAFa7I,EAAA,MAAYhT,KAAK2Y,eAAe1V,GAAWjD,KAAK+T,aAAavB,SAAU,GAE5DlB,UAG5BtR,KAAKsK,OAAOoC,KAAK,SAACpC,GAEjB,IAAI4B,EAAWpM,EAAK6K,kBAAkBL,EAAQrH,GAAU,GACxD,GAAIiJ,EAAU,CACb,IAAI0F,OAAI,EACJtH,EAAOC,OAASzK,IACnB8R,EAAO1F,EAAS4P,OAEbxR,EAAOE,OAAS1K,IACnB8R,EAAO1F,EAAS6P,OAGZH,EAIA3Z,KAAKyX,IAAIkC,EAAYtK,UAAYuK,GAAc5Z,KAAKyX,IAAI9H,EAAKN,UAAYuK,KAC5ED,EAAchK,GAJfgK,EAAchK,KAUbgK,IACHA,EAAc5I,EAAA,MAAY,IAAIiB,KAAK2H,EAAYtK,WAAYtR,KAAK+T,aAAavB,SAAUxS,KAAK+T,aAAatB,OACzGmJ,EAAc,IAAI3H,KAAK2H,EAAYtK,UAAYtR,KAAKuT,aAAe,GACnEtQ,EAAWjD,KAAKwY,eAAeoD,IAIjC/b,EAAAuB,UAAMqa,sBAAqB1b,KAAAC,KAACiD,GAAU,GAEtC,IAAI+Y,EAAiBhc,KAAKic,iBAAiBhZ,GAE3CjD,KAAKsK,OAAOoC,KAAK,SAACpC,GACbA,EAAOC,OAASzK,GACnBwK,EAAOmR,sBAAsBO,OAAgBtO,GAE1CpD,EAAOE,OAAS1K,GACnBwK,EAAOmR,2BAAsB/N,EAAWsO,MAY3Cvb,OAAA+B,eAAW0P,EAAA9Q,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK8C,iBAAiB,cAAeH,oCAUvCuP,EA3kDA,CAAqEF,EAAA,GAmlDrErJ,EAAA,EAAShD,kBAA4B,SAAIsM,EACzCtJ,EAAA,EAAShD,kBAAoC,iBAAI8L,0CC9vDjDyK,EAAA,SAAArc,GA4CC,SAAAsc,IAAA,IAAArc,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,mBAEjBL,EAAK6R,OAAOyK,QAAWrD,MAAO,GAC9BjZ,EAAK6R,OAAO0K,QAAWtD,MAAO,GAC9BjZ,EAAK6R,OAAO2K,cACZxc,EAAK6R,OAAO4K,cAEZzc,EAAK6R,OAAOmK,SACZhc,EAAK6R,OAAOoK,SACZjc,EAAK6R,OAAO6K,aACZ1c,EAAK6R,OAAO8K,aAEZ3c,EAAK4c,YAAY,QAAS,GAAK,GAC/B5c,EAAK4c,YAAY,QAAS,GAAK,GAE/B5c,EAAK4c,YAAY,YAAa,GAAK,GACnC5c,EAAK4c,YAAY,YAAa,GAAK,GAEnC5c,EAAKqB,eA8QP,OA/UsCgH,EAAA,EAAAgU,EAAAtc,GAyErCY,OAAA+B,eAAW2Z,EAAA/a,UAAA,cAOX,WACC,OAAOpB,KAAK2R,OAAOyK,OAAOzZ,WAR3B,SAAkBA,GACjB3C,KAAK2c,SAAS,SAAUha,oCAezBlC,OAAA+B,eAAW2Z,EAAA/a,UAAA,cAOX,WACC,OAAOpB,KAAK2R,OAAO0K,OAAO1Z,WAR3B,SAAkBA,GACjB3C,KAAK2c,SAAS,SAAUha,oCAezBlC,OAAA+B,eAAW2Z,EAAA/a,UAAA,aAOX,WACC,OAAOpB,KAAKmV,QAAQ,cARrB,SAAiBvD,GAChB5R,KAAK+R,QAAQ,QAASH,oCAevBnR,OAAA+B,eAAW2Z,EAAA/a,UAAA,aAOX,WACC,OAAOpB,KAAKmV,QAAQ,cARrB,SAAiBvD,GAChB5R,KAAK+R,QAAQ,QAASH,oCAevBnR,OAAA+B,eAAW2Z,EAAA/a,UAAA,iBAOX,WACC,OAAOpB,KAAKqQ,WAAWL,eARxB,SAAqBxH,GACpBxI,KAAK4c,YAAY,YAAapU,oCAe/B/H,OAAA+B,eAAW2Z,EAAA/a,UAAA,iBAOX,WACC,OAAOpB,KAAKqQ,WAAWJ,eARxB,SAAqBzH,GACpBxI,KAAK4c,YAAY,YAAapU,oCAe/B/H,OAAA+B,eAAW2Z,EAAA/a,UAAA,kBAOX,WACC,OAAOpB,KAAK2R,OAAO2K,WAAW3Z,WAR/B,SAAsBA,GACrB3C,KAAK2c,SAAS,aAAcha,oCAe7BlC,OAAA+B,eAAW2Z,EAAA/a,UAAA,kBAOX,WACC,OAAOpB,KAAK2R,OAAO4K,WAAW5Z,WAR/B,SAAsBA,GACrB3C,KAAK2c,SAAS,aAAcha,oCAe7BlC,OAAA+B,eAAW2Z,EAAA/a,UAAA,iBAOX,WACC,OAAOpB,KAAKmV,QAAQ,kBARrB,SAAqBvD,GACpB5R,KAAK+R,QAAQ,YAAaH,oCAe3BnR,OAAA+B,eAAW2Z,EAAA/a,UAAA,iBAOX,WACC,OAAOpB,KAAKmV,QAAQ,kBARrB,SAAqBvD,GACpB5R,KAAK+R,QAAQ,YAAaH,oCAe3BnR,OAAA+B,eAAW2Z,EAAA/a,UAAA,qBAOX,WACC,OAAOpB,KAAKqQ,WAAWwM,mBARxB,SAAyBrU,GACxBxI,KAAKqJ,YAAY,gBAAiBb,oCAenC/H,OAAA+B,eAAW2Z,EAAA/a,UAAA,qBAOX,WACC,OAAOpB,KAAKqQ,WAAWyM,mBARxB,SAAyBtU,GACxBxI,KAAKqJ,YAAY,gBAAiBb,oCAmB5B2T,EAAA/a,UAAA2b,OAAP,SAAcC,EAAkBC,EAAmBC,GAAnD,IAEKzR,EAFL3L,EAAAE,KAwBC,OApBKoN,EAAA,SAAe8P,KACnBA,EAAa,GAGdC,EAAA,KAAYH,EAAQ,SAAC1B,GACpB,IAAI3Y,EAGHA,EADGsa,EACKnd,EAAKsd,gBAAgB9B,GAGrBxb,EAAKkZ,SAASsC,KAGvB3Y,GAASua,GAEGzR,IAAQ2B,EAAA,SAAe3B,MAClCA,EAAM9I,KAGD8I,GAaD0Q,EAAA/a,UAAAic,OAAP,SAAcL,EAAkBC,EAAmBC,GAAnD,IAEKnO,EAFLjP,EAAAE,KAyBC,OArBKoN,EAAA,SAAe8P,KACnBA,EAAa,GAGdC,EAAA,KAAYH,EAAQ,SAAC1B,GACpB,IAAI3Y,EAGHA,EADGsa,EACKnd,EAAKsd,gBAAgB9B,GAGrBxb,EAAKkZ,SAASsC,KAGvB3Y,GAASua,GAEGnO,IAAQ3B,EAAA,SAAe2B,MAClCA,EAAMpM,KAIDoM,GAIToN,EA/UA,CAAsCmB,EAAA,GAkiBtCC,EAAA,SAAA1d,GAoKC,SAAA2d,IAAA,IAAA1d,EACCD,EAAAE,KAAAC,OAAOA,YA3HEF,EAAA2d,OAAS,IAAIC,EAAA,EAOb5d,EAAA6d,OAAS,IAAID,EAAA,EAuFb5d,EAAA8d,iBAQA9d,EAAA+d,iBAsBT/d,EAAKK,UAAY,WACjBL,EAAKM,YAAa,EAElBN,EAAKge,sBAAuB,EAE5Bhe,EAAKie,cAAc7P,KAAO,IAAI8P,EAAA,EAC9Ble,EAAKie,cAAc7P,KAAK+P,WAAWne,EAAK6H,MAAMlG,IAAI,SAElD3B,EAAKoe,SAAU,EACfpe,EAAK6S,aAAc,EAEnB7S,EAAKyB,QAAQ4c,mBAAqB,aAElCre,EAAKyB,QAAQ6c,OAAOC,GAAG,SAAU,WAChCve,EAAKwe,iCACH5Q,GAAW,GAEd5N,EAAKiK,WAAWC,KAAKlK,EAAK2d,QAC1B3d,EAAKiK,WAAWC,KAAKlK,EAAK6d,QAE1B7d,EAAKqB,eAutCP,OAj5C8BgH,EAAA,EAAAqV,EAAA3d,GAiMnB2d,EAAApc,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MACtBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,gBAUnCoK,EAAApc,UAAAyI,eAAV,WACC,OAAO,IAAIqS,GAMLsB,EAAApc,UAAAod,iBAAP,WACCxe,KAAKye,MAAMhJ,QACXzV,KAAK0e,MAAMjJ,QAEXzV,KAAK2e,MAAMlJ,QACXzV,KAAK4e,MAAMnJ,QAGPzV,KAAKuK,OACRvK,KAAKuK,MAAMuK,uBAAuB9U,MAG/BA,KAAKwK,OACRxK,KAAKwK,MAAMsK,uBAAuB9U,OAS7Bwd,EAAApc,UAAAqT,aAAP,WAWC,GAVAzU,KAAK6e,eAED7e,KAAK8e,KAAKva,OAAS,GACtBvE,KAAKwe,mBAGN3e,EAAAuB,UAAMqT,aAAY1U,KAAAC,MAElBA,KAAK+e,wBAEA3R,EAAA,SAAepN,KAAKgf,WAAsChf,KAAKif,YAAc7R,EAAA,SAAepN,KAAKgf,WAAsChf,KAAKkf,UAChJ,MAAMC,MAAM,4BAA+Bnf,KAAKof,KAAOpf,KAAKof,KAAOpf,KAAK6U,KAAO,gCAWvE2I,EAAApc,UAAA+M,gBAAV,SAA0BjC,EAA6BkC,GACtD,IACCvO,EAAAuB,UAAM+M,gBAAepO,KAAAC,KAACkM,EAAUkC,GAEhClC,EAASkS,OAAOiB,UAChBrf,KAAKuK,MAAM4O,sBAAsBjN,EAAU,KAC3ClM,KAAKwK,MAAM2O,sBAAsBjN,EAAU,KAE3CA,EAASkS,OAAOkB,SAEhBtf,KAAKuf,wBAAwBrT,GAE9B,MAAOsT,GACNxf,KAAKyf,OAAOC,mBAAmBF,KAWvBhC,EAAApc,UAAAme,wBAAV,SAAkCrT,KAO3BsR,EAAApc,UAAAue,YAAP,WAEC,GADA9f,EAAAuB,UAAMue,YAAW5f,KAAAC,MACbA,KAAKuK,MAAO,CACf,IAAIqV,EAAa5f,KAAKsV,gBAAgBhH,OAAOtO,KAAKuK,MAAMsK,KACpD+K,GACHA,EAAWnK,QAGb,GAAIzV,KAAKwK,MAAO,CACf,IAAIqV,EAAa7f,KAAKsV,gBAAgBhH,OAAOtO,KAAKwK,MAAMqK,KACpDgL,GACHA,EAAWpK,UAUJ+H,EAAApc,UAAAyd,aAAV,WACC,IAAItU,EAAcvK,KAAKuK,MACnBC,EAAcxK,KAAKwK,MAEnBsV,EAAyBvV,EAAMZ,cAC/BoW,EAA8ED,EAAiB,IAC/FE,EAAkF,OAASC,EAAA,WAAkBH,GAAkB,IAE/HI,EAAyB1V,EAAMb,cAC/BwW,EAA8ED,EAAiB,IAC/FE,EAAkF,OAASH,EAAA,WAAkBC,GAAkB,IAEnIlgB,KAAKif,QAAUc,EACf/f,KAAKkf,QAAUiB,EAEXngB,KAAKgf,WAAWgB,KACnBhgB,KAAKqgB,YAAcL,GAGhBhgB,KAAKgf,WAAWoB,KACnBpgB,KAAKsgB,YAAcF,GAGfpgB,KAAKgf,WAAWoB,IAAepgB,KAAKqU,UAAYrU,KAAKwK,QACzDxK,KAAKsgB,YAAcH,GAGfngB,KAAKgf,WAAWgB,IAAehgB,KAAKqU,UAAYrU,KAAKuK,QACzDvK,KAAKqgB,YAAcN,GAGhB/f,KAAKke,SAAWle,KAAKqU,UAAYrU,KAAKuK,QACzCvK,KAAKqgB,YAAcN,GAGhB/f,KAAKke,SAAWle,KAAKqU,UAAYrU,KAAKwK,QACzCxK,KAAKsgB,YAAcH,GAGfngB,KAAKuK,iBAAiBhB,GAAkBvJ,KAAKwK,iBAAiBjB,IAC7DvJ,KAAKsgB,cACTtgB,KAAKsgB,YAAcH,IAIrBngB,KAAK4d,iBACL5d,KAAK6d,iBAEL7d,KAAKugB,cAAcvgB,KAAKuK,MAAYvK,KAAK4d,cAAoB5d,KAAKif,SAClEjf,KAAKugB,cAAcvgB,KAAKuK,MAAYvK,KAAK4d,cAAoB5d,KAAKqgB,aAElErgB,KAAKugB,cAAcvgB,KAAKwK,MAAYxK,KAAK6d,cAAoB7d,KAAKkf,SAClElf,KAAKugB,cAAcvgB,KAAKwK,MAAYxK,KAAK6d,cAAoB7d,KAAKsgB,cAWzD9C,EAAApc,UAAAmf,cAAV,SAA+Djf,EAAY0b,EAAoB1B,GAC1Fha,aAAgB0Q,EAAA,GACf5E,EAAA,SAAepN,KAAKgf,WAAW1D,MAAqC,GAA1B0B,EAAOwD,QAAQlF,IAC5D0B,EAAOhT,KAAKsR,IAcLkC,EAAApc,UAAAqf,qBAAV,SAAsEnF,EAAYha,GAC5E8L,EAAA,SAAepN,KAAKgf,WAAW1D,MACnCtb,KAAKgf,WAAW1D,GAAcha,EAAK0d,WAAWxW,WAatCgV,EAAApc,UAAAsf,iBAAV,SAAkEpF,EAAYha,GACxE8L,EAAA,SAAepN,KAAKgf,WAAW1D,MACnCtb,KAAKgf,WAAW1D,GAAcha,EAAK0d,WAAWpN,OAOtC4L,EAAApc,UAAAuf,UAAV,WACC9gB,EAAAuB,UAAMuf,UAAS5gB,KAAAC,MACfA,KAAK4gB,cAQCpD,EAAApc,UAAAwf,WAAP,WAEC,GAAI5gB,KAAK+d,cAAc7P,KAAM,CAC5B,IAAI2S,EAAe7gB,KAAK8gB,cAGxB3W,EAAA,KAAWnK,KAAK+gB,WAAW1W,WAAY,SAAC2W,GACnCA,EAAMjT,SAASjG,WAClBkZ,EAAMjT,SAAS1L,WACfwe,GAAQG,EAAMjT,SAASjG,YAIzB9H,KAAK+d,cAAc7P,KAAKrK,KAAOgd,IASvBrD,EAAApc,UAAA0f,YAAV,WACC,OAAOG,EAAA,YACNvf,EAAG,EACHI,EAAG,EACHkF,MAAOhH,KAAKuK,MAAMlH,WAClB6D,OAAQlH,KAAKwK,MAAMnH,cAUdma,EAAApc,UAAAmT,aAAP,SAAoBjT,GACnB,OAAIA,GAAQtB,KAAKuK,MACTvK,KAAK+f,OAETze,GAAQtB,KAAKwK,MACTxK,KAAKmgB,YADb,GAUM3C,EAAApc,UAAAiS,kBAAP,WAGCrT,KAAKuK,MAAMqP,qBACX5Z,KAAKwK,MAAMoP,qBAEX/Z,EAAAuB,UAAMiS,kBAAiBtT,KAAAC,MAEvBA,KAAKuK,MAAMwK,6BACX/U,KAAKwK,MAAMuK,8BAQLyI,EAAApc,UAAA8I,kBAAP,WACKlK,KAAKuK,MAAM2W,kBACdlhB,KAAKuK,MAAML,oBAGRlK,KAAKwK,MAAM0W,kBACdlhB,KAAKwK,MAAMN,oBAGZrK,EAAAuB,UAAM8I,kBAAiBnK,KAAAC,OAQjBwd,EAAApc,UAAAiB,SAAP,WACKrC,KAAKuK,MAAMhI,SACdvC,KAAKuK,MAAMlI,WAGRrC,KAAKwK,MAAMjI,SACdvC,KAAKwK,MAAMnI,WAGZrC,KAAKmhB,cAAe,EACpB,IAAIC,EAA4BphB,KAAKohB,kBACjChU,EAAA,SAAegU,IACdphB,KAAKqU,SAAShR,YAAcrD,KAAK+K,SAAW/K,KAAK6K,YAAcuW,IAClEphB,KAAKmhB,cAAe,GAItBthB,EAAAuB,UAAMiB,SAAQtC,KAAAC,OAQfS,OAAA+B,eAAWgb,EAAApc,UAAA,aAqBX,WACC,GAAIpB,KAAKsC,MAAO,CACf,IAAKtC,KAAKyd,OAAO4D,MAAO,CACvB,IAAM/f,EAAOtB,KAAKsC,MAAMgf,MAAMnV,SAAS,GAEvC,IAAK7K,EACJ,MAAM6d,MAAM,iCAGbnf,KAAKuK,MAAQjJ,EAEd,OAAOtB,KAAKyd,OAAO4D,YAhCrB,SAAiB/f,GAChB,IAAIigB,EAAUvhB,KAAKyd,OAAO4D,MACtBE,GAAWjgB,IACVigB,IACHvhB,KAAKsV,gBAAgBkM,UAAUD,EAAQ1M,KAEvC7U,KAAKyd,OAAOgE,UAEZF,EAAQjX,OAAOoX,YAAY1hB,OAG5BA,KAAKyd,OAAOkE,IAAIrgB,EAAMA,EAAKsgB,eAAe5hB,OAE1CA,KAAKsV,gBAAgB9G,OAAOlN,EAAKuT,IAAK,IAAInL,EAAA,GAC1C1J,KAAK+Z,mDA2BPtZ,OAAA+B,eAAWgb,EAAApc,UAAA,aAqBX,WACC,GAAIpB,KAAKsC,MAAO,CACf,IAAKtC,KAAK2d,OAAO0D,MAAO,CACvB,IAAM/f,EAAOtB,KAAKsC,MAAMuf,MAAM1V,SAAS,GAEvC,IAAK7K,EACJ,MAAM6d,MAAM,iCAGbnf,KAAKwK,MAAQlJ,EAGd,OAAOtB,KAAK2d,OAAO0D,YAjCrB,SAAiB/f,GAChB,IAAIigB,EAAUvhB,KAAK2d,OAAO0D,MACtBE,GAAWjgB,IACVigB,IACHvhB,KAAKsV,gBAAgBkM,UAAUD,EAAQ1M,KAEvC7U,KAAK2d,OAAO8D,UAEZF,EAAQjX,OAAOoX,YAAY1hB,OAG5BA,KAAK2d,OAAOgE,IAAIrgB,EAAMA,EAAKsgB,eAAe5hB,OAE1CA,KAAKsV,gBAAgB9G,OAAOlN,EAAKuT,IAAK,IAAInL,EAAA,GAC1C1J,KAAK+Z,mDA+BPtZ,OAAA+B,eAAWgb,EAAApc,UAAA,gBAUX,WAsBC,OArBKpB,KAAK8hB,YACL9hB,KAAKwK,iBAAiByH,IACzBjS,KAAK8hB,UAAY9hB,KAAKwK,OAGnBxK,KAAKuK,iBAAiB0H,IACzBjS,KAAK8hB,UAAY9hB,KAAKuK,OAGnBvK,KAAKwK,iBAAiBjB,IACzBvJ,KAAK8hB,UAAY9hB,KAAKwK,OAGnBxK,KAAKuK,iBAAiBhB,IACzBvJ,KAAK8hB,UAAY9hB,KAAKuK,OAGlBvK,KAAK8hB,YACT9hB,KAAK8hB,UAAY9hB,KAAKuK,QAGjBvK,KAAK8hB,eAhCb,SAAoBnf,GACf3C,KAAK8hB,WAAanf,IACrB3C,KAAK8hB,UAAYnf,EACjB3C,KAAK6C,+CAsCA2a,EAAApc,UAAA2gB,cAAP,SAAqB9E,GAEpBpd,EAAAuB,UAAM2gB,cAAahiB,KAAAC,KAACid,GAapB,IAXA,IAAI/R,EAAYlL,KAAKkL,UAEjB8W,EAAOC,IACPC,GAASD,IAETE,EAAOF,IACPG,GAASH,IAETpX,EAAa7K,KAAK6K,WAClBE,EAAW/K,KAAK+K,SAEXkB,EAAIpB,EAAYoB,EAAIlB,EAAUkB,IAAK,CAC3C,IAAIC,EAAWhB,EAAUiB,SAASF,GAElCjM,KAAKqiB,cAAcnW,EAAU+Q,GAE7B,IAAIqF,EAASpW,EAAS8M,SAAS,SAAU,SACrCuJ,EAASrW,EAAS8M,SAAS,SAAU,SAEzCgJ,EAAO7W,EAAA,IAAUe,EAAS6Q,OAAO/c,KAAK4d,cAAeX,EAASqF,GAASN,GACvEG,EAAOhX,EAAA,IAAUe,EAAS6Q,OAAO/c,KAAK6d,cAAeZ,EAASsF,GAASJ,GAEvED,EAAO/W,EAAA,IAAUe,EAASmR,OAAOrd,KAAK4d,cAAeX,EAASqF,GAASJ,GACvEE,EAAOjX,EAAA,IAAUe,EAASmR,OAAOrd,KAAK6d,cAAeZ,EAASsF,GAASH,GAGnEpiB,KAAKke,UACJle,KAAKqU,UAAYrU,KAAKuK,QACzB4X,EAAOhX,EAAA,IAAUgX,EAAMI,IAEpBviB,KAAKqU,UAAYrU,KAAKwK,QACzBwX,EAAO7W,EAAA,IAAU6W,EAAMM,KAM1BtiB,KAAKuK,MAAMiY,yBACXxiB,KAAKwK,MAAMgY,yBAEX,IAAIC,EAAkBziB,KAAKuK,MAAMsK,IAC7B6N,EAAkB1iB,KAAKwK,MAAMqK,IAE5BoI,GACAjd,KAAKye,MAAMnQ,OAAOmU,IAAYT,GAAQhiB,KAAK0e,MAAMpQ,OAAOmU,IAAYP,GAAQliB,KAAKye,MAAMnQ,OAAOoU,IAAYP,GAAQniB,KAAK0e,MAAMpQ,OAAOoU,IAAYN,IACnJpiB,KAAKye,MAAMjQ,OAAOiU,EAAST,GAC3BhiB,KAAK0e,MAAMlQ,OAAOiU,EAASP,GAC3BliB,KAAKye,MAAMjQ,OAAOkU,EAASP,GAC3BniB,KAAK0e,MAAMlQ,OAAOkU,EAASN,GAEvBpiB,KAAK2iB,eACR3iB,KAAK2iB,cAAcZ,eAAc,GAGlC/hB,KAAK4iB,oBAAoB,oBAIvB5iB,KAAK2e,MAAMrQ,OAAOmU,IAAYT,GAAQhiB,KAAK4e,MAAMtQ,OAAOmU,IAAYP,GAAQliB,KAAK2e,MAAMrQ,OAAOoU,IAAYP,GAAQniB,KAAK4e,MAAMtQ,OAAOoU,IAAYN,IACnJpiB,KAAK2e,MAAMnQ,OAAOiU,EAAST,GAC3BhiB,KAAK4e,MAAMpQ,OAAOiU,EAASP,GAC3BliB,KAAK2e,MAAMnQ,OAAOkU,EAASP,GAC3BniB,KAAK4e,MAAMpQ,OAAOkU,EAASN,GAEvBpiB,KAAK6iB,UACR7iB,KAAK4iB,oBAAoB,8BAUrBpF,EAAApc,UAAA0hB,YAAP,WACCjjB,EAAAuB,UAAM0hB,YAAW/iB,KAAAC,MACjBA,KAAKse,2BACLte,KAAK+iB,0BAAuBrV,GAWtB8P,EAAApc,UAAAqa,sBAAP,SAA6BuH,EAAmBC,GAC/C,GAAIjjB,KAAK8d,qBAAsB,CAC9B,IAAI5R,OAAQ,EAEZ,GAAIlM,KAAKkjB,UAAYljB,KAAKmjB,WAAanjB,KAAKojB,UAAW,CAEtD,IAAI7Y,EAAcvK,KAAKyd,OAAO4D,MAC1B7W,EAAcxK,KAAK2d,OAAO0D,MAW9B,GATI9W,GAASvK,KAAKqU,WACjBnI,EAA8B3B,EAAMI,kBAAkB3K,KAAMuK,EAAMoR,eAAeqH,GAAYhjB,KAAK2S,cAE/FnI,GAASxK,KAAKqU,WACjBnI,EAA8B1B,EAAMG,kBAAkB3K,KAAMwK,EAAMmR,eAAesH,GAAYjjB,KAAK2S,cAGnG3S,KAAKse,yBAAyBpS,GAE1BA,GAAYA,EAASgX,QAAS,CACjCljB,KAAKqjB,kBAAkBnX,GACvBlM,KAAKsjB,gBAAkBpX,EAGvB,IAAIqX,EAAgBvjB,KAAKujB,cACrBC,EAAgBxjB,KAAKwjB,cAEzB,GAAIpW,EAAA,SAAqBlB,EAAUqX,KAAmBnW,EAAA,SAAqBlB,EAAUsX,IAAiB,CAErG,IAAIC,EAAezjB,KAAK0jB,SAASxX,EAAUqX,EAAeC,EAAetX,EAASlD,UAAUua,GAAgBrX,EAASlD,UAAUwa,IAE/H,GAAIC,EAAc,CAEjBzjB,KAAK2jB,SAAWF,EAAa/hB,EAC7B1B,KAAK4jB,SAAWH,EAAa3hB,EAEzB9B,KAAK+iB,sBAAwB7W,IAChClM,KAAK4iB,oBAAoB,kBACxBiB,KAAM,iBACNliB,OAAQ3B,KACRkM,SAAUA,IAGXlM,KAAK+iB,qBAAuB7W,OAG7B,IAAc,IAAA4X,EAAA3b,EAAA,EAAA+D,EAAS6X,SAAOC,EAAAF,EAAAG,QAAAD,EAAAE,KAAAF,EAAAF,EAAAG,OAAA,CAApBD,EAAArhB,MACM,GACRwhB,SAAU,oGAGlB,OAAInkB,KAAKokB,cACDnE,EAAA,kBAA0Bve,EAAG+hB,EAAa/hB,EAAGI,EAAG2hB,EAAa3hB,GAAK9B,WAE1E,IAKH,IAAKA,KAAKqkB,YACT,OAIFrkB,KAAK8iB,uBASGtF,EAAApc,UAAAkd,yBAAV,SAAmCpS,GAClC,GAAIlM,KAAK+iB,sBAAwB/iB,KAAK+iB,sBAAwB7W,MAC7D,IAAc,IAAA4X,EAAA3b,EAAA,EAAAnI,KAAK+iB,qBAAqBgB,SAAOC,EAAAF,EAAAG,QAAAD,EAAAE,KAAAF,EAAAF,EAAAG,OAAA,CAA1C,IACAK,EADKN,EAAArhB,MACM,GACV2hB,EAAOC,aAIXvkB,KAAK+iB,0BAAuBrV,EAH5B4W,EAAOH,SAAU,6GAed3G,EAAApc,UAAAojB,eAAP,SAAsBF,GACrBzkB,EAAAuB,UAAMojB,eAAczkB,KAAAC,KAACskB,GAErB,IAAIpY,EAA+CoY,EAAOpY,SAGtD6T,EAAiBuE,EAAOvE,OACvB3S,EAAA,SAAe2S,KACnBA,EAAS/f,KAAK+f,QAGf,IAAII,EAAiBmE,EAAOnE,OAK5B,GAJK/S,EAAA,SAAe+S,KACnBA,EAASngB,KAAKmgB,QAGVngB,KAAKuK,iBAAiByH,EAAA,IAAc9F,EAASuY,UAAU1E,KAAc/f,KAAKwK,iBAAiBwH,EAAA,IAAc9F,EAASuY,UAAUtE,IAChImE,EAAOpB,SAAU,MAEb,CACJ,IAAIwB,EAA0B1kB,KAAK2kB,mBAAmBL,EAAQvE,GAC1D6E,EAA0B5kB,KAAK6kB,mBAAmBP,EAAQnE,GAE1Dve,EAAQ5B,KAAK0jB,SAASxX,EAAU6T,EAAQI,EAAQuE,EAAiBE,GACrE,GAAIhjB,EAAO,CACV,IAAIF,EAAYE,EAAMF,EAClBI,EAAYF,EAAME,EAEtB,GAAIsL,EAAA,SAAekX,EAAOQ,YAAc9kB,KAAKggB,YAAchgB,KAAK+f,OAE/Dre,IAASA,EADW1B,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAKggB,aAC7BsE,EAAOQ,UAI9B,GAAI1X,EAAA,SAAekX,EAAOS,YAAc/kB,KAAKogB,YAAcpgB,KAAKmgB,OAE/Dre,IAASA,EADW9B,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAKogB,aAC7BkE,EAAOS,UAG9BT,EAAOU,QAAStjB,EAAGA,EAAGI,EAAGA,SAGzBwiB,EAAOpB,SAAU,IASV1F,EAAApc,UAAAujB,mBAAV,SAA6BL,EAAgBhJ,GAC5C,IAAI2J,EAAyBX,EAAOQ,UAChC5Y,EAAWoY,EAAOpY,SAItB,OAHKkB,EAAA,SAAe6X,KACnBA,EAAiB/Y,EAAS+M,iBAAiBqC,IAErC2J,GAQEzH,EAAApc,UAAAyjB,mBAAV,SAA6BP,EAAgBhJ,GAC5C,IAAI2J,EAAyBX,EAAOS,UAChC7Y,EAAWoY,EAAOpY,SAItB,OAHKkB,EAAA,SAAe6X,KACnBA,EAAiB/Y,EAAS+M,iBAAiBqC,IAErC2J,GASRxkB,OAAA+B,eAAWgb,EAAApc,UAAA,eAOX,WACC,OAAOpB,KAAK0C,iBAAiB,gBAR9B,SAAmBwb,GAClBle,KAAK8C,iBAAiB,UAAWob,GAAS,oCAiB3Czd,OAAA+B,eAAWgb,EAAApc,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK8C,iBAAiB,cAAeH,oCAiB/B6a,EAAApc,UAAA8jB,KAAP,SAAY/M,GAAZ,IAEK6E,EAFLld,EAAAE,KAGKA,KAAKuK,iBAAiByH,EAAA,GAAahS,KAAKuK,OAASvK,KAAKqU,WACzD2I,EAAShd,KAAK4d,eAGX5d,KAAKwK,iBAAiBwH,EAAA,GAAahS,KAAKwK,OAASxK,KAAKqU,WACzD2I,EAAShd,KAAK6d,eAGf,IASIsH,EATAta,EAAqB7K,KAAK6K,WAC1BE,EAAmB/K,KAAK+K,SACxBqa,EAAgB,EAEhBC,EAAwBrlB,KAAKslB,aAAaC,mBAC1CnY,EAAA,SAAe+K,KAClBkN,EAAwBlN,GAIzBhO,EAAA,KAAWA,EAAA,QAAcnK,KAAKkL,UAAUb,YAAa,SAACmb,GACrD,IAAIvZ,EAAIuZ,EAAE,GACNtZ,EAAWsZ,EAAE,GAEb1lB,EAAK2lB,wBAA0BJ,EAAwB,IAC1DD,EAAQtlB,EAAK4lB,4BAA8BzZ,EAAIoZ,GAAyBpZ,EAAIpB,IAAeE,EAAWF,IAEvGsa,EAAOjZ,EAASgZ,KAAKG,EAAuBD,EAAOpI,KAGpD,IAAI2I,EAAY9lB,EAAAuB,UAAM8jB,KAAInlB,KAAAC,KAACmY,GAM3B,OAJIgN,IAASA,EAAKS,eACjBD,EAAYR,GAGNQ,GASDnI,EAAApc,UAAAykB,KAAP,SAAY1N,GAAZ,IAEK6E,EACAra,EAHL7C,EAAAE,KAIKuK,EAAcvK,KAAKuK,MAEnBA,aAAiByH,EAAA,GAAazH,GAASvK,KAAKqU,WAC/C2I,EAAShd,KAAK4d,cAGbjb,EADG3C,KAAKke,SAAY3T,EAAMmQ,UAAY,GAAKnQ,EAAMuQ,UAAY,GAAM9a,KAAK2iB,cAChE,EAGApY,EAAMkB,KAIhB,IAAIjB,EAAcxK,KAAKwK,MACnBA,aAAiBwH,EAAA,GAAaxH,GAASxK,KAAKqU,WAC/C2I,EAAShd,KAAK6d,cAGblb,EADG3C,KAAKke,SAAY1T,EAAMkQ,UAAY,GAAKlQ,EAAMsQ,UAAY,GAAM9a,KAAK2iB,cAChE,EAGAnY,EAAMiB,KAKhB,IAAIZ,EAAqB7K,KAAK6K,WAC1BE,EAAmB/K,KAAK+K,SAExBsa,EAAwBrlB,KAAK8lB,YAAYP,mBACzCnY,EAAA,SAAe+K,KAClBkN,EAAwBlN,GAGzB,IACIgN,EADAC,EAAgB,EAGpBjb,EAAA,KAAWA,EAAA,QAAcnK,KAAKkL,UAAUb,YAAa,SAACmb,GACrD,IAAIvZ,EAAIuZ,EAAE,GACNtZ,EAAWsZ,EAAE,GAEY,GAAzBH,EACHnZ,EAAS2Z,KAAK,EAAG,EAAGljB,EAAOqa,IAGvBld,EAAK2lB,wBAA0BJ,EAAwB,IAC1DD,EAAQtlB,EAAK4lB,4BAA8BzZ,EAAIoZ,GAAyBpZ,EAAIpB,IAAeE,EAAWF,IAEvGsa,EAAOjZ,EAAS2Z,KAAKR,EAAuBD,EAAOziB,EAAOqa,MAI5D,IAAI2I,EAAY9lB,EAAAuB,UAAMykB,KAAI9lB,KAAAC,KAACqlB,GAY3B,OAXIM,IAAcA,EAAUC,cAC3BD,EAAUP,MAAMA,GAGbD,IAASA,EAAKS,eACjBD,EAAYR,GAIbnlB,KAAK+lB,uBAEEJ,GAQDnI,EAAApc,UAAA4kB,iCAAP,SAAwC9Z,EAA8BkT,GACrEvf,EAAAuB,UAAM4kB,iCAAgCjmB,KAAAC,KAACkM,EAAUkT,GAGjD,IAAI6G,EAA6CjmB,KAAKqU,SAAS/J,OAE/DH,EAAA,KAAW8b,EAAW5b,WAAY,SAACC,GAC9BA,EAAO4T,SACV5T,EAAO4b,6BAYH1I,EAAApc,UAAAihB,cAAP,SAAqBnW,EAA6B+Q,GAAlD,IAAAnd,EAAAE,KAIC,GAAKA,KAAKke,QAAV,CAKC,IAGI5J,EAHAhS,EAAiBtC,KAAKsC,MACtBwI,EAAgBxI,EAAMgI,OAAOkW,QAAQxgB,MAIrCA,KAAKuK,OAASvK,KAAKqU,UAAYrU,KAAKuK,iBAAiByH,EAAA,IACxDsC,EAAQtU,KAAK+f,QAEV/f,KAAKwK,OAASxK,KAAKqU,UAAYrU,KAAKwK,iBAAiBwH,EAAA,IACxDsC,EAAQtU,KAAKmgB,QAIdjU,EAASmJ,mBAAmBf,EAAO,EAAG,SAEtCnK,EAAA,aAAmB7H,EAAMgI,OAAO0W,MAAM,EAAGlW,GAAOqb,YAAY9b,WAAY,SAAC+b,GAExE,GAAIA,EAAW7b,OAASzK,EAAKyK,OAAS6b,EAAW5b,OAAS1K,EAAK0K,MAAO,CAErE4b,EAAWzD,cAAgB7iB,EAE3B,IAAIumB,EAAeD,EAAWlb,UAAUiB,SAASD,EAASpB,OAE1D,GAAIub,GAAgBA,EAAa5B,SAAS3kB,EAAK8d,gBAAkByI,EAAa5B,SAAS3kB,EAAK+d,eAAgB,CAE3G,IAAIlb,EAAQuJ,EAAS8M,SAAS1E,GAC1BgS,OAAS,EASb,GANCA,EADGrJ,EACSoJ,EAAajJ,gBAAgB9I,GAAS+R,EAAarN,SAAS1E,EAAO,SAGnE+R,EAAarN,SAAS1E,GAAS+R,EAAarN,SAAS1E,EAAO,SAGpE3R,GAAS,GAAK2jB,GAAa,GAAO3jB,EAAQ,GAAK2jB,EAAY,EAI/D,OAFApa,EAASmJ,mBAAmBf,EAAOgS,EAAW,UAEvC,OAGJ,IAAKF,EAAWlI,QACpB,OAAO,EAIT,OAAO,MAYVzd,OAAA+B,eAAWgb,EAAApc,UAAA,cAAX,WACC,OAAOpB,KAAKif,yCAUbxe,OAAA+B,eAAWgb,EAAApc,UAAA,cAAX,WACC,OAAOpB,KAAKkf,yCAUbze,OAAA+B,eAAWgb,EAAApc,UAAA,kBAAX,WACC,OAAOpB,KAAKqgB,6CAUb5f,OAAA+B,eAAWgb,EAAApc,UAAA,kBAAX,WACC,OAAOpB,KAAKsgB,6CAUb7f,OAAA+B,eAAWgb,EAAApc,UAAA,qBASX,WACC,OAAIpB,KAAKumB,eACDvmB,KAAKumB,eAENvmB,KAAKif,aAbb,SAAyBtc,GACxB3C,KAAKumB,eAAiB5jB,mCAsBvBlC,OAAA+B,eAAWgb,EAAApc,UAAA,qBASX,WACC,OAAIpB,KAAKwmB,eACDxmB,KAAKwmB,eAENxmB,KAAKkf,aAbb,SAAyBvc,GACxB3C,KAAKwmB,eAAiB7jB,mCAsBhB6a,EAAApc,UAAAqK,IAAP,SAAWnK,GACV,OAAOtB,KAAKye,MAAMnQ,OAAOhN,EAAKuT,MAUxB2I,EAAApc,UAAA2N,IAAP,SAAWzN,GACV,OAAOtB,KAAK0e,MAAMpQ,OAAOhN,EAAKuT,MAWxB2I,EAAApc,UAAAqlB,aAAP,SAAoBnlB,GACnB,IAAIqB,EAAQ3C,KAAK2e,MAAMrQ,OAAOhN,EAAKuT,KAInC,OAHKzH,EAAA,SAAezK,KACnBA,EAAQ3C,KAAKyL,IAAInK,IAEXqB,GAWD6a,EAAApc,UAAAslB,aAAP,SAAoBplB,GACnB,IAAIqB,EAAQ3C,KAAK4e,MAAMtQ,OAAOhN,EAAKuT,KAInC,OAHKzH,EAAA,SAAezK,KACnBA,EAAQ3C,KAAK+O,IAAIzN,IAEXqB,GASD6a,EAAApc,UAAAulB,cAAP,SAAqBC,GAEpB,GAAIA,EAAQ,CAuBX,GApBIxZ,EAAA,SAAewZ,EAAOrc,QAAU6C,EAAA,SAAewZ,EAAOrc,SACrDvK,KAAK6mB,IAAI3T,OAAO0T,EAAOrc,OAC1Bqc,EAAOrc,MAAQvK,KAAK6mB,IAAIvY,OAAOsY,EAAOrc,QAGtCvK,KAAK8mB,iBAAiB9c,KAAK,eAAiBhK,KAAKof,MAAQ,WAAa,uBAA0BwH,EAAOrc,MAAO,+BACvGqc,EAAOrc,QAGZ6C,EAAA,SAAewZ,EAAOpc,QAAU4C,EAAA,SAAewZ,EAAOpc,SACrDxK,KAAK6mB,IAAI3T,OAAO0T,EAAOpc,OAC1Boc,EAAOpc,MAAQxK,KAAK6mB,IAAIvY,OAAOsY,EAAOpc,QAGtCxK,KAAK8mB,iBAAiB9c,KAAK,eAAiBhK,KAAKof,MAAQ,WAAa,uBAA0BwH,EAAOpc,MAAO,+BACvGoc,EAAOpc,QAKZ4C,EAAA,SAAewZ,EAAO7F,aAAe3T,EAAA,QAAcwZ,EAAO7F,YAC7D,IAAK,IAAI9U,EAAI,EAAGI,EAAMua,EAAO7F,WAAWxc,OAAQ0H,EAAII,EAAKJ,IAAK,CAC7D,IAAI+U,EAAQ4F,EAAO7F,WAAW9U,GACzBmB,EAAA,SAAe4T,EAAM6C,QACzB7C,EAAM6C,KAAO,gBAEVzW,EAAA,SAAe4T,EAAM1f,OAAS8L,EAAA,SAAe4T,EAAM1f,OAAStB,KAAK6mB,IAAI3T,OAAO8N,EAAM1f,MACrF0f,EAAMlX,UAAY9J,KAAK6mB,IAAIvY,OAAO0S,EAAM1f,MAEhC8L,EAAA,SAAe4T,EAAMlX,YAAcsD,EAAA,SAAe4T,EAAMlX,YAAc9J,KAAK6mB,IAAI3T,OAAO8N,EAAMlX,aACpGkX,EAAMlX,UAAY9J,KAAK6mB,IAAIvY,OAAO0S,EAAMlX,YAMtCsD,EAAA,SAAewZ,EAAO5H,aAAgB5R,EAAA,SAAewZ,EAAO5H,aAChEhf,KAAK8mB,iBAAiB9c,KAAK,wCAA0ChK,KAAKof,MAAQ,WAAa,KAKjGvf,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,IAgBXpJ,EAAApc,UAAAsiB,SAAV,SAAmBxX,EAA4B6a,EAAcC,EAAclC,EAAoBC,EAAoBkC,EAAoBC,GACtI,IAAIxlB,EAAY1B,KAAKuK,MAAM4F,KAAKjE,EAAU6a,EAAMjC,GAC5ChjB,EAAY9B,KAAKwK,MAAM+F,KAAKrE,EAAU8a,EAAMjC,GAKhD,OAASrjB,EAHTA,EAAIyJ,EAAA,WAAiBzJ,GAAI,IAAO,KAGjBI,EAFfA,EAAIqJ,EAAA,WAAiBrJ,GAAI,IAAO,OASvB0b,EAAApc,UAAA2d,qBAAV,WACC,IAAIhW,EAAO,GACXmM,EAAA,KAAalV,KAAKgf,WAAY,SAAC5O,EAAK+W,GACnCpe,GAAQ,IAAMqH,EAAM,OAErBpQ,KAAKonB,eAAiBre,GAiBvBtI,OAAA+B,eAAWgb,EAAApc,UAAA,4BAOX,WACC,OAAOpB,KAAK0C,iBAAiB,6BAR9B,SAAgCC,GAC/B3C,KAAK8C,iBAAiB,uBAAwBH,oCAUhD6a,EAj5CA,CAA8BF,EAAA,GAy5C9B3U,EAAA,EAAShD,kBAA4B,SAAI4X,EACzC5U,EAAA,EAAShD,kBAAoC,iBAAIuW,0CCz3DjDmL,EAAA,SAAAxnB,GAkGC,SAAAynB,IAAA,IAAAxnB,EAGCD,EAAAE,KAAAC,OAAOA,KA1DDF,EAAA8B,OAAkBF,EAAG,EAAGI,EAAG,GA2CxBhC,EAAAynB,OAAmC,OAgB5CznB,EAAKK,UAAY,SAGjBL,EAAKkH,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACrBX,EAAKoH,OAASzG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACtBX,EAAK2nB,aAAc,EAEnB3nB,EAAK+lB,KAAK,GAEV/lB,EAAK4nB,WAAY,EACjB5nB,EAAK6nB,WAAY,EAEjB7nB,EAAKM,YAAa,EAIlB,IAAMwnB,EAAcnnB,OAAAonB,EAAA,EAAApnB,UACpBX,EAAKiK,WAAWC,KAAK4d,EAAYE,KAAK1J,OAAOC,GAAG,OAAQve,EAAKioB,iBAAkBjoB,IAC/EA,EAAKiK,WAAWC,KAAK4d,EAAYE,KAAK1J,OAAOC,GAAG,KAAMve,EAAKkoB,eAAgBloB,IAC3EA,EAAKiK,WAAWC,KAAK4d,EAAYE,KAAK1J,OAAOC,GAAG,QAASve,EAAKmoB,iBAAkBnoB,IAGhFA,EAAKqB,eAiRP,OA7Y4BgH,EAAA,EAAAmf,EAAAznB,GAsIpBynB,EAAAlmB,UAAA6mB,iBAAP,SAAwBC,GAEvB,GAAKloB,KAAKmoB,oBAAV,CAGA,IAA+B,QAAzBnoB,KAAKooB,kBAAuD,OAAzBpoB,KAAKooB,mBAA+BpoB,KAAKqoB,WAAe5nB,OAAAonB,EAAA,EAAApnB,GAAiB6nB,eAAeJ,EAAMK,QAASvoB,KAAK2H,MAAM6gB,IAAKxoB,KAAK6U,KAArK,CAQA,IAAI6G,EAAgBuE,EAAA,sBAA6BiI,EAAMK,QAAQ3mB,MAAO5B,MAatE,MAXmB,QAAfA,KAAKunB,QAAoBvnB,KAAKyoB,cACjC/M,EAAQ1b,KAAKyoB,aAGK,QAAfzoB,KAAKunB,QAAoBvnB,KAAKyoB,cAC5BzoB,KAAK+E,aAAa2W,KACtBA,EAAQ1b,KAAKyoB,cAIfzoB,KAAK0oB,YAAYhN,GACVA,EAnBD1b,KAAK2oB,UAAa3oB,KAAKmjB,UAC3BnjB,KAAK6lB,SA6BEyB,EAAAlmB,UAAAwnB,SAAV,SAAmBzQ,GAClB,GAAoB,QAAfnY,KAAKunB,QAAmC,QAAfvnB,KAAKunB,SAAqBvnB,KAAKyoB,YAG7D,OAAO5oB,EAAAuB,UAAMwnB,SAAQ7oB,KAAAC,KAACmY,IAsBhBmP,EAAAlmB,UAAAsnB,YAAP,SAAmB9mB,EAAeinB,GAEjCjnB,EAAMF,EAAIyJ,EAAA,MAAYvJ,EAAMF,EAAG,GAC/BE,EAAME,EAAIqJ,EAAA,MAAYvJ,EAAME,EAAG,GAE3B+mB,IACH7oB,KAAKunB,OAASsB,GAGF,QAATA,GAA4B,QAATA,IACtB7oB,KAAKyoB,YAAc7mB,GAGpB5B,KAAK8oB,gBAAgBlnB,IAQZ0lB,EAAAlmB,UAAA0nB,gBAAV,SAA0BlnB,GACrB5B,KAAK4B,MAAMF,GAAKE,EAAMF,GAAK1B,KAAK4B,MAAME,GAAKF,EAAME,IAEpD9B,KAAK4B,MAAQA,EACb5B,KAAK+oB,qBAED/oB,KAAK+E,aAAanD,GACrB5B,KAAKklB,KAAK,GAILllB,KAAKqoB,WACTroB,KAAK6lB,KAAK,GAIR7lB,KAAKkjB,UACRljB,KAAKgpB,eAELhpB,KAAKipB,SAAS,4BAUV3B,EAAAlmB,UAAA8nB,YAAP,SAAmBtnB,GAClB5B,KAAKmpB,gBAAgBvnB,IAQZ0lB,EAAAlmB,UAAA+nB,gBAAV,SAA0BvnB,GACzB,OAAQ5B,KAAKooB,kBACZ,IAAK,OACJpoB,KAAK4iB,oBAAoB,eACzB,MACD,IAAK,SACJ5iB,KAAK4iB,oBAAoB,iBACzB,MACD,IAAK,MACJ5iB,KAAK4iB,oBAAoB,cACzBniB,OAAAonB,EAAA,EAAApnB,GAAiB2oB,eAAeC,EAAA,EAAiBC,YAU7ChC,EAAAlmB,UAAAmoB,UAAP,SAAiB3nB,GAChB5B,KAAKwpB,cAAc5nB,IAQV0lB,EAAAlmB,UAAAooB,cAAV,SAAwB5nB,GAEvB5B,KAAKypB,YAAYzpB,KAAK0pB,SACtB,IAAI9B,EAAcnnB,OAAAonB,EAAA,EAAApnB,GAClB,GAAI0K,EAAA,YAAkBnL,KAAK0pB,QAAS1pB,KAAKqoB,WAAaT,EAAY+B,aAAa3pB,KAAK4pB,aAAc,gBACjG,OAAQ5pB,KAAKooB,kBACZ,IAAK,OACJpoB,KAAK4iB,oBAAoB,aACzB,MAED,IAAK,SACJ5iB,KAAK4iB,oBAAoB,eACzB,MAED,IAAK,MACJ5iB,KAAK4iB,oBAAoB,YACzBgF,EAAYwB,eAAeC,EAAA,EAAiBQ,cAK9C7pB,KAAK4iB,oBAAoB,oBACzBgF,EAAYwB,eAAeC,EAAA,EAAiBQ,SAG7C7pB,KAAKqoB,eAAY3a,EACjB1N,KAAK8pB,mBAQCxC,EAAAlmB,UAAA0oB,gBAAP,aAMUxC,EAAAlmB,UAAA4nB,aAAV,WAEChpB,KAAKgjB,UAAYhjB,KAAK4B,MAAMF,EAAI1B,KAAK+pB,WACrC/pB,KAAKijB,UAAY,EAAIjjB,KAAK4B,MAAME,EAAI9B,KAAKgqB,aASnC1C,EAAAlmB,UAAA2mB,iBAAP,SAAwBG,GACvB,GAAKloB,KAAKmoB,qBAAwB1nB,OAAAonB,EAAA,EAAApnB,GAAiB6nB,eAAeJ,EAAMK,QAASvoB,KAAK2H,MAAM6gB,IAAKxoB,KAAK6U,KAAtG,CAIA,IAAI6G,EAAgBuE,EAAA,sBAA6BiI,EAAMK,QAAQ3mB,MAAO5B,MAGlEkoB,EAAMA,MAAM+B,YAAcjqB,KAAK+E,aAAa2W,IAC/CwM,EAAMA,MAAMgC,iBAIblqB,KAAK0oB,YAAYhN,GACjB1b,KAAKkpB,YAAYxN,KAOR4L,EAAAlmB,UAAAqoB,YAAV,SAAsB7nB,KASf0lB,EAAAlmB,UAAA4mB,eAAP,SAAsBE,GACrB,GAAKloB,KAAKmoB,uBAGqB,QAAzBnoB,KAAKooB,kBAAuD,OAAzBpoB,KAAKooB,mBAA+BpoB,KAAKqoB,WAAe5nB,OAAAonB,EAAA,EAAApnB,GAAiB6nB,eAAeJ,EAAMK,QAASvoB,KAAK2H,MAAM6gB,IAAKxoB,KAAK6U,MAArK,CAGA,IAAI6G,EAAgBuE,EAAA,sBAA6BiI,EAAMK,QAAQ3mB,MAAO5B,MACtEA,KAAK0oB,YAAYhN,GACjB1b,KAAKupB,UAAU7N,KAQhBjb,OAAA+B,eAAW8kB,EAAAlmB,UAAA,aAUX,WACC,OAAOpB,KAAKyf,YAXb,SAAiB9c,GAChB3C,KAAKyf,OAAS9c,EACVyK,EAAA,SAAqBpN,KAAKyf,OAAQ0K,gBACrC1pB,OAAAonB,EAAA,EAAApnB,GAAiB2pB,YAAkBpqB,KAAKyf,OAAQ0K,cAAcP,+CAUjEtC,EA7YA,CAA4B+C,EAAA,GAqZ5B1hB,EAAA,EAAShD,kBAA0B,OAAI0hB,8BCjZvCiD,EAAA,SAAAzqB,GAoFC,SAAA0qB,IAAA,IAAAzqB,EAGCD,EAAAE,KAAAC,OAAOA,KA3DEF,EAAA0qB,OAAS,IAAI9M,EAAA,EAOb5d,EAAA2qB,OAAS,IAAI/M,EAAA,EA4Bb5d,EAAA2d,OAAS,IAAIC,EAAA,EAOb5d,EAAA6d,OAAS,IAAID,EAAA,EAkBtB5d,EAAKK,UAAY,WAGjBL,EAAK4qB,SAAW,QAEhB5qB,EAAK6qB,UAAY,GAEjB,IAAIC,EAAkB,IAAIC,EAAA,EAGtBC,EAAoBhrB,EAAKirB,YAAY/M,EAAA,GACzC8M,EAAUrD,aAAc,EACxBqD,EAAUE,YAAc,GACxBF,EAAUhd,KAAO8c,EAAgBK,OAAO,yBACxCH,EAAU1qB,YAAa,EACvB0qB,EAAU3C,qBAAsB,EAChCroB,EAAKgrB,UAAYA,EACjBhrB,EAAKiK,WAAWC,KAAKlK,EAAKgrB,WAG1B,IAAII,EAAgBprB,EAAKirB,YAAY/M,EAAA,GACrCkN,EAAMzD,aAAc,EACpByD,EAAMC,OAASP,EAAgBK,OAAO,QACtCC,EAAMpd,KAAOrN,OAAA2qB,EAAA,EAAA3qB,GACbyqB,EAAMG,gBAAkB,MACxBH,EAAM9qB,YAAa,EACnB8qB,EAAMhqB,cAAgB,GACtBgqB,EAAM/C,qBAAsB,EAC5B+C,EAAMppB,EAAI,EACVhC,EAAKorB,MAAQA,EACbprB,EAAKiK,WAAWC,KAAKlK,EAAKorB,OAG1B,IAAII,EAAgBxrB,EAAKirB,YAAY/M,EAAA,UACrCsN,EAAM7D,aAAc,EACpB6D,EAAMH,OAASP,EAAgBK,OAAO,QACtCK,EAAMxd,KAAOrN,OAAA2qB,EAAA,EAAA3qB,GACb6qB,EAAMD,gBAAkB,MACxBC,EAAMlrB,YAAa,EACnBkrB,EAAMpqB,cAAgB,GACtBoqB,EAAMnD,qBAAsB,EAC5BmD,EAAM5pB,EAAI,EACV5B,EAAKwrB,MAAQA,EACbxrB,EAAKiK,WAAWC,KAAKlK,EAAKwrB,OAG1BxrB,EAAKse,OAAOC,GAAG,cAAeve,EAAKyrB,WAAYzrB,GAAM,GAErDA,EAAKiK,WAAWC,KAAKlK,EAAK0qB,QAC1B1qB,EAAKiK,WAAWC,KAAKlK,EAAK2qB,QAC1B3qB,EAAKiK,WAAWC,KAAKlK,EAAK2d,QAC1B3d,EAAKiK,WAAWC,KAAKlK,EAAK6d,QAE1B7d,EAAKoO,KAAOpO,EAGZA,EAAKqB,eAypBP,OAzyB8BgH,EAAA,EAAAoiB,EAAA1qB,GAyJtB0qB,EAAAnpB,UAAAmqB,WAAP,WACKvrB,KAAKkrB,QACRlrB,KAAKkrB,MAAMrnB,KAAOod,EAAA,QAAevf,EAAG,EAAGI,EAAG,IAAOmf,EAAA,QAAevf,EAAG,EAAGI,EAAG9B,KAAKgqB,eAE3EhqB,KAAKsrB,QACRtrB,KAAKsrB,MAAMznB,KAAOod,EAAA,QAAevf,EAAG,EAAGI,EAAG,IAAOmf,EAAA,QAAevf,EAAG1B,KAAK+pB,WAAYjoB,EAAG,MASlFyoB,EAAAnpB,UAAA0oB,gBAAP,WACC,GAAI9pB,KAAKwrB,eAAgB,CACxB,IAAInD,EAAoBroB,KAAKqoB,UAE7B,GAAIA,EAAW,CACd,IAAIzmB,EAAgB5B,KAAK4B,MAErB5B,KAAKkrB,QACRtpB,EAAMF,EAAI1B,KAAKkrB,MAAMrpB,QAGlB7B,KAAKsrB,QACR1pB,EAAME,EAAI9B,KAAKsrB,MAAMvpB,QAGtB,IAAI+oB,EAAoB9qB,KAAK8qB,UAEzBppB,EAAYO,KAAKwJ,IAAI7J,EAAMF,EAAG2mB,EAAU3mB,GACxCI,EAAYG,KAAKwJ,IAAI7J,EAAME,EAAGumB,EAAUvmB,GAExC2pB,EAAYtgB,EAAA,MAAYlJ,KAAKyX,IAAI2O,EAAU3mB,EAAIE,EAAMF,GAAI1B,KAAK0rB,oBAC9DC,EAAYxgB,EAAA,MAAYlJ,KAAKyX,IAAI2O,EAAUvmB,EAAIF,EAAME,GAAI9B,KAAK0rB,oBAElE,OAAQ1rB,KAAK0qB,UACZ,IAAK,QACJ5oB,EAAI,EACJ6pB,EAAI3rB,KAAKiH,YACT,MACD,IAAK,QACJvF,EAAI,EACJ+pB,EAAIzrB,KAAK8G,WACT,MACD,IAAK,UACJhF,EAAI,EACJ6pB,EAAI3rB,KAAKiH,YACT,MACD,IAAK,UACJvF,EAAI,EACJ+pB,EAAIzrB,KAAK8G,WAIXgkB,EAAUppB,EAAIA,EACdopB,EAAUhpB,EAAIA,EAEdgpB,EAAUjnB,KAAOod,EAAA,UAAgBwK,EAAGE,GAEpCb,EAAUc,wBAGV5rB,KAAK8qB,UAAUjF,SAWR0E,EAAAnpB,UAAAuD,SAAV,SAAmB/C,GAMlB,OALAA,EAAMF,EAAIO,KAAK8M,IAAI,EAAGnN,EAAMF,GAC5BE,EAAME,EAAIG,KAAK8M,IAAI,EAAGnN,EAAME,GAC5BF,EAAMF,EAAIO,KAAKwJ,IAAIzL,KAAK8G,WAAYlF,EAAMF,GAC1CE,EAAME,EAAIG,KAAKwJ,IAAIzL,KAAKiH,YAAarF,EAAME,GAEpCF,GASE2oB,EAAAnpB,UAAA0nB,gBAAV,SAA0BlnB,GACzB/B,EAAAuB,UAAM0nB,gBAAe/oB,KAAAC,KAAC4B,GAEjB5B,KAAK6rB,eAAiB7rB,KAAK6rB,aAAalD,UAI5C3oB,KAAK8rB,oBAAoBlqB,GAGtB5B,KAAKqoB,WAAald,EAAA,YAAkBnL,KAAKqoB,UAAWzmB,GAAS,GACnC,OAAzB5B,KAAKooB,mBACRpoB,KAAK+rB,mBACL/rB,KAAKipB,SAAS,aASPsB,EAAAnpB,UAAA0qB,oBAAV,SAA8BlqB,GAC7BA,EAAQ5B,KAAK2E,SAAS3E,KAAK4B,OAEvB5B,KAAKkrB,OAASlrB,KAAKkrB,MAAMhI,UAAYljB,KAAKuK,QAC7CvK,KAAKkrB,MAAMxpB,EAAIE,EAAMF,GAElB1B,KAAKsrB,OAAStrB,KAAKsrB,MAAMpI,UAAYljB,KAAKwK,QAC7CxK,KAAKsrB,MAAMxpB,EAAIF,EAAME,GAEtB9B,KAAK8pB,mBAIIS,EAAAnpB,UAAA+nB,gBAAV,SAA0BvnB,GACzB,GAAI5B,KAAKkjB,UAAYljB,KAAKmjB,SAEzB,GAAInjB,KAAK+E,aAAanD,GAAQ,CAC7B5B,KAAKqoB,WAAc3mB,EAAGE,EAAMF,EAAGI,EAAGF,EAAME,GAExC9B,KAAKypB,YAAY7nB,GAIjB5B,KAAK4B,MAAMF,EAAI1B,KAAKqoB,UAAU3mB,EAC9B1B,KAAK4B,MAAME,EAAI9B,KAAKqoB,UAAUvmB,EAE9B,IAAIgpB,EAAoB9qB,KAAK8qB,UACzBkB,EAAqBhsB,KAAKqoB,UAAU3mB,EACpCuqB,EAAqBjsB,KAAKqoB,UAAUvmB,EAEpC9B,KAAKwrB,iBACRV,EAAUppB,EAAIsqB,EACdlB,EAAUhpB,EAAImqB,EACdnB,EAAUjnB,KAAO,GACjBinB,EAAU5F,QAEXrlB,EAAAuB,UAAM+nB,gBAAeppB,KAAAC,KAAC4B,QAGtB5B,KAAKqoB,eAAY3a,OAIlB1N,KAAKqoB,eAAY3a,GAQT6c,EAAAnpB,UAAAqoB,YAAV,SAAsB7nB,GACjB5B,KAAKkrB,QACRtpB,EAAMF,EAAI1B,KAAKkrB,MAAMrpB,QAElB7B,KAAKsrB,QACR1pB,EAAME,EAAI9B,KAAKsrB,MAAMvpB,SAKbwoB,EAAAnpB,UAAAooB,cAAV,SAAwB5nB,GACnB5B,KAAKqoB,YACRroB,KAAK0pB,QAAU9nB,EAEf5B,KAAKypB,YAAYzpB,KAAK0pB,SAEtB1pB,KAAKksB,YAEgB,WAAjBlsB,KAAK0qB,UAA0C,WAAjB1qB,KAAK0qB,UAA0C,YAAjB1qB,KAAK0qB,UAIpE1qB,KAAK8qB,UAAUjF,OAGhBhmB,EAAAuB,UAAMooB,cAAazpB,KAAAC,KAAC4B,IAGrB5B,KAAKqoB,eAAY3a,EACjB1N,KAAK8pB,mBASIS,EAAAnpB,UAAA2qB,iBAAV,WAEC,IAAII,EAAShhB,EAAA,MAAYnL,KAAKqoB,UAAU3mB,EAAI1B,KAAK+pB,WAAY,GACzDqC,EAASjhB,EAAA,MAAYnL,KAAKqoB,UAAUvmB,EAAI9B,KAAKgqB,YAAa,GAK1DqC,EAASF,EAHEhhB,EAAA,MAAYnL,KAAK4B,MAAMF,EAAI1B,KAAK+pB,WAAY,GAIvDuC,GAAUF,EAHCjhB,EAAA,MAAYnL,KAAK4B,MAAME,EAAI9B,KAAKgqB,YAAa,GAK5DhqB,KAAKusB,QAAW9oB,MAAO4oB,EAAQ7oB,IAAK,EAAI6oB,GACxCrsB,KAAKwsB,QAAW/oB,MAAO6oB,EAAQ9oB,IAAK,EAAI8oB,GAEnB,QAAjBtsB,KAAK0qB,WACR1qB,KAAKwsB,OAAO/oB,MAAQ,EACpBzD,KAAKwsB,OAAOhpB,IAAM,GAEE,QAAjBxD,KAAK0qB,WACR1qB,KAAKusB,OAAO9oB,MAAQ,EACpBzD,KAAKusB,OAAO/oB,IAAM,IASV+mB,EAAAnpB,UAAA8qB,UAAV,WACKlsB,KAAKkrB,QACRlrB,KAAK0pB,QAAQhoB,EAAI1B,KAAKkrB,MAAMrpB,QAEzB7B,KAAKsrB,QACRtrB,KAAK0pB,QAAQ5nB,EAAI9B,KAAKsrB,MAAMvpB,QAI7B/B,KAAK8qB,UAEL,IAAIqB,EAAiBhhB,EAAA,MAAYnL,KAAKqoB,UAAU3mB,EAAI1B,KAAK+pB,WAAY,GACjE0C,EAAethB,EAAA,MAAanL,KAAK0pB,QAAS,EAAI1pB,KAAK+pB,WAAY,GAE/DqC,EAAiBjhB,EAAA,MAAYnL,KAAKqoB,UAAUvmB,EAAI9B,KAAKgqB,YAAa,GAClE0C,EAAevhB,EAAA,MAAanL,KAAK0pB,QAAS,EAAI1pB,KAAKgqB,YAAa,GAEpEhqB,KAAKusB,QAAW9oB,MAAO0H,EAAA,IAAUghB,EAAQM,GAAOjpB,IAAK2H,EAAA,IAAUghB,EAAQM,IACvEzsB,KAAKwsB,QAAW/oB,MAAO0H,EAAA,IAAUihB,EAAQM,GAAOlpB,IAAK2H,EAAA,IAAUihB,EAAQM,KAsBxEjsB,OAAA+B,eAAW+nB,EAAAnpB,UAAA,gBAsBX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAvB9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,GAEzC3C,KAAKwrB,gBAAiB,GAEQ,GAA1B7oB,EAAM6d,QAAQ,UACjBxgB,KAAKooB,iBAAmB,OACxBpoB,KAAKwrB,gBAAiB,IAES,GAA5B7oB,EAAM6d,QAAQ,YACjBxgB,KAAKooB,iBAAmB,SACxBpoB,KAAKwrB,gBAAiB,IAEM,GAAzB7oB,EAAM6d,QAAQ,SACjBxgB,KAAKooB,iBAAmB,MACxBpoB,KAAKwrB,gBAAiB,oCAoBxB/qB,OAAA+B,eAAW+nB,EAAAnpB,UAAA,sBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,uBAR9B,SAA0BC,GACzB3C,KAAK8C,iBAAiB,iBAAkBH,oCAmBzClC,OAAA+B,eAAW+nB,EAAAnpB,UAAA,sBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,uBAR9B,SAA0BC,GACzB3C,KAAK8C,iBAAiB,iBAAkBH,oCAgBzClC,OAAA+B,eAAW+nB,EAAAnpB,UAAA,iBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,kBAR9B,SAAqBC,GACpB3C,KAAK8C,iBAAiB,YAAaH,oCAuBpClC,OAAA+B,eAAW+nB,EAAAnpB,UAAA,aAaX,WACC,OAAOpB,KAAKyd,OAAO4D,WAdpB,SAAiB/f,GAChB,GAAItB,KAAKyd,OAAO4D,OAAS/f,EAAM,CACAA,EAAKgB,MACnCtC,KAAKyd,OAAOkE,IAAIrgB,EAAM,IAAIoc,EAAA,GACzBpc,EAAKC,QAAQ6c,OAAOC,GAAG,kBAAmBre,KAAK2sB,uBAAwB3sB,MAAM,wCA0BhFS,OAAA+B,eAAW+nB,EAAAnpB,UAAA,aAaX,WACC,OAAOpB,KAAK2d,OAAO0D,WAdpB,SAAiB/f,GAChB,GAAItB,KAAK2d,OAAO0D,OAAS/f,EAAM,CACAA,EAAKgB,MACnCtC,KAAK2d,OAAOgE,IAAIrgB,EAAM,IAAIoc,EAAA,GACzBpc,EAAKC,QAAQ6c,OAAOC,GAAG,kBAAmBre,KAAK4sB,uBAAwB5sB,MAAM,wCAmBtEuqB,EAAAnpB,UAAAurB,uBAAV,SAAiCzE,GAChC,IAAI3mB,EAAmBvB,KAAKuK,MAAMhJ,QAC9BK,EAAgBqe,EAAA,kBAA0Bve,EAAGH,EAAQM,OAAQC,EAAGP,EAAQQ,QAAU/B,MAClF0B,EAAYE,EAAMF,EAStB,GAPI1B,KAAKkrB,QACRlrB,KAAKkrB,MAAMxpB,EAAIA,EACV1B,KAAK+E,aAAanD,IACtB5B,KAAK6lB,QAIH7lB,KAAKuK,OAASvK,KAAK6sB,eAAgB,CACtC,IAAIxV,EAAqBrX,KAAKuK,MAAMuiB,sBAChCxV,EAAmBtX,KAAKuK,MAAMwiB,oBAClC,GAAI1V,GAAcC,EAAU,CAC3BtX,KAAKkrB,MAAMxpB,EAAIA,EACf,IAAIsF,EAAgBsQ,EAAS5V,EAAI2V,EAAW3V,EAC5C1B,KAAKkrB,MAAMrnB,KAAOod,EAAA,UAAgBja,EAAOhH,KAAKgqB,aAAchjB,EAAQ,MAW7DujB,EAAAnpB,UAAAwrB,uBAAV,SAAiC1E,GAChC,IAAI3mB,EAAmBvB,KAAKwK,MAAMjJ,QAC9BK,EAAgBqe,EAAA,kBAA0Bve,EAAGH,EAAQM,OAAQC,EAAGP,EAAQQ,QAAU/B,MAClF8B,EAAYF,EAAME,EAUtB,GARI9B,KAAKsrB,QACRtrB,KAAKsrB,MAAMxpB,EAAIA,EAEV9B,KAAK+E,aAAanD,IACtB5B,KAAK6lB,QAIH7lB,KAAKwK,OAASxK,KAAKgtB,eAAgB,CACtC,IAAI3V,EAAqBrX,KAAKwK,MAAMsiB,sBAChCxV,EAAmBtX,KAAKwK,MAAMuiB,oBAClC,GAAI1V,GAAcC,EAAU,CAC3BtX,KAAKsrB,MAAMxpB,EAAIA,EACf,IAAIoF,EAAiBoQ,EAASxV,EAAIuV,EAAWvV,EAC7C9B,KAAKsrB,MAAMznB,KAAOod,EAAA,UAAgBjhB,KAAK+pB,WAAY7iB,EAAQ,GAAIA,EAAS,MAU3EzG,OAAA+B,eAAW+nB,EAAAnpB,UAAA,aAeX,WACC,OAAOpB,KAAKwqB,OAAOnJ,WAhBpB,SAAiB6J,GACZA,GACHA,EAAMjN,WAAWje,KAAK2H,MAAMlG,IAAI,SAChCzB,KAAKwqB,OAAO7I,IAAIuJ,EAAOA,EAAM9M,OAAOC,GAAG,kBAAmBre,KAAK8pB,gBAAiB9pB,MAAM,IACtFkrB,EAAM/C,qBAAsB,EAC5B+C,EAAM+B,OAASjtB,MAGfA,KAAKwqB,OAAO0C,yCAgBdzsB,OAAA+B,eAAW+nB,EAAAnpB,UAAA,aAeX,WACC,OAAOpB,KAAKyqB,OAAOpJ,WAhBpB,SAAiBiK,GACZA,GACHA,EAAMrN,WAAWje,KAAK2H,MAAMlG,IAAI,SAChCzB,KAAKyqB,OAAO9I,IAAI2J,EAAOA,EAAMlN,OAAOC,GAAG,kBAAmBre,KAAK8pB,gBAAiB9pB,MAAM,IACtFsrB,EAAM2B,OAASjtB,KACfsrB,EAAMnD,qBAAsB,GAG5BnoB,KAAKyqB,OAAOyC,yCAgBdzsB,OAAA+B,eAAW+nB,EAAAnpB,UAAA,iBAWX,WACC,OAAOpB,KAAKmtB,gBAZb,SAAqBrC,GACpB9qB,KAAKmtB,WAAarC,EACdA,IACHA,EAAU9mB,QAAUhE,KAAK2H,MAAMlG,IAAI,QACnCqpB,EAAUmC,OAASjtB,uCAoBduqB,EAAAnpB,UAAAulB,cAAP,SAAqBC,GAEhBA,IAGCxZ,EAAA,SAAewZ,EAAOrc,QAAU6C,EAAA,SAAewZ,EAAOrc,SACrDvK,KAAK6mB,IAAI3T,OAAO0T,EAAOrc,OAC1Bqc,EAAOrc,MAAQvK,KAAK6mB,IAAIvY,OAAOsY,EAAOrc,QAGtCvK,KAAK8mB,iBAAiB9c,KAAK,+BAAkC4c,EAAOrc,MAAO,8BACpEqc,EAAOrc,QAGZ6C,EAAA,SAAewZ,EAAOpc,QAAU4C,EAAA,SAAewZ,EAAOpc,SACrDxK,KAAK6mB,IAAI3T,OAAO0T,EAAOpc,OAC1Boc,EAAOpc,MAAQxK,KAAK6mB,IAAIvY,OAAOsY,EAAOpc,QAGtCxK,KAAK8mB,iBAAiB9c,KAAK,+BAAkC4c,EAAOpc,MAAO,8BACpEoc,EAAOpc,SAMjB3K,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,IAWrBnmB,OAAA+B,eAAW+nB,EAAAnpB,UAAA,oBAeX,WACC,OAAOpB,KAAK0C,iBAAiB,qBAhB9B,SAAwB4H,GACnBtK,KAAK8C,iBAAiB,eAAgBwH,KACrCtK,KAAKotB,iBACRptB,KAAKotB,gBAAgB3L,UAGlBnX,IACHtK,KAAKotB,gBAAkB9iB,EAAO8T,OAAOC,GAAG,iBAAkBre,KAAKqtB,WAAYrtB,MAAM,sCAkB7EuqB,EAAAnpB,UAAAisB,WAAP,WAEC,IAAI/iB,EAAStK,KAAK6rB,aACd/pB,EAAIwI,EAAOsZ,SACXliB,EAAI4I,EAAOqZ,SAEX3jB,KAAKuK,OACJvK,KAAKuK,MAAM7G,SAAS4pB,WACvBxrB,GAAK9B,KAAKiH,aAIZjH,KAAK4B,OAAUF,EAAGA,EAAGI,EAAGA,GACxB9B,KAAKgpB,eAELtnB,GAAK1B,KAAK8G,WAEN9G,KAAKwK,OACJxK,KAAKwK,MAAM9G,SAAS4pB,WACvB5rB,GAAK1B,KAAK8G,YAIZ,IAAIvF,EAAU+I,EAAO/I,QACjB4W,EAAW5W,EAAQgsB,kBACnBC,EAASjsB,EAAQksB,gBAEjBnjB,EAAO+J,UAAY/J,EAAOC,OAC7BD,EAAOE,MAAMiR,sBAAsBzb,KAAKijB,WAGrC3Y,EAAO+J,UAAY/J,EAAOE,OAC7BF,EAAOC,MAAMkR,sBAAsBzb,KAAKgjB,WAGzChjB,KAAKkrB,MAAMwC,UAAWC,SAAU,IAAKC,GAAI9rB,IAAMqW,EAAUqV,GACzDxtB,KAAKsrB,MAAMoC,UAAWC,SAAU,IAAKC,GAAIlsB,IAAMyW,EAAUqV,GAEpDxtB,KAAKuK,OACTvK,KAAKkrB,MAAMwC,UAAWC,SAAU,IAAKC,GAAIlsB,IAAMyW,EAAUqV,GAErDxtB,KAAKwK,OACTxK,KAAKsrB,MAAMoC,UAAWC,SAAU,IAAKC,GAAI9rB,IAAMqW,EAAUqV,IAG5DjD,EAzyBA,CAA8BlD,GAizB9B1e,EAAA,EAAShD,kBAA4B,SAAI2kB,0CCr2BzCuD,EAAA,SAAAhuB,GAuDC,SAAAiuB,IAAA,IAAAhuB,EACCD,EAAAE,KAAAC,OAAOA,KArBEF,EAAA2f,OAAS,IAAI/B,EAAA,EAsBtB5d,EAAKK,UAAY,mBAEjB,IAAIyqB,EAAkB,IAAIC,EAAA,EAC1B/qB,EAAKsG,QAAQ,EAAG,EAAG,EAAG,GAEtB,IAAI2nB,EAA0BjuB,EAAKirB,YAAYiD,GAC/CD,EAAetG,aAAc,EAC7BsG,EAAeE,OAAO,EAAG,EAAG,EAAG,GAC/BF,EAAe3nB,QAAQ,EAAG,EAAG,EAAG,GAChC2nB,EAAe5F,qBAAsB,EAErCroB,EAAKouB,gBAAkBH,EACvBjuB,EAAKiK,WAAWC,KAAKlK,EAAKouB,iBAE1BpuB,EAAKquB,UAAY,GACjBruB,EAAKsuB,SAAW,GAEhB,IAAIC,EAA4BvuB,EAAKirB,YAAY/M,EAAA,GACjDqQ,EAAkB5G,aAAc,EAChC4G,EAAkBpQ,WAAWne,EAAK6H,MAAMlG,IAAI,SAC5C4sB,EAAkBvgB,KAAO8c,EAAgBK,OAAO,cAChDoD,EAAkBrD,YAAc,GAChCqD,EAAkBlG,qBAAsB,EACxCkG,EAAkBjuB,YAAa,EAC/BiuB,EAAkBC,SAClBxuB,EAAKyuB,mBAAqBF,EAC1BvuB,EAAKiK,WAAWC,KAAKlK,EAAKyuB,oBAE1BR,EAAeO,SAEfxuB,EAAK0uB,WAAWppB,aAAa,EAAG,EAAG,EAAG,GAEtC,IAAIqpB,EAAkB3uB,EAAK4uB,MAAMF,WACjCC,EAAgBrpB,aAAa,EAAG,EAAG,EAAG,GACtCqpB,EAAgBzD,YAAc,EAC9ByD,EAAgB3gB,KAAO8c,EAAgBK,OAAO,cAE9C,IAAI0D,EAAaF,EAAgBG,OAAOtgB,OAAO,SAC3CqgB,IACHA,EAAWvlB,WAAW4hB,YAAc,IAGrC,IAAI6D,EAAYJ,EAAgBG,OAAOtgB,OAAO,eAC1CugB,IACHA,EAAUzlB,WAAW4hB,YAAc,IAGpClrB,EAAKiK,WAAWC,KAAKlK,EAAK2f,QAE1B3f,EAAKqB,eA0TP,OApasCgH,EAAA,EAAA2lB,EAAAjuB,GAmHrCY,OAAA+B,eAAWsrB,EAAA1sB,UAAA,cAAX,WAMC,OALKpB,KAAKoK,UACTpK,KAAKoK,QAAU,IAAIgI,EAAA,EACnBpS,KAAK+J,WAAWC,KAAKhK,KAAKoK,QAAQgU,OAAOC,GAAG,WAAYre,KAAK8uB,kBAAmB9uB,MAAM,IACtFA,KAAK+J,WAAWC,KAAKhK,KAAKoK,QAAQgU,OAAOC,GAAG,UAAWre,KAAK+uB,oBAAqB/uB,MAAM,KAEjFA,KAAKoK,yCAQH0jB,EAAA1sB,UAAA0tB,kBAAV,SAA4B5G,GAC3B,IAAI8G,EAAyB9G,EAAM+G,SAC/BlB,EAA0B/tB,KAAK+tB,eACnCA,EAAemB,cAAczhB,UAAW,EAExCzN,KAAKsC,MAAQ0sB,EAAa1sB,MAE1B,IAAI6sB,GAAoB,EACpBC,GAAoB,EAGxBjlB,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GAC/BA,GAAU0kB,IACT1kB,EAAOC,OAASykB,EAAazkB,QAChC4kB,GAAW,GAER7kB,EAAOE,OAASwkB,EAAaxkB,QAChC4kB,GAAW,MAKd,IAAIxE,EAAkB,IAAIC,EAAA,EAEtBvgB,EAA6B0kB,EAAaK,QAE9C,GAAIF,EAAU,CAEb,IAAI5kB,EAAQykB,EAAazkB,MAAM8kB,QAC/BtB,EAAezM,MAAM5J,UAAUnN,GAC/BA,EAAM+kB,MAAM7hB,UAAW,EACvBlD,EAAMglB,oBAAsB,EAC5BhlB,EAAMilB,GAAKR,EAAana,IACxBtK,EAAM+kB,MAAM7hB,UAAW,GAEnB/J,EAAW6G,EAAM7G,UACZ5C,MAAMH,SAAS8M,UAAW,EACnC/J,EAASc,QAAS,EAClBd,EAASzC,KAAKC,cAAgB,EAC9BwC,EAASmB,iBAAmB,IAC5BnB,EAASoB,iBAAmB,IAC5BpB,EAASzC,KAAKwM,UAAW,EACzB/J,EAAS+rB,UAAU9uB,SAAS8M,UAAW,EACvC/J,EAASwN,SAASzD,UAAW,EAC7B/J,EAAShD,KAAKC,SAASO,cAAgB,IAElBwC,EAAS7C,OAAOF,SACtBqqB,YAAc,GAE7B1gB,EAAOC,MAAQA,EAOhB,GAAI6kB,EAAU,CACb,IAKI1rB,EALA8G,EAAoBwkB,EAAaxkB,MAAM6kB,QAC3CtB,EAAelM,MAAMnK,UAAUlN,GAC/BA,EAAM8kB,MAAM7hB,UAAW,EACvBjD,EAAM+kB,oBAAsB,GAExB7rB,EAAW8G,EAAM9G,UACZ5C,MAAMH,SAAS8M,UAAW,EACnC/J,EAASc,QAAS,EAClBd,EAASzC,KAAKC,cAAgB,EAC9BwC,EAASmB,iBAAmB,IAC5BnB,EAASoB,iBAAmB,IAC5BpB,EAASzC,KAAKwM,UAAW,EACzB/J,EAAS+rB,UAAU9uB,SAAS8M,UAAW,EACvC/J,EAAShD,KAAKC,SAASwqB,OAASP,EAAgBK,OAAO,cACvDvnB,EAASwN,SAASzD,UAAW,EAC7B/J,EAAShD,KAAKC,SAASO,cAAgB,IAElBwC,EAAS7C,OAAOF,SACtBqqB,YAAc,GAE7B1gB,EAAOE,MAAQA,EAMhBF,EAAOilB,oBAAsB,EAC7BjlB,EAAO+a,sBAAwB,EAC/B/a,EAAOgb,aAAaC,mBAAqB,EACzCjb,EAAOolB,YAAa,EAEpB1vB,KAAK+J,WAAWC,KAAKM,EAAO8T,OAAOC,GAAG,YAAare,KAAK2vB,YAAa3vB,MAAM,IAG3EA,KAAK+J,WAAWC,KAAKglB,EAAa5Q,OAAOC,GAAG,gBAAiB,WACxD/T,EAAOwU,MAAQkQ,EAAalQ,OAC/BxU,EAAOwU,KAAOkQ,EAAalQ,YAE1BpR,GAAW,IACdpD,EAAOgb,aAAalc,WAAW8Z,SAAU,EAEzC5Y,EAAOslB,QAAQ5lB,KAAK,IAAI6lB,EAAA,GACxB9B,EAAezjB,OAAON,KAAKM,GAE3BtK,KAAK8vB,uBAMIhC,EAAA1sB,UAAA0uB,oBAAV,eAAAhwB,EAAAE,KACKA,KAAKkuB,kBACR/jB,EAAA,KAAWnK,KAAKkuB,gBAAgB5M,MAAMjX,WAAY,SAACE,GAClD,IAAI7G,EAAW6G,EAAM7G,SACG,YAApB5D,EAAKiwB,aACRrsB,EAAShD,KAAKC,SAAS8M,UAAW,EAClC/J,EAAS7C,OAAOF,SAAS8M,UAAW,EACpC/J,EAAS6H,gBAAkB,KAG3B7H,EAAShD,KAAKC,SAAS8M,UAAW,EAClC/J,EAAS7C,OAAOF,SAAS8M,UAAW,EACpC/J,EAAS6H,gBAAkBhB,EAAMylB,WAAWtsB,SAAS6H,mBAKvDpB,EAAA,KAAWnK,KAAKkuB,gBAAgBrM,MAAMxX,WAAY,SAACG,GAClD,IAAI9G,EAAW8G,EAAM9G,SACG,cAApB5D,EAAKiwB,aACRrsB,EAAShD,KAAKC,SAAS8M,UAAW,EAClC/J,EAAS7C,OAAOF,SAAS8M,UAAW,EACpC/J,EAAS6H,gBAAkB,KAG3B7H,EAAShD,KAAKC,SAAS8M,UAAW,EAClC/J,EAAS7C,OAAOF,SAAS8M,UAAW,EACpC/J,EAAS6H,gBAAkBf,EAAMwlB,WAAWtsB,SAAS6H,qBAa/CuiB,EAAA1sB,UAAA2tB,oBAAV,SAA8B7G,GACAA,EAAM+H,SACtB7R,OAAO8R,IAAI,YAAalwB,KAAK2vB,YAAa3vB,OAcxDS,OAAA+B,eAAWsrB,EAAA1sB,UAAA,sBAAX,WACC,OAAOpB,KAAKkuB,iDAQbztB,OAAA+B,eAAWsrB,EAAA1sB,UAAA,aAWX,WACC,OAAOpB,KAAKyf,OAAO4B,WAZpB,SAAiB/e,GACZtC,KAAKyf,OAAO4B,QAAU/e,IACzBtC,KAAKyf,OAAOkC,IAAIrf,EAAOA,EAAM8b,OAAOC,GAAG,gBAAiBre,KAAKmwB,kBAAmBnwB,MAAM,IACtFA,KAAKmwB,oBACLnwB,KAAKkuB,gBAAgBkC,aAAe9tB,oCAiB/BwrB,EAAA1sB,UAAA+uB,kBAAP,WAEKnwB,KAAKsC,MAAMwc,MAAQ9e,KAAK+tB,eAAejP,OAC1C9e,KAAK+tB,eAAejP,KAAO9e,KAAKsC,MAAMwc,OAO9BgP,EAAA1sB,UAAAuuB,YAAV,WACC,IAAI5B,EAA0B/tB,KAAK+tB,eACnC5jB,EAAA,KAAW4jB,EAAezM,MAAMjX,WAAY,SAAC3I,GAC5CA,EAAE8R,MAAO/P,MAAO,EAAGD,IAAK,IAAK,GAAM,KAEpC2G,EAAA,KAAW4jB,EAAelM,MAAMxX,WAAY,SAACvI,GAC5CA,EAAE0R,MAAO/P,MAAO,EAAGD,IAAK,IAAK,GAAM,MAO3BsqB,EAAA1sB,UAAAivB,YAAV,WAEC,GADAxwB,EAAAuB,UAAMivB,YAAWtwB,KAAAC,MACbA,KAAKuuB,mBAAoB,CAC5B,IAAIG,EAAQ1uB,KAAK0uB,MACbhtB,EAAYgtB,EAAM7sB,QAAU,EAC5BC,EAAY4sB,EAAM3sB,QAAU,EAC5B0pB,EAAYiD,EAAM5nB,YAAc,EAChC6kB,EAAY+C,EAAMznB,aAAe,EAEjCpD,EAAe,GAEK,cAApB7D,KAAK+vB,aACRlsB,EAAOod,EAAA,YACNvf,GAAI,EACJI,EAAG,EACHkF,MAAOtF,EACPwF,OAAQykB,IAGT9nB,GAAQod,EAAA,YACPvf,EAAGA,EAAI+pB,EACP3pB,EAAG,EACHkF,OAAQhH,KAAK8G,YAAc,GAAKpF,EAAI+pB,EACpCvkB,OAAQykB,MAIT9nB,EAAOod,EAAA,YACNvf,EAAG,EACHI,EAAG,EACHkF,MAAOykB,EACPvkB,OAAQpF,IAGT+B,GAAQod,EAAA,YACPvf,EAAG,EACHI,EAAGA,EAAI6pB,EACP3kB,MAAOykB,EACPvkB,QAASlH,KAAKiH,aAAe,GAAKnF,EAAI6pB,KAIxC3rB,KAAKuuB,mBAAmB1qB,KAAOA,IAU1BiqB,EAAA1sB,UAAAulB,cAAP,SAAqBC,GAEpB,GAAIA,GAECxZ,EAAA,SAAewZ,EAAOtc,SAAW8C,EAAA,QAAcwZ,EAAOtc,QACzD,IAAK,IAAI2B,EAAI,EAAGI,EAAMua,EAAOtc,OAAO/F,OAAQ0H,EAAII,EAAKJ,IAAK,CACzD,IAAI3B,EAASsc,EAAOtc,OAAO2B,GAC3B,GAAImB,EAAA,SAAe9C,IAAW8C,EAAA,SAAe9C,GAAS,CACrD,IAAItK,KAAK6mB,IAAI3T,OAAO5I,GAInB,MAAM6U,MAAM,2CAA6C7U,EAAS,qBAHlEsc,EAAOtc,OAAO2B,GAAKjM,KAAK6mB,IAAIvY,OAAOhE,IAWxCzK,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,IAGtBkH,EApaA,CAAsCwC,EAAA,GA4atC3nB,EAAA,EAAShD,kBAAoC,iBAAIkoB,EC5bjD,IAAA0C,EAAA,SAAA1wB,GAYC,SAAA2wB,IAAA,IAAA1wB,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,kBACjBL,EAAKqB,eAGP,OAlBqCgH,EAAA,EAAAqoB,EAAA3wB,GAkBrC2wB,EAlBA,CAAqCC,EAAA,GAuMrCzC,EAAA,SAAAnuB,GAwLC,SAAA6wB,IAAA,IAAA5wB,EAGCD,EAAAE,KAAAC,OAAOA,KAxDEF,EAAA6wB,eAAuCC,EAAA,EAOvC9wB,EAAA+wB,eAAuCC,EAAA,EAmDhDhxB,EAAKK,UAAY,UAIjBL,EAAKixB,aAAc,EAGnB,IAAIC,EAAiBlxB,EAAKkxB,eAC1BA,EAAe9wB,OAAS,WACxBJ,EAAKsG,QAAQ,GAAI,GAAI,GAAI,IAGzB,IAAI6qB,EAAcD,EAAejG,YAAYV,EAAA,GAC7C4G,EAAYxJ,aAAc,EAC1BwJ,EAAY/wB,OAAS,WACrB+wB,EAAYjqB,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAC5BwwB,EAAY/sB,OAAS,EACrBpE,EAAKoxB,iBAAmBD,EAMxB,IAAIE,EAAmBH,EAAejG,YAAYV,EAAA,GAClD8G,EAAiB1J,aAAc,EAC/B0J,EAAiBjxB,OAAS,aAC1BixB,EAAiBnqB,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACjC0wB,EAAiBjqB,OAASzG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAClC0wB,EAAiBjtB,OAAS,EAC1BpE,EAAKsxB,sBAAwBD,EAG7B,IAAIE,EAAiBL,EAAejG,YAAYV,EAAA,GAChDgH,EAAe5J,aAAc,EAC7B4J,EAAerqB,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAC/B4wB,EAAenxB,OAAS,WACxBmxB,EAAentB,OAAS,EACxBpE,EAAKwxB,oBAAsBD,EAG3B,IAAIE,EAAeJ,EAAiBpG,YAAYV,EAAA,GAChDkH,EAAa9J,aAAc,EAC3B8J,EAAarxB,OAAS,aACtBqxB,EAAarqB,OAASzG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAC9B8wB,EAAaC,aAAe,QAC5BD,EAAanT,OAAOC,GAAG,cAAeve,EAAK2xB,mBAAoB3xB,GAAM,GACrEyxB,EAAartB,OAAS,EACtBpE,EAAK4xB,kBAAoBH,EAGzB,IAAII,EAAWR,EAAiBpG,YAAYV,EAAA,GAC5CsH,EAASlK,aAAc,EACvBkK,EAASzqB,OAASzG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAC1BkxB,EAAS3qB,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAGzBkxB,EAASnD,WAAWxD,YAAc,EAClClrB,EAAKqqB,cAAgBwH,EAGrB7xB,EAAK8xB,mBAAqB,OAE1B9xB,EAAK+xB,iBAAmBF,EAGxB,IAAIG,EAAgBX,EAAiBpG,YAAYV,EAAA,GACjDyH,EAAcrK,aAAc,EAC5BqK,EAAc5xB,OAAS,aACvB4xB,EAAc5qB,OAASzG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAC/BqxB,EAAc5tB,OAAS,EACvB4tB,EAAc1T,OAAOC,GAAG,cAAeve,EAAK2xB,mBAAoB3xB,GAAM,GACtEA,EAAKiyB,mBAAqBD,EAE1BhyB,EAAKkyB,gBAAgB/E,OAAS0E,EAC9B7xB,EAAKmyB,iBAAiBhF,OAAS0E,EAE/B,IAAIzC,EAAgByC,EAAS5G,YAAYmH,EAAA,UACzChD,EAAczH,aAAc,EAC5ByH,EAAciD,MAAQ,QACtBjD,EAAckD,OAAS,MACvBlD,EAAchrB,OAASyQ,OAAO0d,iBAC9BnD,EAAcoD,UAAY,EAC1BpD,EAAcqD,YAAc,EAE5BrD,EAAcrJ,KAAK,GACnB/lB,EAAKovB,cAAgBA,EAErBpvB,EAAK0yB,YAAc1yB,EAAKqqB,cAGxBrqB,EAAKqB,eA85CP,OArrD6BgH,EAAA,EAAAuoB,EAAA7wB,GA+RlB6wB,EAAAtvB,UAAA6R,sBAAV,WAECpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MAC3BA,KAAKkvB,cAAcuD,YAAa,EAG3BrlB,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,eAUtCsd,EAAAtvB,UAAAyG,KAAP,WACChI,EAAAuB,UAAMyG,KAAI9H,KAAAC,MAEVA,KAAKgyB,gBAAgBU,UACrB1yB,KAAKiyB,iBAAiBS,UAElB1yB,KAAK+wB,cACR/wB,KAAKiyB,iBAAiB/jB,KAAOlO,KAAKwyB,aAGnCxyB,KAAK2yB,sBAQCjC,EAAAtvB,UAAAwxB,mBAAP,WACCzoB,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnCA,EAAOzH,gBAUF6tB,EAAAtvB,UAAAqT,aAAP,WAG4B,GAAvBzU,KAAK6yB,iBACR1oB,EAAA,KAAWnK,KAAKshB,MAAMjX,WAAY,SAAC/I,GAClCA,EAAKkd,qBAGNrU,EAAA,KAAWnK,KAAK6hB,MAAMxX,WAAY,SAAC/I,GAClCA,EAAKkd,qBAGNrU,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnCA,EAAOkU,sBAIT3e,EAAAuB,UAAMqT,aAAY1U,KAAAC,OAQT0wB,EAAAtvB,UAAAqwB,mBAAV,WAEC,IAAIqB,EAAgB9yB,KAAK0xB,kBAAkB/jB,cACvColB,EAAiB/yB,KAAK+xB,mBAAmBpkB,cACzC0jB,EAAiBrxB,KAAKsxB,oBAEtBD,EAAe2B,aAAeF,GAAiBzB,EAAe4B,cAAgBF,IACjF1B,EAAe2B,YAAcF,EAC7BzB,EAAe4B,aAAeF,GAG/B,IAAI9B,EAAcjxB,KAAKkxB,iBAEnBD,EAAY+B,aAAeF,GAAiB7B,EAAYgC,cAAgBF,IAC3E9B,EAAY+B,YAAcF,EAC1B7B,EAAYgC,aAAeF,IAWtBrC,EAAAtvB,UAAA8xB,kBAAP,SAAyBhL,GACxBloB,KAAKmzB,YAAYjL,EAAMvmB,SAUjB+uB,EAAAtvB,UAAAgyB,kBAAP,SAAyBlL,GACxBloB,KAAKqzB,YAAYnL,EAAMvmB,SASjB+uB,EAAAtvB,UAAAkyB,aAAP,SAAoBpL,GAEnB,IAAI5mB,EAAa4mB,EAAM+G,SACvB3tB,EAAKgB,MAAQtC,KAEbsB,EAAKoC,SAAW,IAAI1D,KAAK2wB,eACzBrvB,EAAK8X,WAAa,IAElB9X,EAAKoC,SAAS6vB,SAAS,WAAY,SAAU,WAAY,mBAAoBvzB,KAAKkzB,kBAAmBlzB,MACrGsB,EAAK8c,OAAOC,GAAG,eAAgBre,KAAKwzB,uBAAwBxzB,MAAM,GAClEsB,EAAK8c,OAAOC,GAAG,aAAcre,KAAKwzB,uBAAwBxzB,MAAM,GAKhEsB,EAAK8uB,aAAepwB,KAEpBA,KAAKmzB,YAAY7xB,EAAKoC,UACtB1D,KAAKyzB,YAAYnyB,IAUXovB,EAAAtvB,UAAAsyB,aAAP,SAAoBxL,GAEnB,IAAI5mB,EAAa4mB,EAAM+G,SACvB3tB,EAAKgB,MAAQtC,KAEbsB,EAAKoC,SAAW,IAAI1D,KAAK6wB,eACzBvvB,EAAK8X,WAAa,IAElB9X,EAAKoC,SAAS6vB,SAAS,WAAY,SAAU,WAAY,mBAAoBvzB,KAAKozB,kBAAmBpzB,MACrGsB,EAAK8c,OAAOC,GAAG,eAAgBre,KAAK2zB,uBAAwB3zB,MAAM,GAClEsB,EAAK8c,OAAOC,GAAG,aAAcre,KAAK2zB,uBAAwB3zB,MAAM,GAKhEsB,EAAK8uB,aAAepwB,KAEpBA,KAAKqzB,YAAY/xB,EAAKoC,UACtB1D,KAAKyzB,YAAYnyB,IAORovB,EAAAtvB,UAAAoyB,uBAAV,WACC,IAAIxS,EAAgBhhB,KAAK4zB,mBAAmB5zB,KAAKshB,OAC7CthB,KAAK6zB,YACR7zB,KAAK8zB,SAAS9zB,KAAKshB,MAAON,GAAO,GAElChhB,KAAK+zB,sBACL/zB,KAAKg0B,gBAAgBh0B,KAAK6zB,WAAY7S,IAO7B0P,EAAAtvB,UAAA2yB,oBAAV,WACC,GAAI/zB,KAAKkvB,cAAe,CACvB,IAAI+E,GAAO,EAEX9pB,EAAA,aAAmBnK,KAAKshB,MAAMjX,WAAY,SAAC/I,GAC1C,OAAkC,GAA9B6J,EAAA,MAAY7J,EAAKmC,MAAO,IAAuC,GAA5B0H,EAAA,MAAY7J,EAAKkC,IAAK,KAC5DywB,GAAO,GACA,KAIT9pB,EAAA,aAAmBnK,KAAK6hB,MAAMxX,WAAY,SAAC/I,GAC1C,OAAkC,GAA9B6J,EAAA,MAAY7J,EAAKmC,MAAO,IAAuC,GAA5B0H,EAAA,MAAY7J,EAAKkC,IAAK,KAC5DywB,GAAO,GACA,KAKJj0B,KAAKk0B,iBACTD,GAAO,GAGJA,EACHj0B,KAAKkvB,cAAchK,OAGnBllB,KAAKkvB,cAAcrJ,SASZ6K,EAAAtvB,UAAA8yB,eAAV,WACC,IAAIrR,GAAoB,EAOxB,OANA1Y,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnC,IAAKA,EAAOuY,SAEX,OADAA,GAAW,GACJ,IAGFA,GAOE6N,EAAAtvB,UAAAuyB,uBAAV,WACC,IAAI3S,EAAgBhhB,KAAK4zB,mBAAmB5zB,KAAK6hB,OAE7C7hB,KAAKm0B,YACRn0B,KAAK8zB,SAAS9zB,KAAK6hB,MAAOb,GAAO,GAElChhB,KAAK+zB,sBACL/zB,KAAKg0B,gBAAgBh0B,KAAKm0B,WAAYnT,IAS7B0P,EAAAtvB,UAAA4yB,gBAAV,SAA0BI,EAAsBpT,GAC3CoT,IACHA,EAAUC,kBACVD,EAAU3wB,MAAQud,EAAMvd,MACxB2wB,EAAU5wB,IAAMwd,EAAMxd,MAajBktB,EAAAtvB,UAAAwyB,mBAAP,SAA0BU,GACzB,IAAI7wB,EACAD,EAmBJ,OAjBA2G,EAAA,KAAWmqB,EAAKjqB,WAAY,SAAC/I,GAC5B,IAAIizB,EAAYjzB,EAAKmC,MACjB+wB,EAAUlzB,EAAKkC,IAEflC,EAAKoC,SAASC,WACjB4wB,EAAY,EAAIjzB,EAAKkC,IACrBgxB,EAAU,EAAIlzB,EAAKmC,SAGf2J,EAAA,SAAe3J,IAAW8wB,EAAY9wB,KAC1CA,EAAQ8wB,KAEJnnB,EAAA,SAAe5J,IAASgxB,EAAUhxB,KACtCA,EAAMgxB,MAIC/wB,MAAOA,EAAOD,IAAKA,IAStBktB,EAAAtvB,UAAA+xB,YAAP,SAAmBzvB,GAClB,IAAIpC,EAAOoC,EAASpC,KAChBoC,EAAS4pB,UACZhsB,EAAK2rB,OAASjtB,KAAKkxB,iBACnB5vB,EAAKoxB,YAGLpxB,EAAK2rB,OAASjtB,KAAKsxB,oBACnBhwB,EAAKgtB,UAEFhtB,EAAKoC,UACRpC,EAAKoC,SAAS+wB,mBAUT/D,EAAAtvB,UAAAiyB,YAAP,SAAmB3vB,GAClB,IAAIpC,EAAOoC,EAASpC,KAChBoC,EAAS4pB,UACZhsB,EAAK2rB,OAASjtB,KAAK+xB,mBACnBzwB,EAAKgtB,WAGLhtB,EAAK2rB,OAASjtB,KAAK0xB,kBACnBpwB,EAAKoxB,WAEFpxB,EAAKoC,UACRpC,EAAKoC,SAAS+wB,mBAUN/D,EAAAtvB,UAAAqyB,YAAV,SAAsBnyB,GAAtB,IAAAxB,EAAAE,KAEKsB,aAAgBiI,GACnBvJ,KAAK00B,WAAWhd,UAAUpW,GAG3B,IAAIoC,EAAyBpC,EAAKoC,SAElCA,EAASixB,cAAc1H,OAASjtB,KAAKmqB,cACrCzmB,EAASixB,cAAcrG,SAEvB5qB,EAASkxB,eAAe3H,OAASjtB,KAAKmqB,cACtCzmB,EAASkxB,eAAelC,UACxBhvB,EAASkxB,eAAe1wB,OAAS,GAEjC5C,EAAKuzB,YAAY,IAAInX,EAAA,EAAS,WAC7B5d,EAAKg1B,UAAUpT,YAAYpgB,MAG5BtB,KAAKmqB,cAAc/L,OAAOC,GAAG,iBAAkB,WAC1Cve,EAAKi1B,QACRzzB,EAAKiH,uBAEJjH,GAAM,IAQVb,OAAA+B,eAAWkuB,EAAAtvB,UAAA,aAAX,WAOC,OANKpB,KAAKg1B,SACTh1B,KAAKg1B,OAAS,IAAI5iB,EAAA,EAClBpS,KAAKg1B,OAAO5W,OAAOC,GAAG,WAAYre,KAAKszB,aAActzB,MAAM,GAC3DA,KAAKg1B,OAAO5W,OAAOC,GAAG,UAAWre,KAAKi1B,kBAAmBj1B,MAAM,IAGzDA,KAAKg1B,wCAMHtE,EAAAtvB,UAAA6zB,kBAAV,SAA4B/M,GAC3B,IAAI5mB,EAAO4mB,EAAM+H,SACjBjwB,KAAK80B,UAAUpT,YAAYpgB,GACvBA,EAAK4zB,aACR5zB,EAAKmgB,WASPhhB,OAAA+B,eAAWkuB,EAAAtvB,UAAA,aAAX,WAOC,OANKpB,KAAKm1B,SACTn1B,KAAKm1B,OAAS,IAAI/iB,EAAA,EAClBpS,KAAKm1B,OAAO/W,OAAOC,GAAG,WAAYre,KAAK0zB,aAAc1zB,MAAM,GAC3DA,KAAKm1B,OAAO/W,OAAOC,GAAG,UAAWre,KAAKi1B,kBAAmBj1B,MAAM,IAGzDA,KAAKm1B,wCAUNzE,EAAAtvB,UAAA0tB,kBAAP,SAAyB5G,GACxB,IACCroB,EAAAuB,UAAM0tB,kBAAiB/uB,KAAAC,KAACkoB,GACxB,IAAI5d,EAAmB4d,EAAM+G,SAC7B3kB,EAAOC,MACPD,EAAOE,WAEYkD,GAAfpD,EAAOwD,OACVxD,EAAOwD,KAAO9N,KAAKo1B,OAAOnR,aAGNvW,GAAjBpD,EAAO6gB,SACV7gB,EAAO6gB,OAAS7gB,EAAOwD,MAGzB,MAAO0R,GACNxf,KAAK0f,mBAAmBF,KAS1B/e,OAAA+B,eAAWkuB,EAAAtvB,UAAA,cA6BX,WACC,OAAOpB,KAAKq1B,aA9Bb,SAAkBC,GACbt1B,KAAKq1B,SAAWC,IACft1B,KAAKq1B,SACRr1B,KAAKu1B,cAAcv1B,KAAKq1B,SAGzBr1B,KAAKq1B,QAAUC,EAEXA,IAEHt1B,KAAK+J,WAAWC,KAAKsrB,GACrBA,EAAOhzB,MAAQtC,KACfs1B,EAAOrI,OAASjtB,KAAK6xB,iBACrByD,EAAOlX,OAAOC,GAAG,wBAAyBre,KAAKw1B,2BAA4Bx1B,MAAM,GACjFs1B,EAAOlX,OAAOC,GAAG,cAAere,KAAKy1B,sBAAuBz1B,MAAM,GAClEs1B,EAAOlX,OAAOC,GAAG,YAAare,KAAK01B,oBAAqB11B,MAAM,GAC9Ds1B,EAAOlX,OAAOC,GAAG,aAAcre,KAAK21B,qBAAsB31B,MAAM,GAChEs1B,EAAOlX,OAAOC,GAAG,UAAWre,KAAK41B,oBAAqB51B,MAAM,GAC5Ds1B,EAAOlX,OAAOC,GAAG,WAAYre,KAAK61B,mBAAoB71B,MAAM,GAC5Ds1B,EAAOlX,OAAOC,GAAG,mBAAoBre,KAAK81B,qBAAsB91B,MAAM,GACtEs1B,EAAOlX,OAAOC,GAAG,SAAUre,KAAK+1B,iBAAkB/1B,MAAM,GACxDs1B,EAAOpxB,OAASyQ,OAAO0d,iBAAmB,qCAiBnC3B,EAAAtvB,UAAA40B,aAAV,WACC,OAAO,IAAI1L,GASLoG,EAAAtvB,UAAAo0B,2BAAP,WAEC,IAAIF,EAASt1B,KAAKs1B,OAElB,GAAIA,EAAOpS,UAAYoS,EAAOnS,SAAU,CACvC,IAAIH,EAAoBhjB,KAAKs1B,OAAOtS,UAChCC,EAAoBjjB,KAAKs1B,OAAOrS,UAEpCjjB,KAAKi2B,mBACJv0B,EAAGshB,EACHlhB,EAAGmhB,IAGJ,IAAIiT,OAAU,EACVrK,EAAeyJ,EAAOzJ,aACvBA,IACCA,EAAaxX,UAAYwX,EAAathB,QACxC2rB,EAAarK,EAAarhB,OAExBqhB,EAAaxX,UAAYwX,EAAarhB,QACxC0rB,EAAarK,EAAathB,QAI5BvK,KAAKm2B,gBAAgBn2B,KAAKshB,MAAO0B,EAAWkT,GAC5Cl2B,KAAKm2B,gBAAgBn2B,KAAK6hB,MAAOoB,EAAWiT,KASvCxF,EAAAtvB,UAAA20B,iBAAP,WACC/1B,KAAKo2B,kBAAkBp2B,KAAKshB,OAC5BthB,KAAKo2B,kBAAkBp2B,KAAK6hB,OAC5B7hB,KAAKo2B,kBAAkBp2B,KAAKsK,QAE5BtK,KAAK2yB,sBAQCjC,EAAAtvB,UAAAuxB,mBAAP,WACCxoB,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnCA,EAAO+Y,uBAUFqN,EAAAtvB,UAAAg1B,kBAAP,SAAyBC,GACxBlsB,EAAA,KAAWksB,EAAQhsB,WAAY,SAACisB,GAC/BA,EAAOxT,YAAY,MAcd4N,EAAAtvB,UAAA60B,kBAAP,SAAyBhzB,GAAzB,IAAAnD,EAAAE,KAEC,GAAKiD,EAAL,CAOA,IAAIszB,EAAUtW,EAAA,kBAA0Bve,GAAI,GAAKI,GAAI,IAAO9B,KAAKmqB,eAC7DqM,EAAcvW,EAAA,kBAA0Bve,EAAG1B,KAAKmqB,cAAcrjB,WAAa,GAAKhF,EAAG9B,KAAKmqB,cAAcljB,YAAc,IAAOjH,KAAKmqB,eAEhIsM,KACAC,EAAM,EACV12B,KAAKsK,OAAOoC,KAAK,SAACpC,GAGjB,IAAI1I,EAAQ0I,EAAOmR,sBAAsBxY,EAASvB,EAAGuB,EAASnB,GAC3DF,GACF0I,EAAO/I,QAAQo1B,WAAYj1B,EAAG,EAAGI,EAAG,EAAGkF,MAAOlH,EAAKgH,WAAYI,OAAQpH,EAAKmH,cAGzErF,GAASuJ,EAAA,cAAoBvJ,GAASF,EAAG60B,EAAQ70B,EAAGI,EAAGy0B,EAAQz0B,EAAGkF,MAAOwvB,EAAY90B,EAAI60B,EAAQ70B,EAAGwF,OAAQsvB,EAAY10B,EAAIy0B,EAAQz0B,MACvI20B,EAAazsB,MAAOpI,MAAOA,EAAO0I,OAAQA,IAC1CosB,GAAO90B,EAAME,KAKf20B,EAAaG,KAAK,SAACpR,EAAGzY,GACrB,OAAIyY,EAAE5jB,MAAME,EAAIiL,EAAEnL,MAAME,EAChB,EAEC0jB,EAAE5jB,MAAME,EAAIiL,EAAEnL,MAAME,GACpB,EAGD,IAIT,IAAI+0B,EAAWH,EAAMD,EAAalyB,OAC9B6d,EAAOnC,EAAA,oBAA4Bve,EAAG,EAAGI,EAAG,GAAK9B,KAAK82B,aAAaC,cAAcj1B,EAErF,GAAI20B,EAAalyB,OAAS,EAAG,CAE5B,IAAIyyB,EAAMT,EAAQz0B,EACdm1B,EAAST,EAAY10B,EAIrBo1B,GAFWjX,EAAA,uBAA+Bve,EAAG,EAAGI,EAAGk1B,GAAOh3B,OAEhD,GAEd,GAAI62B,EAAWG,GAAOC,EAASD,GAAO,EAErC,IADA,IAAIG,EAAaF,EACRhrB,EAAIwqB,EAAalyB,OAAS,EAAG0H,GAAK,EAAGA,IAAK,CAClD,IACI1K,GADA+I,EAASmsB,EAAaxqB,GAAG3B,QACR/I,QACjB61B,EAASX,EAAaxqB,GAAGrK,MAAME,EAWnC,GATAP,EAAQo1B,WAAYj1B,EAAG,EAAGI,GAAIsgB,EAAMpb,MAAOhH,KAAK8G,WAAYI,OAAQiwB,EAAa/U,IAE7E7gB,EAAQgB,SACXhB,EAAQc,WAGTd,EAAQ+sB,UACR6I,EAAalX,EAAA,kBAA0Bve,EAAG,EAAGI,EAAGP,EAAQmD,MAAM3C,OAASR,EAAQQ,OAASq1B,EAAS71B,EAAQ81B,gBAAkB91B,GAASO,IAElHsgB,EAAM,CACvB8U,GAAU,EACV,OAKH,GAAIL,GAAYG,GAAOC,EAASD,GAAO,GAAKE,EAE3C,IADA,IAAII,EAAQN,EACI3qB,GAAPJ,EAAI,EAASwqB,EAAalyB,QAAQ0H,EAAII,EAAKJ,IAAK,CACxD,IAAI3B,EAASmsB,EAAaxqB,GAAG3B,OACzB8sB,EAASX,EAAaxqB,GAAGrK,MAAME,GAC/BP,EAAU+I,EAAO/I,SACbo1B,WAAYj1B,EAAG,EAAGI,EAAGw1B,EAAOtwB,MAAOhH,KAAK8G,WAAYI,OAAQ+vB,IAEhE11B,EAAQgB,SACXhB,EAAQc,WAGTd,EAAQ+sB,SAERgJ,EAAQrX,EAAA,kBAA0Bve,EAAG,EAAGI,EAAGP,EAAQmD,MAAM3C,OAASR,EAAQmD,MAAMkJ,eAAiBrM,EAAQQ,OAASq1B,EAAS71B,EAAQg2B,mBAAqBh2B,GAASO,SAvFnK9B,KAAKsK,OAAOoC,KAAK,SAACpC,GACjBA,EAAOwY,iBAsGH4N,EAAAtvB,UAAA+0B,gBAAP,SAAuB7B,EAAkBrxB,EAAkBu0B,GAA3D,IAAA13B,EAAAE,KACCmK,EAAA,KAAWmqB,EAAKjqB,WAAY,SAAC/I,GACzBA,GAAQk2B,IACN13B,EAAKoL,UAAU3G,OAAS,GAAKjD,EAAK4J,UAAU3G,OAAS,IACxDjD,EAAKma,sBAAsBxY,MAaxBytB,EAAAtvB,UAAAq2B,gBAAP,SAAuBn2B,EAAwC0f,GAE9D,GAAK1f,EAAL,CAIA,IAAImC,EACAD,EACAG,EAAWrC,EAAKoC,SAASC,SAEzBrC,EAAKoC,oBAAoBotB,EAAA,IAC5B9P,EAAQ7V,EAAA,YAAkB6V,IAGvBrd,GACHwH,EAAA,YAAkB6V,GAElBvd,EAAQ,EAAInC,EAAKkC,IACjBA,EAAM,EAAIlC,EAAKmC,QAGfA,EAAQnC,EAAKmC,MACbD,EAAMlC,EAAKkC,KAGZ,IAAIiL,EAAqBjL,EAAMC,EAE/B,OACCA,MAAOA,EAAQud,EAAMvd,MAAQgL,EAC7BjL,IAAKC,EAAQud,EAAMxd,IAAMiL,KAUjBiiB,EAAAtvB,UAAAs0B,oBAAV,SAA8BxN,GAC7B,IAAIoN,EAAmBt1B,KAAKs1B,OACxB5K,EAAW4K,EAAO5K,SACtB,GAAgB,SAAZA,GAAmC,UAAZA,EAAsB,CAChD,IAAI6B,EAAiB+I,EAAO/I,OACxBA,GAAUvsB,KAAKshB,MAAM/c,OAAS,KACjCgoB,EAASvsB,KAAKy3B,gBAAgBz3B,KAAKshB,MAAMnV,SAAS,GAAIogB,IAC/CmL,SAAW,QAClB13B,KAAK8zB,SAAS9zB,KAAKshB,MAAOiL,IAI5B,GAAgB,SAAZ7B,GAAmC,UAAZA,EAAsB,CAChD,IAAI8B,EAAiB8I,EAAO9I,OACxBA,GAAUxsB,KAAK6hB,MAAMtd,OAAS,KACjCioB,EAASxsB,KAAKy3B,gBAAgBz3B,KAAK6hB,MAAM1V,SAAS,GAAIqgB,IAC/CkL,SAAW,QAClB13B,KAAK8zB,SAAS9zB,KAAK6hB,MAAO2K,IAI5BxsB,KAAK+1B,oBASIrF,EAAAtvB,UAAAu0B,qBAAV,SAA+BzN,GAC9B,IAAI3d,EAAQvK,KAAKshB,MAAMnV,SAAS,GAC5B5B,IACHvK,KAAK23B,iBAAoBl0B,MAAO8G,EAAM9G,MAAOD,IAAK+G,EAAM/G,MAGzD,IAAIgH,EAAQxK,KAAK6hB,MAAM1V,SAAS,GAC5B3B,IACHxK,KAAK43B,iBAAoBn0B,MAAO+G,EAAM/G,MAAOD,IAAKgH,EAAMhH,OAShDktB,EAAAtvB,UAAAy0B,mBAAV,SAA6B3N,GAC5B,IACIwC,EADmB1qB,KAAKs1B,OACN5K,SAEtB,GAAI1qB,KAAK63B,gBAA8B,QAAZnN,GAAkC,SAAZA,GAAsB,CACtE,IACIoN,EAAQ,GADRC,EAAc/3B,KAAK63B,eAEPp0B,MAAQ,IACvBq0B,EAAQC,EAAYt0B,OAEjBs0B,EAAYv0B,IAAM,IACrBs0B,EAAQC,EAAYv0B,IAAM,GAE3BxD,KAAK8zB,SAAS9zB,KAAKshB,OAAS7d,MAAOs0B,EAAYt0B,MAAQq0B,EAAOt0B,IAAKu0B,EAAYv0B,IAAMs0B,IAAS,GAAO,GACrG93B,KAAK63B,mBAAgBnqB,EACrB1N,KAAK23B,qBAAkBjqB,EAExB,GAAI1N,KAAKg4B,gBAA8B,QAAZtN,GAAkC,SAAZA,GAAsB,CACtE,IAAIqN,EAEAD,EAAQ,GAFRC,EAAc/3B,KAAKg4B,eAGPv0B,MAAQ,IACvBq0B,EAAQC,EAAYt0B,OAEjBs0B,EAAYv0B,IAAM,IACrBs0B,EAAQC,EAAYv0B,IAAM,GAG3BxD,KAAK8zB,SAAS9zB,KAAK6hB,OAASpe,MAAOs0B,EAAYt0B,MAAQq0B,EAAOt0B,IAAKu0B,EAAYv0B,IAAMs0B,IAAS,GAAO,GACrG93B,KAAKg4B,mBAAgBtqB,EACrB1N,KAAK43B,qBAAkBlqB,IAIfgjB,EAAAtvB,UAAA00B,qBAAV,WACC91B,KAAK63B,mBAAgBnqB,EACrB1N,KAAK23B,qBAAkBjqB,GAQdgjB,EAAAtvB,UAAAw0B,oBAAV,SAA8B1N,GAC7B,IAAIoN,EAAmBt1B,KAAKs1B,OACxB5K,EAAW4K,EAAO5K,SAClBC,EAAY2K,EAAO3K,UACvB,GAAI3qB,KAAK23B,kBAAgC,QAAZjN,GAAkC,SAAZA,GAAsB,CACxE,IAAIuN,EAAgBj4B,KAAK23B,gBACrB3W,EAAQsU,EAAO/I,OAEf9d,EAAawpB,EAAcz0B,IAAMy0B,EAAcx0B,MAC/Cq0B,EAAQ9W,EAAMvd,MAEdy0B,EAAWj2B,KAAK8M,KAAK4b,EAAWmN,EAAQG,EAAcx0B,OACtD00B,EAASl2B,KAAKwJ,IAAIuV,EAAMvd,MAAQw0B,EAAcz0B,IAAK,EAAImnB,GAEvDuN,GAAY,IACfC,EAASD,EAAWzpB,GAGjB0pB,GAAU,IACbD,EAAWC,EAAS1pB,GAGrB,IAAI2pB,GACH30B,MAAOy0B,EACP10B,IAAK20B,GAENn4B,KAAK63B,cAAgBO,EAErBp4B,KAAK8zB,SAAS9zB,KAAKshB,MAAO8W,GAAU,GAAO,EAAO9C,EAAO3K,WAG1D,GAAI3qB,KAAK43B,kBAAgC,QAAZlN,GAAkC,SAAZA,GAAsB,CACpEuN,EAAgBj4B,KAAK43B,gBACrB5W,EAAQsU,EAAO9I,OAEf/d,EAAawpB,EAAcz0B,IAAMy0B,EAAcx0B,MAC/Cq0B,EAAQ9W,EAAMvd,MAEdy0B,EAAWj2B,KAAK8M,KAAK4b,EAAWmN,EAAQG,EAAcx0B,OACtD00B,EAASl2B,KAAKwJ,IAAIuV,EAAMvd,MAAQw0B,EAAcz0B,IAAK,EAAImnB,GAEvDuN,GAAY,IACfC,EAASD,EAAWzpB,GAGjB0pB,GAAU,IACbD,EAAWC,EAAS1pB,GAGjB2pB,GACH30B,MAAOy0B,EACP10B,IAAK20B,GAENn4B,KAAKg4B,cAAgBI,EACrBp4B,KAAK8zB,SAAS9zB,KAAK6hB,MAAOuW,GAAU,GAAO,EAAO9C,EAAO3K,WAG1D3qB,KAAK+1B,oBASIrF,EAAAtvB,UAAAq0B,sBAAV,SAAgCvN,KAahCznB,OAAA+B,eAAWkuB,EAAAtvB,UAAA,kBA4BX,WACC,OAAOpB,KAAKq4B,iBA7Bb,SAAsBjE,GAAtB,IAAAt0B,EAAAE,KACKA,KAAKq4B,aACRr4B,KAAKu1B,cAAcv1B,KAAKq4B,aAEzBr4B,KAAKq4B,YAAcjE,EAEfA,IACHp0B,KAAK+J,WAAWC,KAAKoqB,GACrBA,EAAUnH,OAASjtB,KAAKkxB,iBACxBkD,EAAUkE,UAAU7F,YAAa,EACjC2B,EAAUmE,QAAQ9F,YAAa,EAC/B2B,EAAU9F,SACV8F,EAAUrE,YAAc,aACxBqE,EAAUhW,OAAOC,GAAG,eAAgBre,KAAKw4B,uBAAwBx4B,MAAM,GAEvEo0B,EAAU5yB,QAAQC,IAAI,gBAAiB,SAACg3B,GACvC,IAAIluB,EAAQzK,EAAKwhB,MAAMnV,SAAS,GAIhC,OAHI5B,IACHkuB,EAAI91B,MAAQ4H,EAAMyG,iBAAiBynB,EAAIx1B,WAEjCw1B,sCAiBVh4B,OAAA+B,eAAWkuB,EAAAtvB,UAAA,kBA4BX,WACC,OAAOpB,KAAK04B,iBA7Bb,SAAsBtE,GAAtB,IAAAt0B,EAAAE,KACKA,KAAK04B,aACR14B,KAAKu1B,cAAcv1B,KAAK04B,aAEzB14B,KAAK04B,YAActE,EAEfA,IACHp0B,KAAK+J,WAAWC,KAAKoqB,GACrBA,EAAUnH,OAASjtB,KAAK+xB,mBACxBqC,EAAUkE,UAAU7F,YAAa,EACjC2B,EAAUmE,QAAQ9F,YAAa,EAC/B2B,EAAU1B,UACV0B,EAAUrE,YAAc,WACxBqE,EAAUhW,OAAOC,GAAG,eAAgBre,KAAK24B,uBAAwB34B,MAAM,GAEvEo0B,EAAU5yB,QAAQC,IAAI,gBAAiB,SAACg3B,GACvC,IAAIjuB,EAAQ1K,EAAK+hB,MAAM1V,SAAS,GAIhC,OAHI3B,IACHiuB,EAAI91B,MAAQ6H,EAAMwG,iBAAiBynB,EAAIx1B,WAEjCw1B,sCAkBA/H,EAAAtvB,UAAAo3B,uBAAV,SAAiCtQ,GAChC,IAAIkM,EAAuBlM,EAAMvmB,OAC7Bqf,EAAQoT,EAAUpT,MACN,GAAbA,EAAMxd,MACRwd,EAAM0W,SAAW,OAEA,GAAf1W,EAAMvd,QACRud,EAAM0W,SAAW,SAElB1W,EAAQhhB,KAAK8zB,SAAS9zB,KAAKshB,MAAON,GAClCoT,EAAUwE,SAAS5X,IASV0P,EAAAtvB,UAAAu3B,uBAAV,SAAiCzQ,GAChC,IAAIkM,EAAuBlM,EAAMvmB,OAC7Bqf,EAAgBhhB,KAAK8zB,SAAS9zB,KAAK6hB,MAAOuS,EAAUpT,OACxDoT,EAAUwE,SAAS5X,IAWV0P,EAAAtvB,UAAA0yB,SAAV,SAAmBQ,EAA8CtT,EAAe9F,EAAqB5O,EAAiBusB,GACrH,IAAIC,GAAsBr1B,MAAO,EAAGD,IAAK,GA2BzC,OAzBAxD,KAAKi2B,oBAEAj2B,KAAK+4B,aACT5uB,EAAA,KAAWmqB,EAAKjqB,WAAY,SAAC/I,GAO5B,GANIA,EAAKoC,SAASC,WACjBqd,EAAQ7V,EAAA,YAAkB6V,IAG3B1f,EAAKwhB,YAAY,GAEbxW,EAAO,CACV,IAAI0sB,EAAOhY,EAAMxd,IAAMwd,EAAMvd,MAC7Bud,EAAMvd,MAAQnC,EAAKoO,cAAcsR,EAAMvd,MAAQ,KAAQ,GACvDud,EAAMxd,IAAMwd,EAAMvd,MAAQu1B,EAG3B,IAAIC,EAAoB33B,EAAKkS,KAAKwN,EAAO9F,EAAWA,EAAW2d,GAE3Dv3B,EAAKoC,SAASC,WACjBs1B,EAAY9tB,EAAA,YAAkB8tB,IAG/BH,EAAYG,IAGPH,GAYRr4B,OAAA+B,eAAWkuB,EAAAtvB,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK8C,iBAAiB,cAAeH,GAAO,oCAgBnC+tB,EAAAtvB,UAAA83B,YAAV,SAAsBhR,GACrB,IAAIiC,EAAgBnqB,KAAKmqB,cACrBgP,EAAmBlZ,EAAA,mBAA0BiI,EAAMtmB,MAAO5B,KAAKo5B,cAAep5B,KAAK82B,aAAauC,UAChGC,EAAYrZ,EAAA,iBAAwBkZ,EAAUhP,GAC9CoP,EAAQrR,EAAMqR,MAAMz3B,EAEpB03B,EAAiBx5B,KAAK4zB,mBAAmB5zB,KAAKshB,OAC9CmY,EAAiBz5B,KAAK4zB,mBAAmB5zB,KAAK6hB,OAM9C+P,EAAqB5xB,KAAK4xB,mBAE9B,GAA0B,QAAtBA,GAAsD,SAAtBA,EAA+B,CAElE,IAAI8H,EAAcF,EAAOh2B,IAAMg2B,EAAO/1B,MAElCk2B,EAAY13B,KAAK8M,KARN,EAQsByqB,EAAO/1B,MAV7B,IAUiD81B,EAAQ,KACpEK,EAAU33B,KAAKwJ,IAAI+tB,EAAOh2B,IAXf,IAWiC+1B,EAAQ,IAAK,GAEzDI,GAAa,IAChBC,EAAUD,EAAYD,GAGnBE,GAAW,IACdD,EAAYC,EAAUF,GAGvB15B,KAAK8zB,SAAS9zB,KAAKshB,OAAS7d,MAAOk2B,EAAWn2B,IAAKo2B,IAGpD,GAA0B,QAAtBhI,GAAsD,SAAtBA,EAA+B,CAClE2H,IAAU,EACV,IAAIM,EAAcJ,EAAOj2B,IAAMi2B,EAAOh2B,MAElCq2B,EAAY73B,KAAK8M,KA1BN,EA0BsB0qB,EAAOh2B,MA5B7B,IA4BiD81B,EAAQ,KACpEQ,EAAU93B,KAAKwJ,IAAIguB,EAAOj2B,IA7Bf,IA6BiC+1B,EAAQ,IAAK,GAEzDO,GAAa,IAChBC,EAAUD,EAAYD,GAGnBE,GAAW,IACdD,EAAYC,EAAUF,GAGvB75B,KAAK8zB,SAAS9zB,KAAK6hB,OAASpe,MAAOq2B,EAAWt2B,IAAKu2B,IAGpD,GAA0B,SAAtBnI,GAAuD,UAAtBA,EAAgC,CACpE,IAAI9M,EAAYwU,EAAU53B,EAAIyoB,EAAc6P,SAExCL,EAAY13B,KAAK8M,KA3CN,EA2CsByqB,EAAO/1B,MA7C7B,IA6CiD81B,EAAQ,IAAMzU,GAC9E6U,EAAY13B,KAAKwJ,IAAIkuB,EAAW7U,GAE5B8U,EAAU33B,KAAKwJ,IAAI+tB,EAAOh2B,IAhDf,IAgDiC+1B,EAAQ,KAAO,EAAIzU,GAAY,GAC/E8U,EAAU33B,KAAK8M,IAAI6qB,EAAS9U,GAE5B9kB,KAAK8zB,SAAS9zB,KAAKshB,OAAS7d,MAAOk2B,EAAWn2B,IAAKo2B,IAGpD,GAA0B,SAAtBhI,GAAuD,UAAtBA,EAAgC,CACpE,IAAI7M,EAAYuU,EAAUx3B,EAAIqoB,EAAc8P,UAExCH,EAAY73B,KAAK8M,KAvDN,EAuDsB0qB,EAAOh2B,MAzD7B,IAyDiD81B,EAAQ,KAAO,EAAIxU,IACnF+U,EAAY73B,KAAKwJ,IAAIquB,EAAW/U,GAE5BgV,EAAU93B,KAAKwJ,IAAIguB,EAAOj2B,IA5Df,IA4DiC+1B,EAAQ,IAAMxU,EAAW,GACzEgV,EAAU93B,KAAK8M,IAAIgrB,EAAShV,GAE5B/kB,KAAK8zB,SAAS9zB,KAAK6hB,OAASpe,MAAOq2B,EAAWt2B,IAAKu2B,MAYrDt5B,OAAA+B,eAAWkuB,EAAAtvB,UAAA,0BAoBX,WACC,OAAOpB,KAAK0C,iBAAiB,2BArB9B,SAA8BC,GAEzB3C,KAAK8C,iBAAiB,qBAAsBH,KAClC,QAATA,GACH3C,KAAKk6B,oBAAsBl6B,KAAKmqB,cAAc/L,OAAOC,GAAG,QAASre,KAAKk5B,YAAal5B,MAAM,GACzFA,KAAK+J,WAAWC,KAAKhK,KAAKk6B,sBAGtBl6B,KAAKk6B,sBACRl6B,KAAKmqB,cAAcgQ,WAAY,EAC/Bn6B,KAAKmqB,cAAciQ,WAAY,EAC/Bp6B,KAAKk6B,oBAAoBzY,6CAqBnBiP,EAAAtvB,UAAAi5B,qBAAV,SAA+Brd,GAA/B,IAAAld,EAAAE,KAaC,OAXAgd,EAASnd,EAAAuB,UAAMi5B,qBAAoBt6B,KAAAC,KAACgd,GAGpC7S,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnC0S,EAASld,EAAKw6B,yBACbtd,EACK1S,EAAO0U,YACX,QAAS,QAAS,YAAa,gBAI3BhC,GAWE0T,EAAAtvB,UAAAm5B,uBAAV,SAAiCvd,GAAjC,IAAAld,EAAAE,KAYC,OAXAgd,EAASnd,EAAAuB,UAAMi5B,qBAAoBt6B,KAAAC,KAACgd,GAGpC7S,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnC0S,EAASld,EAAKw6B,yBACbtd,EACK1S,EAAO0U,YACX,SAAU,SAAU,aAAc,iBAI9BhC,GASD0T,EAAAtvB,UAAAulB,cAAP,SAAqBC,GAEpB,GAAIA,EAAQ,CAGX,IAAItF,KACAO,KAGJ,GAAIzU,EAAA,SAAewZ,EAAOtF,QAAUlU,EAAA,QAAcwZ,EAAOtF,OACxD,IAAK,IAAIrV,EAAI,EAAGI,EAAMua,EAAOtF,MAAM/c,OAAQ0H,EAAII,EAAKJ,IAAK,CACxD,IAAK2a,EAAOtF,MAAMrV,GAAG4X,KACpB,MAAM1E,MAAM,yCAA2ClT,EAAI,MAEnDmB,EAAA,SAAewZ,EAAOtF,MAAMrV,GAAe,cACnDqV,EAAMtX,MACL+W,WAAY6F,EAAOtF,MAAMrV,GAAe,WACxCnB,MAAOmB,WAEA2a,EAAOtF,MAAMrV,GAAgB,YAIxC,GAAImB,EAAA,SAAewZ,EAAO/E,QAAUzU,EAAA,QAAcwZ,EAAO/E,OACxD,IAAS5V,EAAI,EAAGI,EAAMua,EAAO/E,MAAMtd,OAAQ0H,EAAII,EAAKJ,IAAK,CACxD,IAAK2a,EAAO/E,MAAM5V,GAAG4X,KACpB,MAAM1E,MAAM,yCAA2ClT,EAAI,MAEnDmB,EAAA,SAAewZ,EAAO/E,MAAM5V,GAAe,cACnD4V,EAAM7X,MACL+W,WAAY6F,EAAO/E,MAAM5V,GAAe,WACxCnB,MAAOmB,WAEA2a,EAAO/E,MAAM5V,GAAgB,YAMxC,GAAImB,EAAA,SAAewZ,EAAOtc,SAAW8C,EAAA,QAAcwZ,EAAOtc,QACzD,IAAS2B,EAAI,EAAGI,EAAMua,EAAOtc,OAAO/F,OAAQ0H,EAAII,EAAKJ,IACpD2a,EAAOtc,OAAO2B,GAAG4X,KAAO+C,EAAOtc,OAAO2B,GAAG4X,MAAQ,aAwBnD,GAnBIzW,EAAA,SAAewZ,EAAO0O,UAAYloB,EAAA,SAAewZ,EAAO0O,OAAOzR,QAClE+C,EAAO0O,OAAOzR,KAAO,YAIlBzW,EAAA,SAAewZ,EAAOiN,cAAgBzmB,EAAA,SAAewZ,EAAOiN,WAAWhQ,QAC1E+C,EAAOiN,WAAWhQ,KAAO,aAGtBzW,EAAA,SAAewZ,EAAOuN,cAAgB/mB,EAAA,SAAewZ,EAAOuN,WAAWtQ,QAC1E+C,EAAOuN,WAAWtQ,KAAO,aAG1BhkB,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,GAMhB/E,EAAMtd,OACT,IAAS0H,EAAI,EAAGI,EAAMwV,EAAMtd,OAAQ0H,EAAII,EAAKJ,IAC5CjM,KAAK6hB,MAAM1V,SAAS0V,EAAM5V,GAAGnB,OAAO8b,QACnC7F,WAAYc,EAAM5V,GAAG8U,YAIxB,GAAIO,EAAM/c,OACT,IAAS0H,EAAI,EAAGI,EAAMiV,EAAM/c,OAAQ0H,EAAII,EAAKJ,IAC5CjM,KAAKshB,MAAMnV,SAASmV,EAAMrV,GAAGnB,OAAO8b,QACnC7F,WAAYO,EAAMrV,GAAG8U,cAkBhB2P,EAAAtvB,UAAAo5B,YAAV,SAAsBhV,EAAWzY,GAChC,OAAIyY,GAAKzY,EACD,EAGM,cAALyY,EACD,EAEM,cAALzY,GACA,EAEK,cAALyY,EACD,EAEM,cAALzY,GACA,EAEK,UAALyY,EACD,EAEM,UAALzY,GACA,EAGDlN,EAAAuB,UAAMo5B,YAAWz6B,KAAAC,KAACwlB,EAAGzY,IASpB2jB,EAAAtvB,UAAAq5B,aAAV,WACC,OAAO,IAAIld,GAWZ9c,OAAA+B,eAAWkuB,EAAAtvB,UAAA,qBAaX,WACC,OAAOpB,KAAK06B,oBAdb,SAAyBC,GAAzB,IAAA76B,EAAAE,KACCA,KAAK06B,eAAiBC,EAClBA,GACHA,EAAOvc,OAAOC,GAAG,MAAO,WACvBve,EAAKg0B,SAASh0B,EAAKwhB,OAAS7d,MAAO,EAAGD,IAAK,IAC3C1D,EAAKg0B,SAASh0B,EAAK+hB,OAASpe,MAAO,EAAGD,IAAK,UACzCkK,GAAW,oCAiBTgjB,EAAAtvB,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACfxb,KAAKshB,MAAM/F,SAASC,EAAO8F,OAC3BthB,KAAK6hB,MAAMtG,SAASC,EAAOqG,OAE3B7hB,KAAKkvB,cAAc3T,SAASC,EAAO0T,gBAO7BwB,EAAAtvB,UAAAue,YAAP,WACC9f,EAAAuB,UAAMue,YAAW5f,KAAAC,MAEjB,IAAI6zB,EAAa7zB,KAAK6zB,WAClBA,GAAcA,aAAsBhG,GACvCgG,EAAW9F,eAAepO,cAG3B,IAAIwU,EAAan0B,KAAKm0B,WAClBA,GAAcA,aAAsBtG,GACvCsG,EAAWpG,eAAepO,cAG3B3f,KAAKshB,MAAM5U,KAAK,SAACpL,GAChBA,EAAKqe,gBAGN3f,KAAK6hB,MAAMnV,KAAK,SAACpL,GAChBA,EAAKqe,iBASA+Q,EAAAtvB,UAAAw5B,QAAP,SAAeC,EAAgCC,GAC9Cj7B,EAAAuB,UAAMw5B,QAAO76B,KAAAC,KAAC66B,EAAaC,GACvB96B,KAAK6zB,sBAAsBhG,GAC9B7tB,KAAK6zB,WAAW9F,eAAe6M,QAAQC,EAAaC,GAEjD96B,KAAKm0B,sBAAsBtG,GAC9B7tB,KAAKm0B,WAAWpG,eAAe6M,QAAQC,EAAaC,IAGvDpK,EArrDA,CAA6BD,EAAA,GA6rD7B9nB,EAAA,EAAShD,kBAA2B,QAAIqoB,kBC13DxC+M,EAAA,SAAAl7B,GA0CC,SAAAm7B,IAAA,IAAAl7B,EAGCD,EAAAE,KAAAC,OAAOA,KACPF,EAAKK,UAAY,oBAGjBL,EAAKM,YAAa,EAClBN,EAAKqoB,qBAAsB,EAC3BroB,EAAKI,OAAS,OAGd,IAAI+6B,EAAan7B,EAAKirB,YAAY/M,EAAA,GAClCle,EAAKm7B,WAAaA,EAClBA,EAAWxT,aAAc,EACzBwT,EAAWhd,WAAWne,EAAK6H,MAAMlG,IAAI,SACrCw5B,EAAW76B,YAAa,EACxBN,EAAKiK,WAAWC,KAAKixB,GAIrB,IAAIC,EAAep7B,EAAKirB,YAAY/M,EAAA,UACpCle,EAAKo7B,aAAeA,EACpBA,EAAazT,aAAc,EAC3ByT,EAAajd,WAAWne,EAAK6H,MAAMlG,IAAI,SACvCy5B,EAAa96B,YAAa,EAC1BN,EAAKiK,WAAWC,KAAKkxB,KAwDvB,OA5HuC/yB,EAAA,EAAA6yB,EAAAn7B,GAgF/Bm7B,EAAA55B,UAAA+5B,YAAP,SAAmBC,EAAkBC,EAAuBC,EAAqBC,GAChF,IAAKv7B,KAAKyN,SACT,GAAI2tB,EAAO72B,OAAS,GAAK82B,EAAY92B,OAAS,EAAG,CAEhD,IAAIV,EAAeod,EAAA,QAAevf,EAAG05B,EAAO,GAAG15B,EAAI,GAAKI,EAAGs5B,EAAO,GAAGt5B,EAAI,KAASmf,EAAA,OAAama,EAAO,IAAM,IAAII,EAAA,EAAmBF,EAAaC,GAAaE,OAAOL,GAE1I,GAAtBp7B,KAAKkB,eAAyD,GAAnClB,KAAKk7B,aAAah6B,gBAIhDlB,KAAKk7B,aAAar3B,KAAOA,IAGtB7D,KAAKgrB,YAAc,GAAKhrB,KAAKi7B,WAAWjQ,YAAc,KACzDnnB,GAAQod,EAAA,OAAaoa,EAAY,IAAM,IAAIG,EAAA,EAAmBF,EAAaC,GAAaE,OAAOJ,GAC/Fx3B,GAAQod,EAAA,OAAama,EAAO,IAC5Bv3B,GAAQod,EAAA,YAERjhB,KAAKi7B,WAAWp3B,KAAOA,QAIxB7D,KAAKi7B,WAAWp3B,KAAO,GACvB7D,KAAKk7B,aAAar3B,KAAO,IAUrBm3B,EAAA55B,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GAEf,IAAIkgB,EAAc17B,KAAKk7B,aACvBhmB,EAAA,eAAuBsG,EAAQkgB,EAAYtyB,WAAY4U,EAAA,GACvD0d,EAAY1Q,YAAc,EAE1B,IAAI2Q,EAAc37B,KAAKi7B,WACvB/lB,EAAA,eAAuBsG,EAAQmgB,EAAYvyB,WAAY4U,EAAA,GACvD2d,EAAYz6B,cAAgB,GAE9B85B,EA5HA,CAAuC3Q,EAAA,GAoIvC1hB,EAAA,EAAShD,kBAAqC,kBAAIo1B,0CCtJlDa,GAAA,SAAA/7B,GAuBC,SAAAg8B,IAAA,IAAA/7B,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,uBAKnB,OA9BwCgI,EAAA,EAAA0zB,EAAAh8B,GA8BxCg8B,EA9BA,CAAwC3f,GA4GxC4f,GAAA,SAAAj8B,GAoFC,SAAAk8B,IAAA,IAAAj8B,EACCD,EAAAE,KAAAC,OAAOA,YAbDF,EAAAk8B,YAAsB,GAe5Bl8B,EAAKm8B,SAAW,IAAI7pB,EAAA,EAAgCtS,EAAKo8B,iBACzDp8B,EAAKm8B,SAASt7B,SAASw7B,eAAgB,EAEvCr8B,EAAKiK,WAAWC,KAAK,IAAIoI,EAAA,EAAatS,EAAKm8B,WAC3Cn8B,EAAKiK,WAAWC,KAAKlK,EAAKm8B,SAASt7B,UAEnCb,EAAKs8B,kBAAoB,IAAIjyB,EAAA,aAAsCrK,EAAKm8B,SAAU,WAAM,OAAAn8B,EAAKm8B,SAASpmB,WACtG/V,EAAKs8B,kBAAkBC,gBAAiB,EAExCv8B,EAAKK,UAAY,aAEjBL,EAAKoB,cAAgB,EACrBpB,EAAKkrB,YAAc,EAEnBlrB,EAAKw8B,SAAU,EAEfx8B,EAAKy8B,SAAW,EAChBz8B,EAAK08B,SAAW,EAEhB18B,EAAK28B,kBAAoB38B,EAAKie,cAAcgN,YAAYV,EAAA,GACxDvqB,EAAK28B,kBAAkBr8B,YAAa,EAMpCN,EAAKmyB,iBAAiBS,UAEtB5yB,EAAKqB,eAyiBP,OA5pBgCgH,EAAA,EAAA4zB,EAAAl8B,GA0HrBk8B,EAAA36B,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MACtBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,iBAOnC2oB,EAAA36B,UAAA86B,cAAV,WACC,OAAO,IAAInB,GASFgB,EAAA36B,UAAAyI,eAAV,WACC,OAAO,IAAI+xB,IAUFG,EAAA36B,UAAAme,wBAAV,SAAkCrT,GAGjC,GAAIlM,KAAK6iB,UAAY7iB,KAAKkjB,QAAS,CAElC,IAAI1Y,EAAcxK,KAAK2d,OAAO0D,MAC1B9W,EAAcvK,KAAKyd,OAAO4D,MAE1Bqb,EAAqC18B,KAAKkL,UAAUiB,SAASD,EAASpB,MAAQ,GAIlF,GAFAoB,EAASpC,UAAY9J,KAEjBA,KAAKqU,UAAY9J,GAChBC,aAAiBwH,EAAA,EAAW,CAC/B,IAAI2qB,EAAmBnyB,EAAMkQ,UACzBgiB,IACHC,EAAWD,EAAiB/qB,OAAe,OAAEirB,cAI9C1wB,EAAS2wB,gBAAgB,SAAUF,EAAU,GAC7CzwB,EAAS2wB,gBAAgB,SAAU3wB,EAASyF,OAAO0K,OAAO1Z,OAEtD4H,aAAiB0H,IACpB/F,EAAS4wB,mBAAmB,SAAU,GAAK,GAC3C5wB,EAAS4wB,mBAAmB,QAAS,KAIxC,GAAI98B,KAAKqU,UAAY7J,GAChBD,aAAiByH,EAAA,EAAW,CAC/B,IAAI+qB,EAAmBxyB,EAAMmQ,UACzBgiB,IACHK,EAAWL,EAAiB/qB,OAAe,OAAEirB,cAG9C1wB,EAAS2wB,gBAAgB,SAAUE,EAAU,GAC7C7wB,EAAS2wB,gBAAgB,SAAU3wB,EAASyF,OAAOyK,OAAOzZ,OAEtD6H,aAAiByH,IACpB/F,EAAS4wB,mBAAmB,SAAU,GAAK,GAC3C5wB,EAAS4wB,mBAAmB,QAAS,QAcnCf,EAAA36B,UAAAiiB,kBAAP,SAAyBnX,GACxBrM,EAAAuB,UAAMiiB,kBAAiBtjB,KAAAC,KAACkM,GAEpBA,GAAYA,EAAS8wB,UACxBh9B,KAAKi9B,mBAAqB/wB,EAAS8wB,UAS9BjB,EAAA36B,UAAAiB,SAAP,eAAAvC,EAAAE,KAECH,EAAAuB,UAAMiB,SAAQtC,KAAAC,MAEdA,KAAKo8B,kBAAkBlP,QAEvBltB,KAAKk9B,YAAYl9B,KAAKm9B,oBAEtBhzB,EAAA,KAAWnK,KAAK+gB,WAAW1W,WAAY,SAAC2W,GACvClhB,EAAKo9B,YAAYp9B,EAAKq9B,mBAAoBnc,KAG3C7W,EAAA,KAAWnK,KAAKo8B,kBAAkB/xB,WAAY,SAAC2yB,GAC9CA,EAAQ5wB,YAAa,KASb2vB,EAAA36B,UAAAg8B,UAAV,WAOC,IANA,IAAIvyB,EAAqB7K,KAAK6K,WAC1BE,EAAmB/K,KAAK+K,SAKnBkB,EAAIjM,KAAK6K,WAAa,EAAGoB,GAAK,EAAGA,IAAK,CAE9C,IADIC,EAAWlM,KAAKkL,UAAUiB,SAASF,KACvBC,EAASuY,SAASzkB,KAAK4d,gBAAkB1R,EAASuY,SAASzkB,KAAK6d,eAAgB,CAC/FhT,EAAaoB,EACb,OAKOA,EAAIjM,KAAK+K,SAAlB,IAAK,IAAuBsB,EAAMrM,KAAKkL,UAAU3G,OAAQ0H,EAAII,EAAKJ,IAAK,CACtE,IAAIC,EACJ,IADIA,EAAWlM,KAAKkL,UAAUiB,SAASF,KACvBC,EAASuY,SAASzkB,KAAK4d,gBAAkB1R,EAASuY,SAASzkB,KAAK6d,eAAgB,CAC/F9S,EAAWkB,EAAI,EACf,OAIFjM,KAAKm9B,mBAAqBtyB,EAC1B7K,KAAKq9B,iBAAmBtyB,GAUfgxB,EAAA36B,UAAA87B,YAAV,SAAsBI,EAAmBrE,GACxC,IAIIsE,EAJAnC,KAEArwB,EAAmB/K,KAAKq9B,iBAGxBG,GAA6B,EAE7BR,EAA6Bh9B,KAAKo8B,kBAAkBqB,WACxDT,EAAQ5wB,YAAa,EAEjB6sB,GACH+D,EAAQ/P,OAASgM,EAAUyE,SAC3BxoB,EAAA,eAAuB+jB,EAAUyE,SAAUV,EAAShf,EAAA,KAGpD9I,EAAA,eAAuBlV,KAAMg9B,EAAShf,EAAA,GACtCgf,EAAQpN,QAAQna,QAChBunB,EAAQ/P,OAASjtB,KAAKy8B,mBAGvB,IAAK,IAAIxwB,EAAYqxB,EAAWrxB,EAAIlB,EAAUkB,IAAK,CAElD,IAAIC,EAA8BlM,KAAKkL,UAAUiB,SAASF,GAc1D,GAbAC,EAAS8wB,QAAUA,EAEf9wB,EAASyxB,gBAER1xB,GAAKqxB,EACRt9B,KAAK49B,wBAAwB1xB,EAAS9C,WAAY4zB,GAIlDQ,EAAoBx9B,KAAK49B,wBAAwB1xB,EAAS9C,WAAY4zB,GAAS,IAI7E9wB,EAASuY,SAASzkB,KAAK4d,gBAAkB1R,EAASuY,SAASzkB,KAAK6d,eACnE7d,KAAK69B,UAAUzC,EAAQlvB,EAAUlM,KAAK+f,OAAQ/f,KAAKmgB,YAE/C,CAEJ,GAAIlU,GAAKqxB,EACR,SAOA,IAJuBt9B,KAAKs8B,QAId,CACbiB,EAAatxB,EACb,OAOH,GAFAsxB,EAAatxB,EAETuxB,EACH,MAIFx9B,KAAK89B,aAAad,EAAS5B,EAAQkC,EAAWC,EAAYtE,IAajD8C,EAAA36B,UAAAy8B,UAAV,SAAoBzC,EAAkBlvB,EAA6B6T,EAAgBI,EAAgBgG,GAClG,IAAIvkB,EAAQ5B,KAAK0jB,SAASxX,EAAU6T,EAAQI,EAAQjU,EAAS+M,iBAAiB8G,GAAS7T,EAAS+M,iBAAiBkH,IAC5GgG,IACJja,EAAStK,MAAQA,GAElBw5B,EAAOpxB,KAAKpI,IAaHm6B,EAAA36B,UAAA08B,aAAV,SAAuBd,EAA4B5B,EAAkBkC,EAAmBC,EAAoBtE,GAE3G,IAAIoC,KAEJ,GAAIr7B,KAAKgf,WAAsChf,KAAKqgB,cACnDrgB,KAAKgf,WAAsChf,KAAKsgB,cAChDtgB,KAAKke,QACL,IAAK,IAAIjS,EAAYsxB,EAAYtxB,GAAKqxB,EAAWrxB,IAAK,CACrD,IAAIC,EAA8BlM,KAAKkL,UAAUiB,SAASF,GACtDC,EAASuY,SAASzkB,KAAK4d,gBAAkB1R,EAASuY,SAASzkB,KAAK6d,gBACnE7d,KAAK69B,UAAUxC,EAAanvB,EAAUlM,KAAKggB,WAAYhgB,KAAKogB,YAAY,OAItE,CACJ,IAAI/L,EAAiBrU,KAAKqU,SACtB5B,EAAgB2oB,EAAO72B,OACvBgG,EAAcvK,KAAKuK,MACnBC,EAAcxK,KAAKwK,MAEnB6J,GAAY9J,GACf8wB,EAAYrxB,MAAOtI,EAAG05B,EAAO3oB,EAAQ,GAAG/Q,EAAGI,EAAG0I,EAAM8F,UAAUxO,IAC9Du5B,EAAYrxB,MAAOtI,EAAG05B,EAAO,GAAG15B,EAAGI,EAAG0I,EAAM8F,UAAUxO,MAGtDu5B,EAAYrxB,MAAOtI,EAAG6I,EAAM+F,UAAU5O,EAAGI,EAAGs5B,EAAO3oB,EAAQ,GAAG3Q,IAC9Du5B,EAAYrxB,MAAOtI,EAAG6I,EAAM+F,UAAU5O,EAAGI,EAAGs5B,EAAO,GAAGt5B,KAIxD9B,KAAKm7B,YAAY6B,EAAS5B,EAAQC,GAE9BkC,EAAav9B,KAAKq9B,iBAAmB,GACxCr9B,KAAKk9B,YAAYK,EAAYtE,IAWrB8C,EAAA36B,UAAA+5B,YAAV,SAAsB6B,EAA4B5B,EAAkBC,GACnE2B,EAAQ7B,YAAYC,EAAQC,EAAar7B,KAAKu8B,SAAUv8B,KAAKw8B,WAepDT,EAAA36B,UAAAw8B,wBAAV,SAAkCG,EAA0Cf,EAA4BgB,GACvG,IAAIC,GAAmB,EAyCvB,OAvCA/oB,EAAA,KAAa6oB,EAAgB,SAACG,EAAcv7B,GAE3C,GAAIyK,EAAA,SAAezK,GAAQ,CAC1B,IAAIw7B,EAAqBnB,EAASkB,GAC9BE,OAAe,EAGfD,IAEFC,EADGD,EAAa5oB,SACE4oB,EAAa5oB,WAGb4oB,GAIpB,IAAIE,OAAQ,EAER17B,IAEF07B,EADG17B,EAAM4S,SACE5S,EAAM4S,WAGN5S,GAITw7B,GAAgBx7B,QAA6B+K,GAAnB0wB,QAA4C1wB,GAAZ2wB,GAAyBD,GAAmBC,IAIpGL,IACEhB,EAASkB,GAAgBv7B,GAEhCs7B,GAAU,MAKNA,GAiBRx9B,OAAA+B,eAAWu5B,EAAA36B,UAAA,eASX,WACC,OAAOpB,KAAK0C,iBAAiB,gBAV9B,SAAmBC,GACf3C,KAAK8C,iBAAiB,UAAWH,IACnC3C,KAAK6C,8CAgCPpC,OAAA+B,eAAWu5B,EAAA36B,UAAA,gBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAR9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCA+B1ClC,OAAA+B,eAAWu5B,EAAA36B,UAAA,gBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAR9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCA4BnCo5B,EAAA36B,UAAAk9B,mBAAP,SAA0BC,GAA1B,IAAAz+B,EAAAE,KAEKyrB,EAAY8S,EAAOz3B,WACnB6kB,EAAY4S,EAAOt3B,YAEvBs3B,EAAOC,kBAEP,IAAIv9B,EAAas9B,EAAOxT,YAAY0T,EAAA,GASpC,GARAx9B,EAAKwmB,aAAc,EAEnBvS,EAAA,eAAuBlV,KAAMiB,EAAM+c,EAAA,GAEnC/c,EAAKy9B,GAAKjT,EACVxqB,EAAKa,EAAI6pB,EAAI,EACb1qB,EAAKiiB,SAAU,EAEXljB,KAAKgrB,YAAc,EAAG,CACzB,IAAIld,EAAkBywB,EAAOxT,YAAY4T,EAAA,GAEzCzpB,EAAA,eAAuBlV,KAAM8N,EAAMkQ,EAAA,GACnClQ,EAAK9G,MAAQykB,EACb3d,EAAK5G,OAASykB,EACd7d,EAAKhM,EAAI,EACTgM,EAAK5M,cAAgB,EACrB4M,EAAKoV,SAAU,EAEfjiB,EAAKa,EAAI,EAGV,IAAI88B,EAAiCL,EAAOryB,SAC5C0yB,EAAeC,MAAQ7+B,KAAKmrB,OAC5ByT,EAAeE,UAAY9+B,KAAK8N,KAEhC3D,EAAA,aAAmBnK,KAAK+jB,QAAQ1Z,WAAY,SAACia,GAC5C,GAAIA,EAAOya,mBAAoB,CAG9B,IAAIC,GAAqB,EAQzB,GAPA70B,EAAA,KAAWma,EAAO2a,SAAS50B,WAAY,SAAC60B,GACvC,GAAIA,aAAiBC,EAAA,EAEpB,OADAH,GAAY,GACL,KAIJA,EAAW,CACf,IAAI3P,EAAwB/K,EAAO+K,QAsBnC,OArBAA,EAAMpC,OAASsR,EACflP,EAAMjvB,YAAa,EACnBivB,EAAMhL,iBAAc3W,EACpB2hB,EAAM3tB,EAAI+pB,EAAI,EACV3rB,EAAKkrB,YAAc,EACtBqE,EAAMvtB,EAAI,EAGVutB,EAAMvtB,EAAI6pB,EAAI,EAEf0D,EAAMnM,SAAU,EAGX9V,EAAA,SAAeiiB,EAAMvhB,QACzBuhB,EAAMvhB,KAAOhO,EAAKgO,MAGdV,EAAA,SAAeiiB,EAAMlE,UACzBkE,EAAMlE,OAASrrB,EAAKqrB,SAGd,OASJ4Q,EAAA36B,UAAAue,YAAP,WACC9f,EAAAuB,UAAMue,YAAW5f,KAAAC,MACjBA,KAAKi8B,SAASxmB,SAEhBsmB,EA5pBA,CAAgCxe,GAoqBhC5U,EAAA,EAAShD,kBAA8B,WAAIm2B,GAC3CnzB,EAAA,EAAShD,kBAAsC,mBAAIi2B,GC3xBnD,IAAAwD,GAAA,SAAAv/B,GAYC,SAAAw/B,IAAA,IAAAv/B,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,sBAEjBL,EAAK4c,YAAY,QAAS,EAAG,GAC7B5c,EAAK4c,YAAY,QAAS,EAAG,GAE7B5c,EAAK4c,YAAY,YAAa,EAAG,GACjC5c,EAAK4c,YAAY,YAAa,EAAG,GAEjC5c,EAAKqB,eAGP,OAzByCgH,EAAA,EAAAk3B,EAAAx/B,GAyBzCw/B,EAzBA,CAAyCzD,IAoFzC0D,GAAA,SAAAz/B,GA+CC,SAAA0/B,IAAA,IAAAz/B,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,cACjBL,EAAK0/B,aAAc,EACnB1/B,EAAKqB,eA+IP,OAlMiCgH,EAAA,EAAAo3B,EAAA1/B,GA2DzB0/B,EAAAn+B,UAAAiB,SAAP,WAGKrC,KAAKsC,MAAMC,SACdvC,KAAKsC,MAAMD,WAGZxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,OASLu/B,EAAAn+B,UAAAyI,eAAV,WACC,OAAO,IAAIu1B,IAeFG,EAAAn+B,UAAAsiB,SAAV,SAAmBxX,EAA+B6a,EAAcC,EAAclC,EAAoBC,EAAoBkC,EAAoBC,GACpID,IACJA,EAAY,UAERC,IACJA,EAAY,UAGb,IAAIxlB,EAAY1B,KAAKwK,MAAM2F,KAAKjE,EAAU8a,EAAMjC,EAAWmC,GACvDplB,EAAY9B,KAAKwK,MAAM+F,KAAKrE,EAAU8a,EAAMjC,EAAWmC,GAEvD1mB,EAAiB2K,EAAA,aAAoBzJ,EAAGA,EAAGI,EAAGA,IAGrC,GAAVtB,IACFA,EAAS,MAGV,IAAI4C,EAAgBpD,KAAKuK,MAAMiG,SAAStE,EAAU6a,EAAMjC,EAAWmC,GAE/D5mB,EAAaL,KAAKsC,MAAMjC,WACxBC,EAAWN,KAAKsC,MAAMhC,SAG1B,OAAI8C,EAAQ/C,GAAc+C,EAAQ9C,OACjC,GAGSoB,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,KAerDm8B,EAAAn+B,UAAAy8B,UAAV,SAAoBzC,EAAkBlvB,EAA6B6T,EAAgBI,EAAgBgG,GAClG,IAAIvkB,EAAQ5B,KAAK0jB,SAASxX,EAAU6T,EAAQI,EAAQjU,EAASlD,UAAU+W,GAAS7T,EAASlD,UAAUmX,IAC/Fve,GACHw5B,EAAOpxB,KAAKpI,IASJ29B,EAAAn+B,UAAA0f,YAAV,WACC,IAAIpd,EAAmD1D,KAAKwK,MAAM9G,SAClE,OAAOud,EAAA,IAAUvd,EAASrD,WAAYqD,EAASpD,SAAWoD,EAASrD,WAAYqD,EAAS1B,YAAa0B,EAAS2B,mBAWrGk6B,EAAAn+B,UAAA+5B,YAAV,SAAsB6B,EAA4B5B,EAAkBC,GACnE,IACI33B,EADa1D,KAAKwK,MACsC9G,SAExD1D,KAAKw/B,aAAoE,KAArDv9B,KAAKyX,IAAIhW,EAASpD,SAAWoD,EAASrD,cAEzDL,KAAKgf,WAAsChf,KAAKqgB,cACnDrgB,KAAKgf,WAAsChf,KAAKsgB,cAChDtgB,KAAKke,WACLkd,EAAOpxB,KAAKoxB,EAAO,IACfC,EAAY92B,OAAS,GACxB82B,EAAYoE,QAAQpE,EAAYA,EAAY92B,OAAS,KAIxD1E,EAAAuB,UAAM+5B,YAAWp7B,KAAAC,KAACg9B,EAAS5B,EAAQC,IAUpC56B,OAAA+B,eAAW+8B,EAAAn+B,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK8C,iBAAiB,cAAeH,GAAO,oCAS9C48B,EAlMA,CAAiCzD,IA0MjCnzB,EAAA,EAAShD,kBAA+B,YAAI25B,GAC5C32B,EAAA,EAAShD,kBAAuC,oBAAIy5B,oBCvOpDM,GAAA,SAAA7/B,GAkCC,SAAA8/B,IAAA,IAAA7/B,EAGCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,cACjBL,EAAKU,OAASC,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACtBX,EAAKiD,YAActC,OAAA+mB,EAAA,EAAA/mB,CAAQ,GAG3BX,EAAKqB,aAELrB,EAAKoO,UAAOR,IAwbd,OAreiCvF,EAAA,EAAAw3B,EAAA9/B,GAuDzB8/B,EAAAv+B,UAAA2D,aAAP,SAAoBnD,GACnB,IAAIpB,EAAS2K,EAAA,YAAkBvJ,GACnBuJ,EAAA,SAAevJ,GAK3B,OAAIpB,EAASR,KAAK4/B,gBAAkB,GAAKp/B,EAASR,KAAKqF,iBAAmB,GAW3E5E,OAAA+B,eAAWm9B,EAAAv+B,UAAA,kBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,mBAR9B,SAAsBC,GACrB3C,KAAK8C,iBAAiB,aAAcH,GAAO,oCAe5ClC,OAAA+B,eAAWm9B,EAAAv+B,UAAA,gBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAR9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCAWhCg9B,EAAAv+B,UAAA0nB,gBAAV,SAA0BlnB,GAEpB5B,KAAKuK,SAAUvK,KAAKuK,OAAWvK,KAAKuK,MAAMuT,uBAAwB9d,KAAKuK,MAAMhJ,QAAQkM,WACzFzN,KAAK6/B,YAAY7/B,KAAK4B,OAElB5B,KAAKwK,SAAUxK,KAAKwK,OAAWxK,KAAKwK,MAAMsT,uBAAwB9d,KAAKwK,MAAMjJ,QAAQkM,WACzFzN,KAAK8/B,YAAY9/B,KAAK4B,OAGvB5B,KAAK8pB,kBACLjqB,EAAAuB,UAAM0nB,gBAAe/oB,KAAAC,KAAC4B,IAQb+9B,EAAAv+B,UAAAy+B,YAAV,SAAsBj+B,GAErB,IAAIpB,EAAiBR,KAAKgC,YACtB3B,EAAqBL,KAAKK,WAC1BC,EAAmBN,KAAKM,SACxByC,EAAsB/C,KAAKqF,iBAE/B,GAAI7E,EAAS,GAAK4M,EAAA,SAAe/M,IAAe+M,EAAA,SAAe9M,IAAa8M,EAAA,SAAerK,GAAc,CACxG,IAAIK,EAAgB+H,EAAA,gBAAsBA,EAAA,SAAevJ,GAAQvB,EAAYC,GACzEuD,OAAI,EAER,GAAI7D,KAAKkrB,OAASlrB,KAAKkrB,MAAMhI,QAAS,CAKrC,GAHAljB,KAAKkrB,MAAMlG,QAAStjB,EAAG,EAAGI,EAAG,IAGzB9B,KAAKuK,OAASvK,KAAK6sB,eAAgB,CAEtC,IAAIxV,EAAqBrX,KAAKuK,MAAMuiB,sBAChCxV,EAAmBtX,KAAKuK,MAAMwiB,oBAElC,GAAI1V,GAAcC,EAAU,CAC3B,IAAIyoB,EAAyB50B,EAAA,gBAAsBA,EAAA,SAAekM,GAAahX,EAAYC,GAGvFiD,EAFuB4H,EAAA,gBAAsBA,EAAA,SAAemM,GAAWjX,EAAYC,GAEtDy/B,EAI7B1/B,EAAaC,EACZiD,EAAM,IACTA,GAAO,KAKJA,EAAM,IACTA,GAAO,KAITH,GAASG,EAAM,EAEfM,EAAOod,EAAA,QAAevf,EAAGqB,EAAcoI,EAAA,IAAU/H,GAAQtB,EAAGiB,EAAcoI,EAAA,IAAU/H,KACjF6d,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,KACnE6d,EAAA,MAAY7d,EAAOG,EAAK/C,GACxBygB,EAAA,QAAevf,EAAGqB,EAAcoI,EAAA,IAAU/H,EAAQG,GAAMzB,EAAGiB,EAAcoI,EAAA,IAAU/H,EAAQG,KAC3F0d,EAAA,MAAY7d,EAAQG,GAAMA,EAAKR,IAK/Bc,IACJA,EAAOod,EAAA,QAAevf,EAAGqB,EAAcoI,EAAA,IAAU/H,GAAQtB,EAAGiB,EAAcoI,EAAA,IAAU/H,KAAY6d,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,MAGpKpD,KAAKkrB,MAAMrnB,KAAOA,KAUX87B,EAAAv+B,UAAA0+B,YAAV,SAAsBl+B,GACrB,GAAI5B,KAAKsrB,OAAStrB,KAAKsrB,MAAMpI,QAAS,CACrC,IAAI7iB,EAAaL,KAAKK,WAClBC,EAAWN,KAAKM,SAChBs/B,EAAkB5/B,KAAK4/B,gBACvBp/B,EAAS2K,EAAA,WAAiBA,EAAA,YAAkBvJ,GAAQ,EAAG5B,KAAK4/B,iBAChE,GAAIxyB,EAAA,SAAe5M,IAAW4M,EAAA,SAAe/M,GAAa,CACzDL,KAAKsrB,MAAMtG,QAAStjB,EAAG,EAAGI,EAAG,IAE7B,IAAI+B,OAAI,EACJN,EAAcjD,EAAWD,EAE7B,GAAIL,KAAKwK,OAASxK,KAAKgtB,eAAgB,CAEtC,IAAI3V,EAAqBrX,KAAKwK,MAAMsiB,sBAChCxV,EAAmBtX,KAAKwK,MAAMuiB,oBAElC,GAAI1V,GAAcC,EAAU,CAC3B,IAAIvU,EAAsBoI,EAAA,WAAiBA,EAAA,YAAkBkM,GAAa,EAAGuoB,GAC7Ep/B,EAAS2K,EAAA,WAAiBA,EAAA,YAAkBmM,GAAW,EAAGsoB,GAE1D/7B,EAAOod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU9K,GAAayB,EAAGtB,EAAS2K,EAAA,IAAU9K,KAAiB4gB,EAAA,MAAY5gB,EAAYkD,EAAK/C,GAC7HqD,GAAQod,EAAA,QAAevf,EAAGqB,EAAcoI,EAAA,IAAU7K,GAAWwB,EAAGiB,EAAcoI,EAAA,IAAU7K,KAAe2gB,EAAA,MAAY3gB,GAAWiD,EAAKR,IAIhIc,IACJA,EAAOod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU9K,GAAayB,EAAGtB,EAAS2K,EAAA,IAAU9K,KAAiB4gB,EAAA,MAAY5gB,EAAYC,EAAWD,EAAYG,IAGhJR,KAAKsrB,MAAMznB,KAAOA,KAUd87B,EAAAv+B,UAAA0oB,gBAAP,WACC,GAAI9pB,KAAKwrB,eAAgB,CACxB,IAAInD,EAAoBroB,KAAKqoB,UAE7B,GAAIA,EAAW,CAEd,IAAIzmB,EAAgB5B,KAAK4B,MAErBpB,EAAiBR,KAAKgC,YACtB49B,EAA0B5/B,KAAK4/B,gBAC/B78B,EAAsB/C,KAAKqF,iBAE3BhF,EAAqB4B,KAAKwJ,IAAIzL,KAAKK,WAAYL,KAAKM,UACpDA,EAAmB2B,KAAK8M,IAAI/O,KAAKK,WAAYL,KAAKM,UAElD0/B,EAAoB70B,EAAA,gBAAsBA,EAAA,SAAekd,GAAYhoB,EAAYC,GACjF8C,EAAgB+H,EAAA,gBAAsBA,EAAA,SAAevJ,GAAQvB,EAAYC,GAEzE2/B,EAAqB90B,EAAA,YAAkBkd,GAC3C,GAAI4X,EAAaL,EAAiB,CAEjC,IAAIM,EAAgB/0B,EAAA,WAAiBA,EAAA,YAAkBvJ,GAAQ,EAAGg+B,GAElE5/B,KAAKmgC,WAAa/8B,EAElB,IAAIS,EAAeod,EAAA,QAAevf,EAAG,EAAGI,EAAG,IAEvCs+B,EAAkBj1B,EAAA,IAAU60B,GAC5BK,EAAkBl1B,EAAA,IAAU60B,GAE5B59B,EAAc+I,EAAA,IAAU/H,GACxBlB,EAAciJ,EAAA,IAAU/H,GAExBsnB,EAAW1qB,KAAK0qB,SACJ,SAAZA,GAAmC,WAAZA,EAC1B7mB,GAAQod,EAAA,QAAevf,EAAGlB,EAAS6/B,EAASv+B,EAAGtB,EAAS4/B,IAAanf,EAAA,MAAY+e,EAAW58B,EAAQ48B,EAAWx/B,GAAUygB,EAAA,QAAevf,EAAGqB,EAAcb,EAAKJ,EAAGiB,EAAcX,IAAS6e,EAAA,MAAY7d,EAAO48B,EAAY58B,EAAOL,GAE1M,SAAZ2nB,GAAmC,WAAZA,EAC/B7mB,EAAOod,EAAA,QAAevf,EAAGw+B,EAAgB/0B,EAAA,IAAU9K,GAAayB,EAAGo+B,EAAgB/0B,EAAA,IAAU9K,KAAiB4gB,EAAA,MAAY5gB,EAAYC,EAAWD,EAAY6/B,GAAiBjf,EAAA,QAAevf,EAAGu+B,EAAa90B,EAAA,IAAU7K,GAAWwB,EAAGm+B,EAAa90B,EAAA,IAAU7K,KAAe2gB,EAAA,MAAY3gB,EAAUD,EAAaC,EAAU2/B,GAAchf,EAAA,YAElT,UAAZyJ,IACR7mB,EAAOod,EAAA,QAAevf,EAAGw+B,EAAgB/0B,EAAA,IAAU60B,GAAYl+B,EAAGo+B,EAAgB/0B,EAAA,IAAU60B,KAAgB/e,EAAA,MAAY+e,EAAW58B,EAAQ48B,EAAWE,GAAiBjf,EAAA,QAAevf,EAAGu+B,EAAa90B,EAAA,IAAU/H,GAAQtB,EAAGm+B,EAAa90B,EAAA,IAAU/H,KAAY6d,EAAA,MAAY7d,EAAO48B,EAAY58B,EAAO68B,GAAchf,EAAA,aAGnTjhB,KAAK8qB,UAAUjnB,KAAOA,EAEvB7D,KAAK8qB,UAAU9F,QAAStjB,EAAG,EAAGI,EAAG,OAQ1B69B,EAAAv+B,UAAA4nB,aAAV,WAGC,GADwBhpB,KAAKsC,MAClB,CACV,IAAIS,EAAc/C,KAAKqF,iBACnB7E,EAAiBR,KAAK4/B,gBAAkB78B,EAExC1C,EAAqBL,KAAKK,WAC1BC,EAAmBN,KAAKM,SAGxB0iB,GADgB7X,EAAA,gBAAsBA,EAAA,SAAenL,KAAK4B,OAAQvB,EAAYC,GACxDD,IAAeC,EAAWD,GACpDL,KAAKgjB,UAAYA,EAEjBhjB,KAAKijB,UAAY9X,EAAA,YAAkBA,EAAA,YAAkBnL,KAAK4B,OAASmB,GAAevC,EAAQ,EAAG,KASrFm/B,EAAAv+B,UAAAqoB,YAAV,SAAsB7nB,KASZ+9B,EAAAv+B,UAAAurB,uBAAV,SAAiCzE,GAChC,GAAIloB,KAAKuK,MAAMuT,qBAAsB,CACpC,IAAIvc,EAAmBvB,KAAKuK,MAAMhJ,QAClCvB,KAAK6/B,YAAY5f,EAAA,kBAA0Bve,EAAGH,EAAQM,OAAQC,EAAGP,EAAQQ,QAAU/B,SAU3E2/B,EAAAv+B,UAAAwrB,uBAAV,SAAiC1E,GAChC,GAAIloB,KAAKwK,MAAMsT,qBAAsB,CACpC,IAAIvc,EAAmBvB,KAAKwK,MAAMjJ,QAClCvB,KAAK8/B,YAAY7f,EAAA,kBAA0Bve,EAAGH,EAAQM,OAAQC,EAAGP,EAAQQ,QAAU/B,SAQ3E2/B,EAAAv+B,UAAA0qB,oBAAV,SAA8BlqB,KAUpB+9B,EAAAv+B,UAAA8qB,UAAV,WACC,IAAI7D,EAAYroB,KAAKqoB,UACrB,GAAIA,EAAW,CACd,IAAIqB,EAAkB1pB,KAAK0pB,QAG3B,GADwB1pB,KAAKsC,MAClB,CACV,IAAI9B,EAAiBR,KAAKgC,YACtB3B,EAAqBL,KAAKK,WAC1BC,EAAmBN,KAAKM,SAExB0/B,EAAoB70B,EAAA,gBAAsBA,EAAA,SAAekd,GAAYroB,KAAKK,WAAYL,KAAKM,UAC3FggC,EAAkBn1B,EAAA,gBAAsBA,EAAA,SAAeue,GAAU1pB,KAAKK,WAAYL,KAAKM,UAEvF2/B,EAAa90B,EAAA,WAAiBA,EAAA,YAAkBkd,GAAY,EAAG7nB,GAC/D+/B,EAAWp1B,EAAA,WAAiBA,EAAA,YAAkBue,GAAU,EAAGlpB,GAE3D2rB,EAAiB,EACjBM,EAAe,EAEfL,EAAiB,EACjBM,EAAe,EAEfhC,EAAW1qB,KAAK0qB,SACpB,GAAgB,SAAZA,GAAmC,WAAZA,GAAqC,UAAZA,GAAoC,YAAZA,EAAwB,CACnG,IAAInnB,EAAcjD,EAAWD,EAC7B8rB,EAAShhB,EAAA,OAAa60B,EAAY3/B,GAAckD,EAAK,GACrDkpB,EAAOthB,EAAA,OAAam1B,EAAUjgC,GAAckD,EAAK,GAGlC,SAAZmnB,GAAmC,WAAZA,GAAqC,UAAZA,GAAoC,YAAZA,IAC3E0B,EAASjhB,EAAA,MAAY80B,EAAaz/B,EAAQ,GAC1CksB,EAAOvhB,EAAA,MAAYo1B,EAAW//B,EAAQ,IAGvCR,KAAKusB,QAAW9oB,MAAOxB,KAAKwJ,IAAI0gB,EAAQM,GAAOjpB,IAAKvB,KAAK8M,IAAIod,EAAQM,IACrEzsB,KAAKwsB,QAAW/oB,MAAOxB,KAAKwJ,IAAI2gB,EAAQM,GAAOlpB,IAAKvB,KAAK8M,IAAIqd,EAAQM,IAEhD,WAAjB1sB,KAAK0qB,UAA0C,WAAjB1qB,KAAK0qB,UAA0C,YAAjB1qB,KAAK0qB,UAIpE1qB,KAAK8qB,UAAUjF,UAcZ8Z,EAAAv+B,UAAAmqB,WAAP,aAQA9qB,OAAA+B,eAAWm9B,EAAAv+B,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAO,EAAO,IAAI,oCAgB5DlC,OAAA+B,eAAWm9B,EAAAv+B,UAAA,mBAAX,WACC,OAAO6e,EAAA,sBAA6BjgB,KAAKQ,OAAQR,KAAK4/B,kDAUvDn/B,OAAA+B,eAAWm9B,EAAAv+B,UAAA,uBAAX,WACC,OAAO6e,EAAA,gBAAuBxf,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAAM0K,EAAA,IAAUnL,KAAK+pB,WAAa,EAAG/pB,KAAKgqB,YAAc,qCAS/FvpB,OAAA+B,eAAWm9B,EAAAv+B,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAO,EAAO,IAAI,oCAgBjElC,OAAA+B,eAAWm9B,EAAAv+B,UAAA,wBAAX,WAEC,IAAI2B,EAAc/C,KAAK+C,YAMvB,OAJIA,aAAuBykB,EAAA,IAC1BzkB,EAActC,OAAA+mB,EAAA,EAAA/mB,CAAQ,IAAMsC,EAAYJ,MAAQ3C,KAAKsC,MAAMk+B,sBAGrDvgB,EAAA,sBAA6Bld,EAAa/C,KAAK4/B,kBAAoB,mCASjED,EAAAv+B,UAAAuD,SAAV,SAAmB/C,GAElB,OAAOA,GAET+9B,EAreA,CAAiCrV,GA6ejC3hB,EAAA,EAAShD,kBAA+B,YAAI+5B,iCCld5Ce,GAAA,SAAA5gC,GAwCC,SAAA6gC,IAAA,IAAA5gC,EAGCD,EAAAE,KAAAC,OAAOA,YAfEF,EAAA2f,OAAS,IAAI/B,EAAA,EAKhB5d,EAAAG,gBAA0B,EAWhCH,EAAKK,UAAY,qBACjBL,EAAKM,YAAa,EAClBN,EAAKO,YAAc,GACnBP,EAAKQ,SAAW,IAChBR,EAAKyL,gBAAkB,GACvBzL,EAAK6gC,SAAW,UAChB7gC,EAAK8gC,WAAa,GAClB9gC,EAAKM,YAAa,EAClBN,EAAKI,OAAS,OAEdJ,EAAKU,OAASC,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAEtBX,EAAKmB,KAAKC,cAAgB,EAE1BpB,EAAKe,OAAOF,SAASkgC,iBAAmB,SAExC/gC,EAAKiK,WAAWC,KAAKlK,EAAK2f,QAE1B3f,EAAKqB,eA4eP,OA1iBwCgH,EAAA,EAAAu4B,EAAA7gC,GAsEhC6gC,EAAAt/B,UAAAiB,SAAP,WAEKrC,KAAKsC,OAAStC,KAAKsC,MAAMC,SAC5BvC,KAAKsC,MAAMD,WAGZxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,OAQfS,OAAA+B,eAAWk+B,EAAAt/B,UAAA,kBAAX,WACC,OAAOpB,KAAKgC,YAAchC,KAAKqF,kDAUhC5E,OAAA+B,eAAWk+B,EAAAt/B,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAO,EAAO,IAAI,oCAe5DlC,OAAA+B,eAAWk+B,EAAAt/B,UAAA,mBAAX,WACC,OAAO6e,EAAA,sBAA6BjgB,KAAKQ,OAAQR,KAAKC,kBAAoB,mCAU3EQ,OAAA+B,eAAWk+B,EAAAt/B,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAO,EAAO,IAAI,oCAejElC,OAAA+B,eAAWk+B,EAAAt/B,UAAA,wBAAX,WACC,OAAO6e,EAAA,sBAA6BjgB,KAAK+C,YAAa/C,KAAKC,kBAAoB,mCAShFQ,OAAA+B,eAAWk+B,EAAAt/B,UAAA,aAQX,WACC,OAAOpB,KAAKyf,OAAO4B,WATpB,SAAiB/e,GAChBtC,KAAKyf,OAAOkC,IAAIrf,EAAO,uCAiBjBo+B,EAAAt/B,UAAA4B,gBAAP,SAAuBC,GACtB,IAAIzC,EAAiB2K,EAAA,WAAiBnL,KAAKmD,qBAAqBF,GAAW,EAAGgf,KAC9E,OAASvgB,EAAGlB,EAAS2K,EAAA,IAAUnL,KAAK4gC,WAAY9+B,EAAGtB,EAAS2K,EAAA,IAAUnL,KAAK4gC,aAQrEF,EAAAt/B,UAAAwC,eAAP,WACC5D,KAAKiB,KAAK4C,KAAOod,EAAA,QAAevf,EAAG1B,KAAKqF,iBAAmB8F,EAAA,IAAUnL,KAAK4gC,WAAY9+B,EAAG9B,KAAKqF,iBAAmB8F,EAAA,IAAUnL,KAAK4gC,aAAgB3f,EAAA,QAAevf,EAAG1B,KAAKgC,YAAcmJ,EAAA,IAAUnL,KAAK4gC,WAAY9+B,EAAG9B,KAAKgC,YAAcmJ,EAAA,IAAUnL,KAAK4gC,aAErP,IAAItR,EAAQtvB,KAAKsB,KAAKguB,MACtBA,EAAM8C,OAAS,OACf9C,EAAMuR,iBAAmB,SACzBvR,EAAMwR,eAAiB,SACvBxR,EAAMxtB,GAAM9B,KAAKqD,WAAa,EAC9B,IAAI8D,EAAmB,GACnBnH,KAAKstB,SACHttB,KAAKwE,SACT2C,GAAY,IAITnH,KAAKwE,SACR2C,GAAY,IAGdmoB,EAAMnoB,SAAWA,GAWXu5B,EAAAt/B,UAAA0C,kBAAP,SAAyBpD,EAAYuC,EAAkBc,GACtDd,IAAuBc,EAAcd,GAAYvC,EAAKE,SACtD,IACIiD,EADAjC,EAAgB5B,KAAKgD,gBAAgBC,GAErCzC,EAAiB2K,EAAA,YAAkBvJ,GACnCvB,EAAqBL,KAAKK,WAC1BC,EAAmBN,KAAKM,SAE5B,GAAI8M,EAAA,SAAe5M,IAAWE,EAAKsD,QAAS,CAC3C,IAAI1B,EAAQtC,KAAKsC,MACbiI,EAAQjI,EAAMgf,MAAMnV,SAAS,GAC7BsG,EAAQnQ,EAAM4I,UAAU3G,OACxB+F,EAAShI,EAAMgI,OAAO6B,SAAS,GAInC,GAAqB,YAAjBnM,KAAK2gC,UAA0BluB,EAAQ,GAAKnI,GAAUC,GAASA,aAAiBhB,EAAc,CACjG,IAAIw3B,EAAex2B,EAAM7G,SAAShD,KAAKC,SAASC,SAE5CwC,EAAgBmH,EAAMiG,SAASlG,EAAOY,UAAUiB,SAAS,GAAI,YAAa40B,GAC9El9B,EAAOod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,KAG1E,IAFA,IAAI49B,EAAgB1+B,EAAM4I,UAAU3G,OAE3B0H,EAAI,EAAGA,EAAI+0B,EAAO/0B,IAC1B7I,EAAQmH,EAAMiG,SAASlG,EAAOY,UAAUiB,SAASF,GAAI,YAAa80B,GAClEl9B,GAAQod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,KAG5EA,EAAQmH,EAAMiG,SAASlG,EAAOY,UAAUiB,SAAS60B,EAAQ,GAAI,YAAaz2B,EAAM7G,SAASu9B,iBACzFp9B,GAAQod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,UAG3ES,EAAOod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU9K,GAAayB,EAAGtB,EAAS2K,EAAA,IAAU9K,KAAiB4gB,EAAA,MAAY5gB,EAAYC,EAAWD,EAAYG,EAAQA,GAExJE,EAAKmD,KAAOA,EAGb7D,KAAKmE,iBAAiBzD,EAAMuC,EAAU,EAAG,IAWnCy9B,EAAAt/B,UAAAqD,mBAAP,SAA0BC,EAA2BzB,EAAkBc,EAAqBnD,GAEtFwM,EAAA,SAAexM,KACnBA,EAAW8D,EAAM9D,UAGlBqC,IAAuBc,EAAcd,GAAYrC,EAEjD,IAAIgB,EAAgB5B,KAAKgD,gBAAgBC,GAEzCjD,KAAK4E,aAAaF,EAAO9C,GACzB5B,KAAKmE,iBAAiBO,EAAOzB,EAAUjD,KAAK6E,iBAAkB7E,KAAK8E,mBAQ7D47B,EAAAt/B,UAAA8/B,sBAAP,aAWOR,EAAAt/B,UAAA2D,aAAP,SAAoBnD,GACnB,OAAO,GAQRnB,OAAA+B,eAAWk+B,EAAAt/B,UAAA,kBAUX,WACC,OAAOpB,KAAK0C,iBAAiB,mBAX9B,SAAsBC,GAEjB3C,KAAK8C,iBAAiB,aAAcH,IACvC3C,KAAKgF,uDAgBPvE,OAAA+B,eAAWk+B,EAAAt/B,UAAA,gBAUX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAX9B,SAAoBC,GAEf3C,KAAK8C,iBAAiB,WAAYH,IACrC3C,KAAKgF,uDAgBPvE,OAAA+B,eAAWk+B,EAAAt/B,UAAA,iBAQX,WACC,OAAOpB,KAAK0C,iBAAiB,kBAT9B,SAAqBC,GACpB3C,KAAK8C,iBAAiB,YAAaqI,EAAA,eAAqBxI,IACxD3C,KAAKgF,uDAsBNvE,OAAA+B,eAAWk+B,EAAAt/B,UAAA,gBAOX,WAEC,OADiBpB,KAAKsC,MAAMgf,MAAMnV,SAAS,aACvB5C,EACZvJ,KAAK0C,iBAAiB,YAGtB,eAbT,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCA0BnC+9B,EAAAt/B,UAAA8D,qBAAP,SAA4BC,EAAuBpB,GAClD,IAUIF,EAVAwB,EAAmBrF,KAAKqF,iBACxBrD,EAAchC,KAAKqD,WAAagC,EAChCtC,EAAsBoI,EAAA,WAAiBnL,KAAKmD,qBAAqBgC,GAAgBE,EAAkBrD,GACnGxB,EAAiB2K,EAAA,WAAiBnL,KAAKmD,qBAAqBY,GAAcsB,EAAkBrD,GAG5F3B,EAAqBL,KAAKK,WAE1BkD,EADmBvD,KAAKM,SACCD,EAIzBiC,EAAQtC,KAAKsC,MACbiI,EAAQjI,EAAMgf,MAAMnV,SAAS,GAC7BsG,EAAQnQ,EAAM4I,UAAU3G,OACxB+F,EAAShI,EAAMgI,OAAO6B,SAAS,GAInC,GAAqB,YAAjBnM,KAAK2gC,UAA0BluB,EAAQ,GAAKnI,GAAUC,GAASA,aAAiBhB,EAAc,CACjG,IAAIw3B,EAAex2B,EAAM7G,SAAShD,KAAKC,SAASC,SAE5CwC,EAAgBmH,EAAMiG,SAASlG,EAAOY,UAAUiB,SAAS,GAAI,YAAa40B,GAC9El9B,EAAOod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,KAG1E,IAFA,IAAI+9B,EAAgB7+B,EAAM4I,UAAU3G,OAE3B0H,EAAI,EAAGA,EAAIk1B,EAAOl1B,IAC1B7I,EAAQmH,EAAMiG,SAASlG,EAAOY,UAAUiB,SAASF,GAAI,YAAa80B,GAClEl9B,GAAQod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,KAG5EA,EAAQmH,EAAMiG,SAASlG,EAAOY,UAAUiB,SAASg1B,EAAQ,GAAI,YAAa52B,EAAM7G,SAASu9B,iBACzFp9B,GAAQod,EAAA,QAAevf,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,KAE3ES,GAAQod,EAAA,QAAevf,EAAGqB,EAAcoI,EAAA,IAAU/H,GAAQtB,EAAGiB,EAAcoI,EAAA,IAAU/H,KAErF,IAAS6I,EAAIk1B,EAAQ,EAAGl1B,GAAK,EAAGA,IAC/B7I,EAAQmH,EAAMiG,SAASlG,EAAOY,UAAUiB,SAASF,GAAI,YAAa80B,GAClEl9B,GAAQod,EAAA,QAAevf,EAAGqB,EAAcoI,EAAA,IAAU/H,GAAQtB,EAAGiB,EAAcoI,EAAA,IAAU/H,UAItFS,EAAOod,EAAA,IAAU5gB,EAAYkD,EAAK/C,EAAQuC,GAE3C,OAAOc,GASD68B,EAAAt/B,UAAAggC,mBAAP,SAA0Bz0B,GAGzB,IAAIsN,EAAsCtN,EAAUsN,UAChDC,EAAoCvN,EAAUuN,QAC9CC,EAAsCxN,EAAUwN,UAEhD9C,EAAqB1K,EAAU0K,WAC/BC,EAAmB3K,EAAU2K,SAEjC2C,EAAUzZ,OAASyB,KAAKyX,IAAIrC,EAAWvV,GACvCoY,EAAQ1Z,OAASyB,KAAKyX,IAAIpC,EAASxV,GACnCqY,EAAU3Z,OAASyB,KAAKyX,IAAIpC,EAASxV,GACrCqY,EAAUpX,YAAcd,KAAKyX,IAAIrC,EAAWvV,IAStC4+B,EAAAt/B,UAAAigC,mBAAP,SAA0B10B,GACzBA,EAAUsN,UAAY,IAAIqnB,GAAA,EAC1B30B,EAAUuN,QAAU,IAAIonB,GAAA,EACxB30B,EAAUwN,UAAY,IAAImnB,GAAA,GAUpBZ,EAAAt/B,UAAAmgC,cAAP,WAEC,GADiBvhC,KAAKsB,KACZ,CAET,IAKIs/B,EAAoB5gC,KAAK4gC,UACzBA,EAAY,IACfA,GAAa,KAEd,IAAIY,EAAyC,YACxCZ,EAAY,IAAMA,EAAY,KAASA,EAAY,KAAOA,EAAY,OAC1EY,EAAqB,cAEtBxhC,KAAKsB,KAAKigC,cAAcC,GAAsB9/B,GAZ3B,IAYmCI,GAXnC,IAW2CkF,MAV5Cy6B,IAUwDv6B,OATxDu6B,QAoBbf,EAAAt/B,UAAAgD,kBAAP,SAAyBC,EAAgBpB,GACxC,IAAIrB,EAAgB5B,KAAKgD,gBAAgBC,GACzC,GAAIoB,EAAKL,QAAS,CACjB,IAAIZ,EAAgB+H,EAAA,eAAqBnL,KAAK4gC,UAAY,IACtDx9B,EAAQ,IAAMnB,KAAKqK,MAAMlJ,EAAQ,IACpCiB,EAAKtD,cAAe,EAGpBsD,EAAKtD,cAAe,EAErB,IAAIuD,GAAcD,EAAKE,OACnBF,EAAKG,SACRF,IAAe,GAEhBD,EAAKR,KAAOod,EAAA,QAAevf,EAAG,EAAGI,EAAG,IAAOmf,EAAA,QAAevf,EAAG4C,EAAa6G,EAAA,IAAU/H,GAAQtB,EAAGwC,EAAa6G,EAAA,IAAU/H,KAEvHpD,KAAK4E,aAAaP,EAAMzC,GAExB5B,KAAKmE,iBAAiBE,EAAMpB,EAAU,EAAG,IAUnCy9B,EAAAt/B,UAAA+B,qBAAP,SAA4BF,GAC3B,IAAIC,EACA5B,EAAatB,KAAKsB,KAClBogC,EAAiBpgC,EAAKogC,eACtB3+B,EAAc/C,KAAKqF,iBASvB,OANCnC,EADG5B,EAAKoC,SAASC,UACHrC,EAAKkC,IAAMP,GAAYy+B,EAAiB3+B,GAGxCE,EAAW3B,EAAKmC,OAASi+B,EAAiB3+B,EAGlDoI,EAAA,MAAYjI,EAAY,IAUzBw9B,EAAAt/B,UAAAqE,gBAAP,SAAuB7D,GACtB,IAAIsB,EAAciI,EAAA,YAAkBvJ,GAAS5B,KAAKqF,iBAClD,OAAOrF,KAAK0F,qBAAqBxC,IAEnCw9B,EA1iBA,CAAwC5P,EAAA,GAkjBxCnoB,EAAA,EAAShD,kBAAsC,mBAAI86B,GCvnBnD,IAAAkB,GAAA,SAAA9hC,GAYC,SAAA+hC,IAAA,IAAA9hC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,qBACjBL,EAAKqB,eAGP,OAlBwCgH,EAAA,EAAAy5B,EAAA/hC,GAkBxC+hC,EAlBA,CAAwCrR,GAmGxCsR,GAAA,SAAAhiC,GAkGC,SAAAiiC,IAAA,IAAAhiC,EAGCD,EAAAE,KAAAC,OAAOA,KA7CEF,EAAA6wB,eAA8C1xB,GAAA,EAO9Ca,EAAA+wB,eAA4C4P,GA6B/C3gC,EAAA0gC,oBAA8B,EAUpC1gC,EAAKK,UAAY,aAEjBL,EAAKO,YAAc,GACnBP,EAAKQ,SAAW,IAEhBR,EAAKU,OAASC,OAAA+mB,EAAA,EAAA/mB,CAAQ,IACtBX,EAAKiD,YAAc,EAEnB,IAAIg/B,EAAiBjiC,EAAKqqB,cAAcY,YAAYV,EAAA,UACpD0X,EAAeta,aAAc,EAC7Bsa,EAAe7hC,OAAS,WACxB6hC,EAAe5P,MAAQ,SACvB4P,EAAe3P,OAAS,SAExBtyB,EAAKkyB,gBAAgB/E,OAAS8U,EAC9BjiC,EAAKiiC,eAAiBA,EACtBjiC,EAAKmyB,iBAAiBhF,OAAS8U,EAE/BjiC,EAAK+xB,iBAAmBkQ,EAExBjiC,EAAK0yB,YAAcuP,EAAehX,YAAYiX,GAAA,GAC9CliC,EAAK0yB,YAAY/K,aAAc,EAC/B3nB,EAAK0yB,YAAYxuB,QAAUlE,EAAK6H,MAAMlG,IAAI,QAC1C3B,EAAK0yB,YAAYyP,QAAU,EAG3BniC,EAAKqB,eAuUP,OAvcgCgH,EAAA,EAAA25B,EAAAjiC,GAuIrBiiC,EAAA1gC,UAAA6R,sBAAV,WAECpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MAItBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,iBAUnC0uB,EAAA1gC,UAAAqyB,YAAV,SAAsBnyB,GACrBzB,EAAAuB,UAAMqyB,YAAW1zB,KAAAC,KAACsB,GAClB,IAAIoC,EAAyBpC,EAAKoC,SAClCA,EAASixB,cAAc1H,OAASvpB,EAChCA,EAASkxB,eAAe3H,OAASvpB,EACjCpC,EAAK2rB,OAASjtB,KAAK+hC,eACnBr+B,EAAS4qB,UAMAwT,EAAA1gC,UAAAoyB,uBAAV,WACC3zB,EAAAuB,UAAMoyB,uBAAsBzzB,KAAAC,MAC5BmK,EAAA,KAAWnK,KAAK6hB,MAAMxX,WAAY,SAAC/I,GAClCA,EAAKuB,gBAOGi/B,EAAA1gC,UAAAuyB,uBAAV,WACC9zB,EAAAuB,UAAMuyB,uBAAsB5zB,KAAAC,MAC5BmK,EAAA,KAAWnK,KAAKshB,MAAMjX,WAAY,SAAC/I,GAClCA,EAAKuB,gBASGi/B,EAAA1gC,UAAA40B,aAAV,WACC,OAAO,IAAI0J,IASLoC,EAAA1gC,UAAAulB,cAAP,SAAqBC,GAEpB,GAAIA,IAGCxZ,EAAA,SAAewZ,EAAO0O,UAAYloB,EAAA,SAAewZ,EAAO0O,OAAOzR,QAClE+C,EAAO0O,OAAOzR,KAAO,eAIlBzW,EAAA,SAAewZ,EAAOtc,SAAW8C,EAAA,QAAcwZ,EAAOtc,SACzD,IAAK,IAAI2B,EAAI,EAAGI,EAAMua,EAAOtc,OAAO/F,OAAQ0H,EAAII,EAAKJ,IACpD2a,EAAOtc,OAAO2B,GAAG4X,KAAO+C,EAAOtc,OAAO2B,GAAG4X,MAAQ,cAkBpDhkB,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,IAMXkb,EAAA1gC,UAAA8gC,WAAV,WACCriC,EAAAuB,UAAM8gC,WAAUniC,KAAAC,MAEAA,KAAK+hC,eAArB,IACI5X,EAAgBnqB,KAAKmqB,cAErBgY,EAAOh3B,EAAA,WAAiBnL,KAAKK,WAAYL,KAAKM,SAAU,GACxD8hC,GAA0B1gC,EAAG,EAAGI,EAAG,EAAGkF,MAAO,EAAGE,OAAQ,GAExDm7B,EAAKlY,EAAcJ,WAAaoY,EAAKn7B,MACrCs7B,EAAKnY,EAAcH,YAAcmY,EAAKj7B,OAEtCnE,EAAc/C,KAAK+C,YAEvB,GAAIA,aAAuBykB,EAAA,EAAS,CACnC,IAAI7kB,EAAQI,EAAYJ,MACpB4/B,EAAKtgC,KAAKwJ,IAAI42B,EAAIC,GACtB3/B,EAAQV,KAAK8M,IAAIwzB,EAAK5/B,EAAO4/B,EAAKtgC,KAAKwJ,IAAI0e,EAAcH,YAAaG,EAAcJ,aAAewY,EACnGH,EAAYj3B,EAAA,WAAiBnL,KAAKK,WAAYL,KAAKM,SAAUqC,GAE7D3C,KAAKwgC,oBAAsB79B,EAAQI,EAAYJ,MAC/CI,EAActC,OAAA+mB,EAAA,EAAA/mB,CAAgB,IAARkC,GAGvBw/B,EAAOh3B,EAAA,oBAA0Bg3B,EAAMC,IAEvC,IAAII,EAAYvgC,KAAKwJ,IAAI0e,EAAcJ,WAAaoY,EAAKn7B,MAAOmjB,EAAcH,YAAcmY,EAAKj7B,QAE7Fu7B,EAAkE,EAAvDxiB,EAAA,sBAA6BjgB,KAAKQ,OAAQgiC,IAAkB,EACvEhiC,EAASiiC,EAAW,EACpBpiC,EAAaL,KAAKK,WAClBC,EAAWN,KAAKM,SAEpBN,KAAK0iC,kBAAoBziB,EAAA,sBAA6Bld,EAAavC,GAEnER,KAAKwyB,YAAY3uB,KAAOod,EAAA,IAAU5gB,EAAYC,EAAWD,EAAYG,EAAQR,KAAK0iC,mBAElFv4B,EAAA,KAAWnK,KAAKshB,MAAMjX,WAAY,SAAC/I,GAC/BA,EAAKoC,SAASnD,iBAChBe,EAAKoC,SAASrD,WAAaA,EAC3BiB,EAAKoC,SAASpD,SAAWA,GAG1BgB,EAAK0F,MAAQy7B,EACbnhC,EAAK4F,OAASu7B,EAGdnhC,EAAKoC,SAASzD,gBAAkBO,EAChCc,EAAKoC,SAASX,YAAcA,IAG7BoH,EAAA,KAAWnK,KAAK6hB,MAAMxX,WAAY,SAAC/I,GAClCA,EAAKoC,SAASrD,WAAaA,EAC3BiB,EAAKoC,SAASpD,SAAWA,EAEzBgB,EAAK0F,MAAQy7B,EACbnhC,EAAK4F,OAASu7B,EAGdnhC,EAAKoC,SAASzD,gBAAkBO,EAChCc,EAAKoC,SAASX,YAAcA,IAG7B,IAAIuyB,EAASt1B,KAAKs1B,OACdA,IACHA,EAAOtuB,MAAQy7B,EACfnN,EAAOpuB,OAASu7B,EAChBnN,EAAOj1B,WAAaA,EACpBi1B,EAAOh1B,SAAWA,GAGnBN,KAAK+hC,eAAeY,aAAgBjhC,EAAGlB,EAAS2hC,EAAKzgC,EAAGI,EAAGtB,EAAS2hC,EAAKrgC,EAAGkF,MAAOxG,EAAS2hC,EAAKn7B,MAAOE,OAAQ1G,EAAS2hC,EAAKj7B,QAC9HlH,KAAK+hC,eAAenW,oBAQXkW,EAAA1gC,UAAAq5B,aAAV,WACC,OAAO,IAAI6E,IA0BZ7+B,OAAA+B,eAAWs/B,EAAA1gC,UAAA,kBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,mBAR9B,SAAsBC,GACrB3C,KAAK8C,iBAAiB,aAAcH,GAAO,oCAiC5ClC,OAAA+B,eAAWs/B,EAAA1gC,UAAA,gBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAR9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCAiB1ClC,OAAA+B,eAAWs/B,EAAA1gC,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAM,EAAO,IAAI,oCAa3DlC,OAAA+B,eAAWs/B,EAAA1gC,UAAA,wBAAX,WACC,OAAOpB,KAAK0iC,mDAYbjiC,OAAA+B,eAAWs/B,EAAA1gC,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAM,EAAO,IAAI,oCAgBzDm/B,EAAA1gC,UAAA+xB,YAAP,SAAmBzvB,GAEdA,GACHA,EAAS+wB,mBAUJqN,EAAA1gC,UAAAiyB,YAAP,SAAmB3vB,GAEdA,GACHA,EAAS+wB,mBAIZqN,EAvcA,CAAgC9T,GA+chCrlB,EAAA,EAAShD,kBAA8B,WAAIk8B,oBCpf3Ce,GAAA,SAAA/iC,GAuDC,SAAAgjC,IAAA,IAAA/iC,EAGCD,EAAAE,KAAAC,OAAOA,KAhBEF,EAAAgjC,MAAoC,IAAIplB,EAAA,EAiBjD5d,EAAKK,UAAY,YAEjB,IAAIyqB,EAAkB,IAAIC,EAAA,EAE1B/qB,EAAKgO,KAAO8c,EAAgBK,OAAO,yBACnCnrB,EAAKqrB,OAASrrB,EAAKgO,KAEnB,IAAIi1B,EAAc,IAAIf,GAAA,EACtBe,EAAIviC,OAAS,EACbV,EAAKijC,IAAMA,EACXjjC,EAAKM,YAAa,EAElBN,EAAKkjC,WAAa,EAClBljC,EAAKmjC,SAAW,EAEhBnjC,EAAKkH,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACrBX,EAAKoH,OAASzG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAEtBX,EAAKU,OAASC,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACtBX,EAAKiD,YAActC,OAAA+mB,EAAA,EAAA/mB,CAAQ,GAE3B,IAAIyiC,EAAkB,IAAIC,GAAA,SAC1BrjC,EAAKojC,KAAOA,EAEZpjC,EAAKiK,WAAWC,KAAKlK,EAAKgjC,OAG1BhjC,EAAKqB,eAkSP,OAxX+BgH,EAAA,EAAA06B,EAAAhjC,GA8FvBgjC,EAAAzhC,UAAAiB,SAAP,WACCxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,MACd,IAAIkjC,EAAOljC,KAAKkjC,KAChBA,EAAKl8B,MAAQhH,KAAK8G,WAClB,IAAI6kB,EAAY1pB,KAAK8M,IAAI/O,KAAKgjC,WAAYhjC,KAAKijC,UAK/C,GAJAC,EAAKh8B,OAASykB,EACduX,EAAKE,SAAW3iC,OAAA+mB,EAAA,EAAA/mB,CAAQT,KAAKgjC,WAAarX,EAAI,KAC9CuX,EAAKG,UAAY5iC,OAAA+mB,EAAA,EAAA/mB,CAAQT,KAAKijC,SAAWtX,EAAI,KAEzC3rB,KAAKsB,KAAM,CACd,IAAIoC,EAAuD1D,KAAKsB,KAAKoC,SAEjE4/B,EAAarjB,EAAA,sBAA6BjgB,KAAK+C,YAAaW,EAAS1B,aACrEuhC,EAAatjB,EAAA,sBAA6BjgB,KAAKQ,OAAQkD,EAAS1B,aAEpEkhC,EAAKxhC,EAAI4hC,EACTJ,EAAKphC,GAAM6pB,EAAI,EAEfuX,EAAKl8B,MAAQu8B,EAAKD,IASpB7iC,OAAA+B,eAAWqgC,EAAAzhC,UAAA,WAcX,WACC,OAAOpB,KAAKwjC,UAfb,SAAeT,GACV/iC,KAAKwjC,MACRxjC,KAAKu1B,cAAcv1B,KAAKwjC,MAErBT,IACH/iC,KAAKwjC,KAAOT,EACZA,EAAI9V,OAASjtB,KACbA,KAAK+J,WAAWC,KAAK+4B,qCAqBvBtiC,OAAA+B,eAAWqgC,EAAAzhC,UAAA,YAcX,WACC,OAAOpB,KAAKyjC,WAfb,SAAgBP,GACXljC,KAAKyjC,OACRzjC,KAAKu1B,cAAcv1B,KAAKyjC,OAErBP,IACHljC,KAAKyjC,MAAQP,EACbA,EAAKjW,OAASjtB,KACdA,KAAK+J,WAAWC,KAAKk5B,qCAmBvBziC,OAAA+B,eAAWqgC,EAAAzhC,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAM,EAAO,IAAI,oCAkB3DlC,OAAA+B,eAAWqgC,EAAAzhC,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAM,EAAO,IAAI,oCAgBhElC,OAAA+B,eAAWqgC,EAAAzhC,UAAA,kBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,mBAR9B,SAAsBC,GACrB3C,KAAK8C,iBAAiB,aAAcH,GAAO,oCAgB5ClC,OAAA+B,eAAWqgC,EAAAzhC,UAAA,gBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAR9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCAiB1ClC,OAAA+B,eAAWqgC,EAAAzhC,UAAA,yBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,0BAR9B,SAA6BC,GAC5B3C,KAAK8C,iBAAiB,oBAAqBH,oCAsBrCkgC,EAAAzhC,UAAAsiC,UAAP,SAAiB/gC,EAAYwV,EAAmBqV,GAE/C,GADAxtB,KAAK2jC,OAAShhC,OACD+K,GAAT/K,IACEyK,EAAA,SAAe+K,KACnBA,EAAW,GAGRnY,KAAKsB,MAAM,CACd,IACIsiC,EADiC5jC,KAAKsB,KAAKoC,SACvBJ,gBAAgBtD,KAAKsB,KAAK6N,cAAcxM,IAC5DkhC,EAAe7jC,KAAKmH,SAEM,aAA1BnH,KAAK8jC,mBACJF,EAAWC,IACd7jC,KAAKmH,SAAW08B,EAAe,KAGH,oBAA1B7jC,KAAK8jC,mBACJF,EAAWC,IACd7jC,KAAKmH,SAAW08B,EAAe,KAIjC7jC,KAAK0tB,SAAUC,SAAU,WAAYC,GAAIgW,GAAYzrB,EAAUqV,KAUlE/sB,OAAA+B,eAAWqgC,EAAAzhC,UAAA,aAOX,WACC,OAAOpB,KAAK2jC,YARb,SAAiBhhC,GAChB3C,KAAK0jC,UAAU/gC,oCAiBhBlC,OAAA+B,eAAWqgC,EAAAzhC,UAAA,YAsBX,WACC,OAAOpB,KAAK8iC,MAAMzhB,WAvBnB,SAAgB/f,GASf,GARItB,KAAKsB,MAAQA,GAChBtB,KAAK8iC,MAAMnhB,IAAIrgB,EAAM,IAAIoc,EAAA,GACxBpc,EAAK8c,OAAOC,GAAG,gBAAiBre,KAAK+jC,YAAa/jC,MAAM,GACxDsB,EAAK8c,OAAOC,GAAG,mBAAoBre,KAAK+jC,YAAa/jC,MAAM,GAC3DsB,EAAK8c,OAAOC,GAAG,qBAAsBre,KAAK+jC,YAAa/jC,MAAM,GAC7DsB,EAAK8c,OAAOC,GAAG,kBAAmBre,KAAK6C,WAAY7C,MAAM,MAGvDsB,EAAM,CACT,IAAIgB,EAAgChB,EAAKgB,MACrCA,IACHtC,KAAKmH,SAAW7E,EAAMjC,YAGxBL,KAAKitB,OAAS3rB,EAAKoC,SACnB1D,KAAKkE,OAAS,mCAgBL2+B,EAAAzhC,UAAA2iC,YAAV,WACC/jC,KAAK2C,MAAQ3C,KAAK2C,OASZkgC,EAAAzhC,UAAAulB,cAAP,SAAqBC,GAEhBA,GAGCxZ,EAAA,SAAewZ,EAAOtlB,OAAS8L,EAAA,SAAewZ,EAAOtlB,OAAStB,KAAK6mB,IAAI3T,OAAO0T,EAAOtlB,QACxFslB,EAAOtlB,KAAOtB,KAAK6mB,IAAIvY,OAAOsY,EAAOtlB,OAKvCzB,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,IAGtBic,EAxXA,CAA+BxY,EAAA,GAgY/B1hB,EAAA,EAAShD,kBAA6B,UAAIi9B,GC7c1C,IAAAoB,GAAA,SAAAnkC,GAYC,SAAAokC,IAAA,IAAAnkC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,qBACjBL,EAAKqB,eAGP,OAlBwCgH,EAAA,EAAA87B,EAAApkC,GAkBxCokC,EAlBA,CAAwCtC,IAkExCuC,GAAA,SAAArkC,GAwCC,SAAAskC,IAAA,IAAArkC,EAGCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,aAEjBL,EAAKO,WAAa,IAClBP,EAAKQ,SAAW,IAEhBR,EAAKskC,MAAQ,IAAIhyB,EAAA,EAAwB,IAAIwwB,IAC7C9iC,EAAKskC,MAAMhmB,OAAOC,GAAG,WAAYve,EAAKukC,YAAavkC,GAAM,GAEzDA,EAAKiK,WAAWC,KAAK,IAAIoI,EAAA,EAAatS,EAAKskC,QAC3CtkC,EAAKiK,WAAWC,KAAKlK,EAAKskC,MAAMzjC,UAGhCb,EAAKqB,eA+BP,OAvFgCgH,EAAA,EAAAg8B,EAAAtkC,GA+DrBskC,EAAA/iC,UAAA6R,sBAAV,WAECpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MAItBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,iBAUnC+wB,EAAA/iC,UAAAijC,YAAV,SAAsBnc,GACrB,IAAIgb,EAAkBhb,EAAM+G,SACvBiU,EAAK5hC,OACT4hC,EAAK5hC,KAAOtB,KAAKshB,MAAMnV,SAAS,KAInCg4B,EAvFA,CAAgCtC,IA+FhCl5B,EAAA,EAAShD,kBAA8B,WAAIu+B,oBC7J3CI,GAAA,SAAAzkC,GAYC,SAAA0kC,IAAA,IAAAzkC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,uBACjBL,EAAKqB,eAGP,OAlB0CgH,EAAA,EAAAo8B,EAAA1kC,GAkB1C0kC,EAlBA,CAA0C9T,EAAA,GAkE1C+T,GAAA,SAAA3kC,GAwCC,SAAA4kC,IAAA,IAAA3kC,EAGCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,eAEjBL,EAAKqyB,MAAQ,OACbryB,EAAKsyB,OAAS,OAGdtyB,EAAKkxB,eAAe7C,UAAY,GAChCruB,EAAKkxB,eAAe5C,SAAW,GAG/BtuB,EAAKqB,eAmFP,OAzIkCgH,EAAA,EAAAs8B,EAAA5kC,GA8D1B4kC,EAAArjC,UAAAqT,aAAP,WACC5U,EAAAuB,UAAMqT,aAAY1U,KAAAC,MAClBA,KAAK0kC,cAMCD,EAAArjC,UAAAsjC,WAAP,WACC,IAAIC,EAAS3kC,KAAK2kC,OAClB,GAAIA,EAAQ,CAEX,IAAIC,KAEJz6B,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnCH,EAAA,KAAWG,EAAOY,UAAUb,WAAY,SAAC6B,GACxC,IAAKA,EAAS24B,eAAgB,CAC7BD,EAAW56B,KAA4BkC,GAEvC,IAAI44B,EAAiBx6B,EAAOw6B,eACxBA,IACCA,EAAeC,YAClBJ,EAAO9jC,OAAOF,SAASoI,KAAO+7B,EAAeC,WAE1CD,EAAeE,gBAClBL,EAAO9jC,OAAOF,SAASoI,KAAO+7B,EAAeE,eAE1CF,EAAeG,YAClBN,EAAOO,YAAYvkC,SAASoI,KAAO+7B,EAAeG,WAE/CH,EAAeK,gBAClBR,EAAOO,YAAYvkC,SAASoI,KAAO+7B,EAAeK,qBAOvDR,EAAO7lB,KAAO8lB,EACdD,EAAO3lB,WAAWI,KAAO,aASjBqlB,EAAArjC,UAAAq5B,aAAV,WACC,OAAO,IAAI2K,GAAA,GAOFX,EAAArjC,UAAAikC,UAAV,SAAoBV,GACnB9kC,EAAAuB,UAAMikC,UAAStlC,KAAAC,KAAC2kC,GACZA,IACHA,EAAO9jC,OAAOF,SAASoI,KAAO,aAC9B47B,EAAOO,YAAYvkC,SAASoI,KAAO,uCAEnC47B,EAAOW,eAAe3kC,SAASyd,OAAOC,GAAG,OAAQ,SAAC6J,GACjD,IAAIqd,EAAsErd,EAAMvmB,OAAOuK,SAASkC,YAC5Fm3B,EAAsBriB,UAAYqiB,EAAsBpiB,WAC3DoiB,EAAsBC,MAAMrhB,SAAU,KAIxCwgB,EAAOW,eAAe3kC,SAASyd,OAAOC,GAAG,MAAO,SAAC6J,GAC0BA,EAAMvmB,OAAOuK,SAASkC,YAC1Eo3B,MAAMrhB,SAAU,MAI1CsgB,EAzIA,CAAkChU,EAAA,GAiJlC9nB,EAAA,EAAShD,kBAAgC,aAAI6+B,GAC7C77B,EAAA,EAAShD,kBAAwC,qBAAI2+B,8CChMrDmB,GAAA,SAAA5lC,GAwCC,SAAA6lC,IAAA,IAAA5lC,EACCD,EAAAE,KAAAC,OAAOA,YAbEF,EAAA6lC,OAAS,IAAIjoB,EAAA,EAOb5d,EAAA8lC,OAAS,IAAIloB,EAAA,EAOtB5d,EAAKK,UAAY,UACjBL,EAAKkE,QAAUlE,EAAK6H,MAAMlG,IAAI,YAC9B3B,EAAKiK,WAAWC,KAAKlK,EAAK6lC,QAC1B7lC,EAAKiK,WAAWC,KAAKlK,EAAK8lC,QAC1B9lC,EAAKqB,eAuFP,OArI6BgH,EAAA,EAAAu9B,EAAA7lC,GAsDrB6lC,EAAAtkC,UAAAyG,KAAP,WACChI,EAAAuB,UAAMyG,KAAI9H,KAAAC,MAEV,IAAIwlC,EAAexlC,KAAKwlC,MACpB9gC,EAAQ1E,KAAK0E,MAEb4F,EAAoBk7B,EAAMt5B,SAASpC,UAEvC,GAAI07B,GAASA,EAAMhlC,OAAS,GAAKkE,GAASA,EAAMqE,KAAM,CACrD,IAAIu6B,EAAKkC,EAAM7+B,GAAK6+B,EAAMA,MAAM7+B,GAAK6+B,EAAM3jC,OAAS2jC,EAAMK,GAAKL,EAAMhlC,OAASglC,EAAMM,MAChFC,EAAKP,EAAM/+B,GAAK++B,EAAMA,MAAM/+B,GAAK++B,EAAMzjC,OAASyjC,EAAMQ,GAAKR,EAAMhlC,OAASglC,EAAMM,MAEhFvC,OAAE,EACF0C,OAAE,EAEFvH,OAAE,EACFwH,OAAE,EAEN,GAAI57B,EAAO67B,YACV5C,EAAK7+B,EAAM7C,OAAS7B,KAAKuE,OACzB0hC,EAAKvhC,EAAM3C,OAEX28B,EAAKh6B,EAAM7C,OACXqkC,EAAKD,EAEyB,SAA1BvhC,EAAMm8B,mBAETnC,GADA6E,GAAM,EAAIvjC,KAAKuE,QACLvE,KAAKuE,YAGZ,CACJ,IAAI6hC,EAAI1hC,EAAM1C,YAAYwjC,EAAMhlC,QAKhCk+B,EAHA6E,EAAKD,EAAK8C,EAAIZ,EAAMK,GAIpBK,EAHAD,EAAKF,EAAKK,EAAIZ,EAAMQ,GAMrBhmC,KAAKgE,QAAQqiC,MAAOjL,QAAWkI,EAAIyC,EAAIxC,EAAI0C,EAAIvH,EAAIwH,OASrDzlC,OAAA+B,eAAWkjC,EAAAtkC,UAAA,aAUX,WACC,OAAOpB,KAAK4lC,OAAOvkB,WAXpB,SAAiBmkB,GAChBxlC,KAAK4lC,OAAOjkB,IAAI6jB,EAAO,IAAI9nB,EAAA,GAC1B8nB,EAAMpnB,OAAOC,GAAG,cAAere,KAAK6C,WAAY7C,MAChDwlC,EAAMpnB,OAAOC,GAAG,YAAare,KAAK6C,WAAY7C,0CAgBhDS,OAAA+B,eAAWkjC,EAAAtkC,UAAA,aAOX,WACC,OAAOpB,KAAK2lC,OAAOtkB,WARpB,SAAiB3c,GAChB1E,KAAK2lC,OAAOhkB,IAAIjd,EAAOA,EAAM0Z,OAAOC,GAAG,cAAere,KAAK6C,WAAY7C,MAAM,qCAU/E0lC,EArIA,CAA6BY,GAAA,GA6I7B39B,EAAA,EAAShD,kBAA2B,QAAI8/B,GCrJxC,IAAAc,GAAA,SAAA1mC,GAkCC,SAAA2mC,IAAA,IAAA1mC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,oBAEjBL,EAAK6R,OAAO80B,eAEZ3mC,EAAKqB,eAyCP,OAjFuCgH,EAAA,EAAAq+B,EAAA3mC,GAgDtCY,OAAA+B,eAAWgkC,EAAAplC,UAAA,mBAOX,WACC,OAAOpB,KAAK2R,OAAO80B,YAAY9jC,WARhC,SAAuBA,GACtB3C,KAAK2c,SAAS,cAAeha,oCAkBvB6jC,EAAAplC,UAAAykB,KAAP,SAAY1N,EAAmBiN,EAAgBshB,EAAkB1pB,GAChE,OAAOnd,EAAAuB,UAAMykB,KAAI9lB,KAAAC,KAACmY,EAAUiN,EAAO,GAAI,QAAS,iBAU1CohB,EAAAplC,UAAA8jB,KAAP,SAAY/M,EAAmBiN,EAAgBpI,GAC9C,OAAOnd,EAAAuB,UAAM8jB,KAAInlB,KAAAC,KAACmY,EAAUiN,GAAQ,QAAS,iBAE/CohB,EAjFA,CAAuCpB,GAAA,GA6KvCuB,GAAA,SAAA9mC,GAiGC,SAAA+mC,IAAA,IAAA9mC,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,YAEjBL,EAAKqmC,aAAc,EACnBrmC,EAAKO,YAAc,GACnBP,EAAKQ,SAAW,IAEhBR,EAAKe,OAAOF,SAASH,OAASC,OAAA+mB,EAAA,EAAA/mB,CAAQ,GAEtCX,EAAKqB,eAkZP,OA9f+BgH,EAAA,EAAAy+B,EAAA/mC,GAkHpB+mC,EAAAxlC,UAAAylC,YAAV,WACC,OAAO,IAAIC,GAAA,GAMFF,EAAAxlC,UAAA2lC,WAAV,WACC,OAAO,IAAItB,IAMFmB,EAAAxlC,UAAAoE,YAAV,WACC,OAAO,IAAII,GAAA,GAOFghC,EAAAxlC,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MACtBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,sBAUnCwzB,EAAAxlC,UAAAyI,eAAV,WACC,OAAO,IAAI08B,IAQFK,EAAAxlC,UAAA4lC,UAAV,SAAoBxB,GACnBA,EAAMplC,YAAa,EACnBolC,EAAMlgB,aAAalc,WAAW08B,MAAQ,EACtCN,EAAMjS,QAAQ,QAASvzB,KAAKinC,iBAAkBjnC,MAC9CwlC,EAAMjS,SAAS,KAAM,KAAM,IAAK,IAAK,eAAgBvzB,KAAKknC,gBAAiBlnC,MAC3EwlC,EAAMnhB,YAAc,mEAEHmhB,EAAM5W,OAAO/Y,OAAO,SAC1BzM,WAAW08B,MAAQ,KAEXN,EAAMlgB,aACZlc,WAAW+9B,YAAc,EAEtC3B,EAAM4B,WAAY,EAElB5B,EAAMpnB,OAAOC,GAAG,UAAW,SAAC6J,GAC3BA,EAAMvmB,OAAOmhB,gBAGI0iB,EAAM5W,OAAO/Y,OAAO,UAC1BzM,WAAW+9B,YAAc,IAQ/BP,EAAAxlC,UAAAiB,SAAP,WACCrC,KAAKqnC,cACLrnC,KAAKsnC,eAELtnC,KAAKunC,mBAAqBvnC,KAAKK,WAC/BL,KAAKwnC,SAAWr8B,EAAA,WAAiBnL,KAAKK,WAAYL,KAAKM,UAEvDN,KAAKynC,kBAAoB,EACzB,IAAK,IAAIx7B,EAAIjM,KAAK6K,WAAYoB,EAAIjM,KAAK+K,SAAUkB,IAAK,CACrD,IACIy7B,EADW1nC,KAAKkL,UAAUiB,SAASF,GACL0F,OAAO80B,YAAYkB,QACjDD,EAAqB1nC,KAAKynC,oBAC7BznC,KAAKynC,kBAAoBC,GAI3B7nC,EAAAuB,UAAMiB,SAAQtC,KAAAC,MAEVA,KAAKmmC,cACJnmC,KAAKK,WAAaL,KAAKM,SAC1BN,KAAKsnC,YAAYM,UAGjB5nC,KAAKqnC,WAAWO,UAIjB5nC,KAAKsnC,YAAY1Q,KAAK,SAACpR,EAAGzY,GACzB,IAAI86B,GAAUriB,EAAEggB,MAAMsC,YAAc,KAAO,IACvCC,GAAUh7B,EAAEy4B,MAAMsC,YAAc,KAAO,IAU3C,OARID,EAAS,MACZA,GAAU,KAGPE,EAAS,MACZA,GAAU,KAGPF,EAASE,GACJ,EAGD,IAIT/nC,KAAKqnC,WAAWzQ,KAAK,SAACpR,EAAGzY,GAKxB,OAHcyY,EAAEggB,MAAMsC,YAAc,KAAO,KAC7B/6B,EAAEy4B,MAAMsC,YAAc,KAAO,IAGnC,GAGC,IAIV9nC,KAAKgoC,cAAchoC,KAAKsnC,aACxBtnC,KAAKgoC,cAAchoC,KAAKqnC,cAUnBT,EAAAxlC,UAAAqL,oBAAP,SAA2BP,GAC1B,GAAIlM,KAAKgC,YAAc,EAAG,CAEXkK,EAASyF,OAAOhP,MAAMglC,QAApC,IAGInC,EAAet5B,EAASs5B,MAC5BA,EAAMhlC,OAASR,KAAKgC,YAEhBoL,EAAA,SAAelB,EAASu6B,eAC3BjB,EAAMhlC,OAASR,KAAKqF,kBAAoBrF,KAAKgC,YAAchC,KAAKqF,kBAAoB6G,EAASyF,OAAO80B,YAAYkB,QAAU3nC,KAAKynC,mBAE1HjC,EAAMziC,uBAAuBykB,EAAA,IAClCge,EAAMziC,YAAc/C,KAAKqF,kBAE1BmgC,EAAMnlC,WAAaL,KAAKunC,mBAExB/B,EAAMjiC,IAAM2I,EAASyF,OAAOhP,MAAMglC,SAAW3nC,KAAKM,SAAWN,KAAKK,YAAc,IAGhF,IAAIqE,EAAQwH,EAASxH,MAEjBL,EAAO6H,EAAS7H,KACpBA,EAAKmhC,MAAQA,EACbnhC,EAAKK,MAAQA,EAEb,IAAIujC,GAAiCzC,EAAMsC,YAAc,KAAO,IAE5DlmC,OAAK,EAET,GAAI5B,KAAKmmC,YAAa,CACrB,IAAIt/B,EAAcnC,EAAM1C,YAAYwjC,EAAMhlC,QACtCkB,EAAY2C,EAAKE,OAASsC,EAC9BnC,EAAMiC,GAAK,EACXjC,EAAM+B,GAAK,EACX/B,EAAMo8B,eAAiB,SACvB,IAAIoH,EAAUloC,KAAKwnC,SAEfS,GAAyB,KAAOA,GAAyB,IAC5DvmC,IAAMwmC,EAAQlhC,MAAQkhC,EAAQxmC,GAAK1B,KAAKgC,YACxC0C,EAAMm8B,iBAAmB,OACzB7gC,KAAKsnC,YAAYt9B,KAAKkC,KAItBxK,GAAKwmC,EAAQxmC,EAAI1B,KAAKgC,YACtB0C,EAAMm8B,iBAAmB,QACzB7gC,KAAKqnC,WAAWr9B,KAAKkC,GACrBxK,IAAM,GAGP,IAAIymC,EAAW3C,EAAMhlC,OAAS6D,EAAKE,OAASsC,EAC5CjF,GAAUF,EAAGA,EAAGI,EAAG0jC,EAAMQ,GAAKmC,OAE1B,CACJzjC,EAAMm8B,sBAAmBnzB,EACzBhJ,EAAMo8B,oBAAiBpzB,EACnBhM,EAAY8jC,EAAMK,GAAKL,EAAMhlC,OAAjC,IACIsB,EAAY0jC,EAAMQ,GAAKR,EAAM4C,QAEjCxmC,EAAQ8C,EAAMC,UAAWjD,EAAGA,EAAGI,EAAGA,GAAK0jC,EAAMhlC,OAAQglC,EAAM4C,SAG5D1jC,EAAMsgB,OAAOpjB,GACb5B,KAAKunC,oBAAsB/B,EAAMjiC,IAGjC1D,EAAAuB,UAAMqL,oBAAmB1M,KAAAC,KAACkM,KAS5BzL,OAAA+B,eAAWokC,EAAAxlC,UAAA,cASX,WACC,OAAOpB,KAAK0C,iBAAiB,eAV9B,SAAkBC,GACb3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAM,EAAO,IAAI,IAC7D3C,KAAKuI,uDAeP9H,OAAA+B,eAAWokC,EAAAxlC,UAAA,mBAAX,WACC,OAAOpB,KAAKqoC,kBAMb,SAAuB1lC,GAClB3C,KAAKqoC,cAAgB1lC,IACxB3C,KAAKqoC,aAAe1lC,EACpB3C,KAAKuI,wDAQP9H,OAAA+B,eAAWokC,EAAAxlC,UAAA,wBAAX,WACC,OAAOpB,KAAK0iC,uBAMb,SAA4B//B,GACvB3C,KAAK0iC,mBAAqB//B,IAC7B3C,KAAK0iC,kBAAoB//B,EACzB3C,KAAKuI,wDAWP9H,OAAA+B,eAAWokC,EAAAxlC,UAAA,mBAQX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAT9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAM,EAAO,IAAI,oCAkBhElC,OAAA+B,eAAWokC,EAAAxlC,UAAA,kBAQX,WACC,OAAOpB,KAAK0C,iBAAiB,mBAT9B,SAAsBC,GACrB3C,KAAK8C,iBAAiB,aAAcqI,EAAA,eAAqBxI,IAAQ,oCAkBlElC,OAAA+B,eAAWokC,EAAAxlC,UAAA,gBAQX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAT9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCAkBnCikC,EAAAxlC,UAAAojB,eAAP,SAAsBF,GACrBzkB,EAAAuB,UAAMojB,eAAczkB,KAAAC,KAACskB,GAErB,IACIkhB,EADiDlhB,EAAOpY,SAChCs5B,MAExB1gB,EAAYR,EAAOQ,UAClB1X,EAAA,SAAe0X,KACnBA,EAAY,IAEb,IAAIC,EAAYT,EAAOS,UAClB3X,EAAA,SAAe2X,KACnBA,EAAY,GAGb,IAAI3hB,EAAQoiC,EAAMnlC,WAAamlC,EAAMjiC,IAAMuhB,EACvCtkB,EAASukB,EAAYygB,EAAMhlC,OAE/B8jB,EAAO5iB,EAAIlB,EAAS2K,EAAA,IAAU/H,GAC9BkhB,EAAOxiB,EAAItB,EAAS2K,EAAA,IAAU/H,IAUrBwjC,EAAAxlC,UAAA8lC,gBAAV,SAA0Bhf,GACzB,IAAKloB,KAAKmmC,YAAa,CAEtB,IAAIX,EAAQtd,EAAMvmB,OACduK,EAAiDs5B,EAAMt5B,SAG3D,GAAIA,EAAU,CACb,IAAIxH,EAAQwH,EAASxH,MACjBA,IACHA,EAAMiC,GAAKjC,EAAMwB,IAAMs/B,EAAM7+B,GAAK6+B,EAAM3jC,OACxC6C,EAAM+B,GAAK/B,EAAMyB,IAAMq/B,EAAM/+B,GAAK++B,EAAMzjC,WAa5CtB,OAAA+B,eAAWokC,EAAAxlC,UAAA,YAAX,WACC,GAAIpB,KAAK2iC,YACR,OAAO3iC,KAAK2iC,YAEb,IAAIrgC,EAAQtC,KAAKsC,MACjB,OAAIA,EACI6I,EAAA,WAAiB7I,EAAMjC,WAAYiC,EAAMhC,SAAUN,KAAKgC,aAGzDmJ,EAAA,WAAiBnL,KAAKK,WAAYL,KAAKM,SAAUN,KAAKgC,8CAE/D4kC,EA9fA,CAA+BxB,GAAA,GAsgB/Bz8B,EAAA,EAAShD,kBAA6B,UAAIghC,GAC1Ch+B,EAAA,EAAShD,kBAAqC,kBAAI4gC,GChsBlD,IAAA+B,GAAA,SAAAzoC,GAYC,SAAA0oC,IAAA,IAAAzoC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,mBACjBL,EAAKqB,eAGP,OAlBsCgH,EAAA,EAAAogC,EAAA1oC,GAkBtC0oC,EAlBA,CAAsCjE,IA8KtCkE,GAAA,SAAA3oC,GAwCC,SAAA4oC,IAAA,IAAA3oC,EAGCD,EAAAE,KAAAC,OAAOA,KACPF,EAAKK,UAAY,WAGjBL,EAAKiD,YAAc,EACnBjD,EAAKU,OAASC,OAAA+mB,EAAA,EAAA/mB,CAAQ,IACtBX,EAAKqyB,MAAQ,OACbryB,EAAKsyB,OAAS,OAEdtyB,EAAKO,YAAc,GACnBP,EAAKQ,SAAW,IAEhB,IAAI0xB,EAAkBlyB,EAAKkyB,uBAC3BA,EAAgB5xB,YAAa,EAC7B4xB,EAAgBI,OAAS,SACzBJ,EAAgBG,MAAQ,SACxBH,EAAgB9xB,OAAS,WACzB8xB,EAAgBhrB,WAAQ0G,EACxBskB,EAAgB9qB,YAASwG,EAGzB5N,EAAKkxB,eAAe7C,UAAY,GAChCruB,EAAKkxB,eAAe5C,SAAW,GAE/BtuB,EAAKkxB,eAAe5S,OAAOC,GAAG,iBAAkBve,EAAK4oC,aAAc5oC,GAAM,GAGzEA,EAAKqB,eAwPP,OA9T8BgH,EAAA,EAAAsgC,EAAA5oC,GA6EnB4oC,EAAArnC,UAAA6R,sBAAV,WAECpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MAItBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,eAStCq1B,EAAArnC,UAAAunC,eAAP,WACC9oC,EAAAuB,UAAMunC,eAAc5oC,KAAAC,MACpBA,KAAK0oC,gBAUCD,EAAArnC,UAAA0tB,kBAAP,SAAyB5G,GACxBroB,EAAAuB,UAAM0tB,kBAAiB/uB,KAAAC,KAACkoB,GACxBloB,KAAK4oC,sBAGIH,EAAArnC,UAAAwnC,mBAAV,eAAA9oC,EAAAE,KACCA,KAAKsK,OAAOoC,KAAK,SAACpC,GACjBA,EAAOjK,WAAaP,EAAKO,WACzBiK,EAAOhK,SAAWR,EAAKQ,SACvBgK,EAAOgb,aAAalc,WAAW/I,WAAaP,EAAKO,WACjDiK,EAAOgb,aAAalc,WAAW9I,SAAWR,EAAKQ,YAS1CmoC,EAAArnC,UAAAsnC,aAAP,WAEC,IAAIG,EAAY7oC,KAAKgxB,eAEjBmR,EAAOh3B,EAAA,WAAiBnL,KAAKK,WAAYL,KAAKM,SAAU,GACxD8hC,GAA0B1gC,EAAG,EAAGI,EAAG,EAAGkF,MAAO,EAAGE,OAAQ,GAExDnE,EAAc/C,KAAK+C,YAEnBA,aAAuBykB,EAAA,IAC1B4a,EAAYj3B,EAAA,WAAiBnL,KAAKK,WAAYL,KAAKM,SAAUyC,EAAYJ,QAI1Ew/B,EAAOh3B,EAAA,oBAA0Bg3B,EAAMC,IAEvC,IAAII,EAAYvgC,KAAKwJ,IAAIo9B,EAAU9e,WAAaoY,EAAKn7B,MAAO6hC,EAAU7e,YAAcmY,EAAKj7B,QAErFkG,EAAA,SAAeo1B,KAClBA,EAAY,GAGb,IAAIsG,EAAc7oB,EAAA,sBAA6BjgB,KAAKQ,OAAQgiC,GAExDuG,EAAwB9oB,EAAA,sBAA6BjgB,KAAK+C,YAAay/B,GAEvEwG,GAAgBF,EAAcC,GAAyB/oC,KAAKsK,OAAO/F,OAEvE4F,EAAA,KAAWA,EAAA,QAAcnK,KAAKsK,OAAOD,YAAa,SAACmb,GAClD,IAAIvZ,EAAIuZ,EAAE,GACNlb,EAASkb,EAAE,GAEXhlB,EAASuoC,EAAwB9oB,EAAA,sBAA6B3V,EAAO9J,OAAQsoC,EAAcC,GAC3FhmC,EAAcgmC,EAAwB9oB,EAAA,sBAA6B3V,EAAOvH,YAAa+lC,EAAcC,GAErG37B,EAAA,SAAe5M,KAClBA,EAASuoC,EAAwBC,GAAgB/8B,EAAI,IAElDmB,EAAA,SAAerK,KAClBA,EAAcgmC,EAAwBC,EAAe/8B,GAGtD3B,EAAOtI,YAAcxB,EACrB8J,EAAOjF,iBAAmBtC,IAG3B/C,KAAKgyB,gBAAgB2Q,aAAgBjhC,EAAGonC,EAAc3G,EAAKzgC,EAAGI,EAAGgnC,EAAc3G,EAAKrgC,EAAGkF,MAAO8hC,EAAc3G,EAAKn7B,MAAOE,OAAQ4hC,EAAc3G,EAAKj7B,QACnJlH,KAAKgyB,gBAAgB7kB,oBA8BtB1M,OAAA+B,eAAWimC,EAAArnC,UAAA,cASX,WACC,OAAOpB,KAAK0C,iBAAiB,eAV9B,SAAkBC,GACd3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAM,EAAO,IAAI,IAC5D3C,KAAKmN,oDAsBP1M,OAAA+B,eAAWimC,EAAArnC,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAM,EAAO,IAAI,oCAetD8lC,EAAArnC,UAAAq5B,aAAV,WACC,OAAO,IAAIkM,IA2BZlmC,OAAA+B,eAAWimC,EAAArnC,UAAA,kBAUX,WACC,OAAOpB,KAAK0C,iBAAiB,mBAX9B,SAAsBC,GAClB3C,KAAK8C,iBAAiB,aAAcH,KACtC3C,KAAK0oC,eACL1oC,KAAK4oC,uDAiCPnoC,OAAA+B,eAAWimC,EAAArnC,UAAA,gBAUX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAX9B,SAAoBC,GAChB3C,KAAK8C,iBAAiB,WAAYH,KACpC3C,KAAK0oC,eACL1oC,KAAK4oC,uDAURH,EA9TA,CAA8BjE,IAsU9B77B,EAAA,EAAShD,kBAA4B,SAAI6iC,GACzC7/B,EAAA,EAAShD,kBAAoC,iBAAI2iC,oBC7fjDW,GAAA,SAAAppC,GA0BC,SAAAqpC,IAAA,IAAAppC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,sBAEjBL,EAAK6R,OAAOw3B,cAEZrpC,EAAKqB,eAmBP,OAnDyCgH,EAAA,EAAA+gC,EAAArpC,GAwCxCY,OAAA+B,eAAW0mC,EAAA9nC,UAAA,kBAOX,WACC,OAAOpB,KAAK2R,OAAmB,WAAEhP,WARlC,SAAsBA,GACrB3C,KAAK2c,SAAS,aAAcha,oCAU9BumC,EAnDA,CAAyC3C,IA4HzC6C,GAAA,SAAAvpC,GAiDC,SAAAwpC,IAAA,IAAAvpC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,cACjBL,EAAKqB,eA2GP,OA/JiCgH,EAAA,EAAAkhC,EAAAxpC,GA4DtBwpC,EAAAjoC,UAAAyI,eAAV,WACC,OAAO,IAAIo/B,IAMFI,EAAAjoC,UAAAylC,YAAV,WACC,OAAO,IAAIyC,GAAA,GASLD,EAAAjoC,UAAAqL,oBAAP,SAA2BP,GAE1B,IAAIs5B,EAA0Bt5B,EAASs5B,MAEnC+D,EAAgBvpC,KAAKupC,MACpBn8B,EAAA,SAAem8B,KACnBA,EAAQvpC,KAAKsC,MAAMinC,OAGpB,IAAIC,EAAuBt9B,EAASyF,OAAOw3B,WAAWxB,QACjDv6B,EAAA,SAAeo8B,KACnBA,EAAe,KAGhBhE,EAAM+D,MAAQC,EAAeD,EAAQ,IAErC,IAAInmC,EAAgBpD,KAAKoD,MACpBgK,EAAA,SAAehK,KACnBA,EAAQpD,KAAKsC,MAAMc,OAGpBoiC,EAAMpiC,MAAQA,EAEdvD,EAAAuB,UAAMqL,oBAAmB1M,KAAAC,KAACkM,IAQpBm9B,EAAAjoC,UAAAiB,SAAP,WACCxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,MAEd,IAAI,IAAIiM,EAAIjM,KAAKm9B,mBAAoBlxB,EAAIjM,KAAKq9B,iBAAkBpxB,IAAI,CACnE,IACIu5B,EADWxlC,KAAKkL,UAAUiB,SAASF,GACTu5B,MAE1BnlC,EAAamlC,EAAMnlC,WAGlBA,IAAe,IAAMA,EAAa,GACtCmlC,EAAM9S,UAGGryB,GAAc,IACvBmlC,EAAMlX,WAUT7tB,OAAA+B,eAAW6mC,EAAAjoC,UAAA,aAOX,WACC,OAAOpB,KAAK0C,iBAAiB,cAR9B,SAAiBC,GAChB3C,KAAK8C,iBAAiB,QAASH,GAAO,oCAevClC,OAAA+B,eAAW6mC,EAAAjoC,UAAA,aAOX,WACC,OAAOpB,KAAK0C,iBAAiB,cAR9B,SAAiBC,GAChB3C,KAAK8C,iBAAiB,QAASH,oCASjC0mC,EA/JA,CAAiC1C,IAuKjCh+B,EAAA,EAAShD,kBAA+B,YAAIyjC,GAC5CzgC,EAAA,EAAShD,kBAAuC,oBAAIsjC,GCpSpD,IAAAQ,GAAA,SAAA5pC,GAYC,SAAA6pC,IAAA,IAAA5pC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,qBACjBL,EAAKqB,eAGP,OAlBwCgH,EAAA,EAAAuhC,EAAA7pC,GAkBxC6pC,EAlBA,CAAwCpB,IA8JxCqB,GAAA,SAAA9pC,GAwCC,SAAA+pC,IAAA,IAAA9pC,EAGCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,aAEjBL,EAAKypC,MAAQ,GACbzpC,EAAKsD,MAAQ,GAGbtD,EAAKqB,eAqDP,OAvGgCgH,EAAA,EAAAyhC,EAAA/pC,GA8D/BY,OAAA+B,eAAWonC,EAAAxoC,UAAA,aASX,WACC,OAAOpB,KAAK0C,iBAAiB,cAV9B,SAAiBC,GACZ3C,KAAK8C,iBAAiB,QAASH,IAClC3C,KAAK6pC,uDAiBPppC,OAAA+B,eAAWonC,EAAAxoC,UAAA,aASX,WACC,OAAOpB,KAAK0C,iBAAiB,cAV9B,SAAiBC,GACZ3C,KAAK8C,iBAAiB,QAASH,IAClC3C,KAAK6pC,uDAgBGD,EAAAxoC,UAAAq5B,aAAV,WACC,OAAO,IAAI2O,IAGbQ,EAvGA,CAAgCpB,IA+GhC7/B,EAAA,EAAShD,kBAA8B,WAAIgkC,GCrQ3C,IAAAG,GAAA,SAAAjqC,GAYC,SAAAkqC,IAAA,IAAAjqC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,sBACjBL,EAAKqB,eAGP,OAlByCgH,EAAA,EAAA4hC,EAAAlqC,GAkBzCkqC,EAlBA,CAAyCzF,IAkEzC0F,GAAA,SAAAnqC,GAwCC,SAAAoqC,IAAA,IAAAnqC,EAGCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,cAEjBL,EAAKkyB,gBAAgB9xB,OAAS,aAE9BJ,EAAKsG,QAAQ,GAAI,GAAI,GAAI,IAGzBtG,EAAKqB,eA0BP,OA7EiCgH,EAAA,EAAA8hC,EAAApqC,GA0DtBoqC,EAAA7oC,UAAA6R,sBAAV,WAECpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MAItBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,kBAStC62B,EAAA7oC,UAAAiB,SAAP,WACCxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,OAEhBiqC,EA7EA,CAAiCzF,IAqFjC77B,EAAA,EAAShD,kBAA+B,YAAIqkC,GAC5CrhC,EAAA,EAAShD,kBAAuC,oBAAImkC,2DCtHpDI,GAAA,SAAArqC,GAiGC,SAAAsqC,IAAA,IAAArqC,EACCD,EAAAE,KAAAC,OAAOA,KACPF,EAAKK,UAAY,YAEjBL,EAAK4E,MAAQ5E,EAAKirB,YAAYnlB,GAAA,GAC9B9F,EAAK4E,MAAM9D,SAAW,GACtBd,EAAK4E,MAAMlE,OAAS,EACpBV,EAAK4E,MAAMqE,KAAO,SAClBjJ,EAAK4E,MAAMR,OAAS,EACpBpE,EAAK4E,MAAM+iB,aAAc,EAEzB3nB,EAAKI,OAAS,OAEdJ,EAAKse,OAAOC,GAAG,kBAAmBve,EAAKsqC,eAAgBtqC,GAAM,GAE7DA,EAAKM,YAAa,EAClBN,EAAK0lC,MAAQ1lC,EAAKirB,YAAY+b,GAAA,GAC9BhnC,EAAK0lC,MAAMplC,YAAa,EAExB,IAAI0lB,EAAchmB,EAAKgmB,mBACvBA,EAAY1c,WAAW0E,MAAO,IAAI+c,EAAA,GAAoBI,OAAO,sBAC7DnF,EAAY1c,WAAW64B,QAAU,GACjCnc,EAAY1c,WAAW8Z,SAAU,EAEjCpjB,EAAKuqC,oBAAqB,EAE1BvqC,EAAK0lC,MAAM1f,YAAY1c,WAAW8Z,SAAU,EAE5CpjB,EAAK0B,QAAQC,IAAI,WAAY,SAACkiB,EAAUhiB,GACpC,OAAOA,EAAO6jC,MAAMK,IAAMlkC,EAAO6jC,MAAMhlC,QAAUmB,EAAO6jC,MAAMhlC,OAASmB,EAAO6jC,MAAMngC,kBAAoB,KAG5GvF,EAAK0B,QAAQC,IAAI,WAAY,SAACmiB,EAAUjiB,GACpC,OAAOA,EAAO6jC,MAAMQ,IAAMrkC,EAAO6jC,MAAMhlC,QAAUmB,EAAO6jC,MAAMhlC,OAASmB,EAAO6jC,MAAMngC,kBAAoB,OAiK9G,OAnS+B8C,EAAA,EAAAgiC,EAAAtqC,GA4IvBsqC,EAAA/oC,UAAAkpC,gBAAP,eAAAxqC,EAAAE,KACCH,EAAAuB,UAAMkpC,gBAAevqC,KAAAC,MAErB,IAAI0E,EAAQ1E,KAAK0E,MACb8gC,EAAQxlC,KAAKwlC,MACbljC,EAAQtC,KAAKsC,MACjB,GAAIA,GAASkjC,EAAO,CAEnB,IAAI9O,EAAM12B,KAAKuqC,MACXC,EAAMhF,EAAMjiC,IACZknC,EAAkBjF,EAAMnlC,WAE5BL,KAAKi/B,SAASvyB,KAAK,SAACwyB,GACnB,GAAIA,aAAiBwL,GAAA,EAAQ,CAC5B,IAAI5lB,EAAYoa,EAAMpa,UACjB1X,EAAA,SAAe0X,KACnBA,EAAY,IAEb,IAAIC,EAAYma,EAAMna,UACjB3X,EAAA,SAAe2X,KACnBA,EAAY,GAGb,IAAI4lB,EAAaF,EAAkBD,EAAM1lB,EACrC8lB,EAAc7lB,EAAYygB,EAAMhlC,OAEpC0+B,EAAMx9B,EAAIkpC,EAAcz/B,EAAA,IAAUw/B,GAClCzL,EAAMp9B,EAAI8oC,EAAcz/B,EAAA,IAAUw/B,MAKpC,IAAIE,EAAaJ,EAAkBD,EAAM9lC,EAAM9D,SAC3CP,EAAaoqC,GAAmB,EAAI/T,EAAM12B,KAAK8qC,eAAiBN,EAAM,GAEtEp9B,EAAA,MAAY/M,KACfA,EAAaoqC,GAGd,IAGI7oC,GAAUF,EAHN8jC,EAAMhlC,OAAS2K,EAAA,IAAU0/B,GAGb/oC,EAFZ0jC,EAAMhlC,OAAS2K,EAAA,IAAU0/B,IAGjCnmC,EAAMC,SAAS/C,EAAO4jC,EAAMhlC,QAC5BkE,EAAMsgB,OAAOpjB,GAEb5B,KAAK+qC,UAAY1qC,EAEbL,KAAKgrC,iBAER7gC,EAAA,KAAWnK,KAAKgrC,gBAAiB,SAAC9+B,GACjC,IAAI++B,EAAO/+B,EAAS++B,KACpBA,EAAKhe,OAASntB,EAAKwC,MAAM4oC,eACzB,IAAIvoC,EAAQuJ,EAASkR,gBAAgB,SAErC,GAAIhQ,EAAA,SAAezK,GAAQ,CAE1B,GAAIL,EAAM6oC,UAAW,CACpB,IAAIC,EAAeH,EAAKG,aACnBh+B,EAAA,SAAeg+B,KACnBA,EAAe,GAEhBA,GAA8B,IAE9BH,EAAK5qC,WAAaoqC,EAAkBD,EAAM,EAAIA,EAAM,EAAIY,EACxDH,EAAK1nC,IAAMinC,EAAMY,OAGjBH,EAAK1nC,IAAMZ,EAAQL,EAAM+oC,WACzBJ,EAAK5qC,WAAaP,EAAKirC,UACvBjrC,EAAKirC,WAAaE,EAAK1nC,IAGnB2I,EAASo/B,SACbL,EAAK3qC,SAAW2qC,EAAK5qC,YAGtB4qC,EAAKzqC,OAASglC,EAAMngC,oBAOnBrF,KAAKurC,iBACRphC,EAAA,KAAWnK,KAAKurC,gBAAiB,SAACr/B,GACjC,IAAI++B,EAAO/+B,EAAS++B,KAIpB,GAFAA,EAAKzqC,OAASglC,EAAMngC,iBAEhB/C,EAAM6oC,UAAW,CACpB,IAAIC,EAAeH,EAAKG,aACnBh+B,EAAA,SAAeg+B,KACnBA,EAAe,GAGhBA,GAA8B,IAE9BH,EAAK3qC,SAAWmqC,EAAkBD,EAAM,EAAIA,EAAM,EAAIY,EACtDH,EAAK1nC,IAAMinC,EAAMY,MAEb,CACJH,EAAK3qC,SAAWR,EAAKirC,UACrB,IAAIpoC,EAAQuJ,EAASkR,gBAAgB,SACjChQ,EAAA,SAAezK,KAClBsoC,EAAK1nC,IAAMZ,EAAQL,EAAM+oC,WACzBvrC,EAAKirC,WAAaE,EAAK1nC,KAIpB2I,EAASs/B,WACbP,EAAK5qC,WAAa4qC,EAAK3qC,cAalB6pC,EAAA/oC,UAAAgpC,eAAV,WACC,IAAI5E,EAAQxlC,KAAKwlC,MACbiG,EAASzrC,KAAK0rC,eAAiBlG,EAAMjiC,IAAM,EAC3C/C,EAASglC,EAAMhlC,OAEfmrC,EAAKnrC,EAAS2K,EAAA,IAAUsgC,GACxBG,EAAKprC,EAAS2K,EAAA,IAAUsgC,GAExBroC,EAAQ+H,EAAA,UAAiBzJ,EAAGiqC,EAAK3rC,KAAK6B,OAAQC,EAAG8pC,EAAK5rC,KAAK+B,SAE/DyjC,EAAMnlC,WAAaL,KAAK0rC,gBAAkBtoC,EAAQqoC,GAElDzrC,KAAK2G,IAAO3G,KAAK6B,OACjB7B,KAAKyG,IAAOzG,KAAK+B,QASXooC,EAAA/oC,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACfxb,KAAK0E,MAAM6W,SAASC,EAAO9W,OAC3B1E,KAAKwlC,MAAMjqB,SAASC,EAAOgqB,QAE7B2E,EAnSA,CAA+B0B,GAAA,GA2S/BljC,EAAA,EAAShD,kBAA6B,UAAIukC,oBC3S1C4B,GAAA,SAAAjsC,GA0BC,SAAAksC,IAAA,IAAAjsC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,iBACjBL,EAAKkE,QAAUlE,EAAK6H,MAAMlG,IAAI,QAC9B3B,EAAKiB,cAAe,EAEpBjB,EAAKgO,KAAOrN,OAAA2qB,EAAA,EAAA3qB,GAEZX,EAAKqB,eAsEP,OAxGoCgH,EAAA,EAAA4jC,EAAAlsC,GA0C5BksC,EAAA3qC,UAAAyG,KAAP,WAEC,GAAGuF,EAAA,SAAepN,KAAKujC,GAAKvjC,KAAK0+B,GAAK1+B,KAAKimC,GAAKjmC,KAAKkmC,GAAKlmC,KAAKgsC,IAAMhsC,KAAKisC,KAAM,CAE/E,IAAIC,GAAexqC,EAAG1B,KAAKujC,GAAIzhC,EAAG9B,KAAKimC,IACnCkG,GAAezqC,EAAG1B,KAAK0+B,GAAI58B,EAAG9B,KAAKkmC,IACnCkG,GAAe1qC,EAAG1B,KAAKgsC,IAAKlqC,EAAG9B,KAAKisC,KAEpCltC,EAAYkiB,EAAA,OAAairB,GAAMjrB,EAAA,iBAAuBkrB,EAAIC,GAE9DpsC,KAAK6D,KAAO9E,IASd0B,OAAA+B,eAAWupC,EAAA3qC,UAAA,WAOX,WACC,OAAOpB,KAAK0C,iBAAiB,YAR9B,SAAeC,GACd3C,KAAK8C,iBAAiB,MAAOH,GAAO,oCAerClC,OAAA+B,eAAWupC,EAAA3qC,UAAA,WAOX,WACC,OAAOpB,KAAK0C,iBAAiB,YAR9B,SAAeC,GACd3C,KAAK8C,iBAAiB,MAAOH,GAAO,oCAgB9BopC,EAAA3qC,UAAA4B,gBAAP,SAAuBC,GACtB,IAAIipC,GAAMxqC,EAAE1B,KAAKujC,GAAIzhC,EAAE9B,KAAKimC,IACxBmG,GAAM1qC,EAAE1B,KAAKgsC,IAAKlqC,EAAE9B,KAAKisC,KACzBE,GAAMzqC,EAAE1B,KAAK0+B,GAAI58B,EAAE9B,KAAKkmC,IAExBmG,EAASlhC,EAAA,yBAA+B+gC,EAAIC,EAAIC,EAAInpC,GACpDqpC,EAASnhC,EAAA,yBAA+B+gC,EAAIC,EAAIC,EAAInpC,EAAW,MAEnE,OAAQvB,EAAE2qC,EAAO3qC,EAAGI,EAAEuqC,EAAOvqC,EAAGsB,MAAM+H,EAAA,SAAekhC,EAAQC,KAE/DP,EAxGA,CAAoCtN,EAAA,GCepC8N,GAAA,SAAA1sC,GAuCC,SAAA2sC,IAAA,IAAA1sC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,YAEjBL,EAAK2sC,WAAa3sC,EAAKirB,YAAY+gB,IACnChsC,EAAK2sC,WAAWhlB,aAAc,EAC9B3nB,EAAK2sC,WAAWvrC,cAAgB,EAEhCpB,EAAKqB,eA+HP,OA9K+BgH,EAAA,EAAAqkC,EAAA3sC,GAuDvB2sC,EAAAprC,UAAAiB,SAAP,WAGC,GAFAxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,OAETA,KAAK0sC,WAAY,CACrB,IAAIrsC,EAAaL,KAAKK,WAClBC,EAAWN,KAAKM,SAEhBiD,EAAMvD,KAAKuD,IACX/C,EAASR,KAAKQ,OAEdgrC,EAAWxrC,KAAKkM,SAASs/B,SACzBF,EAAStrC,KAAKkM,SAASo/B,OAEvBqB,EAAQ,EACRC,EAAQ,EAERpB,IACHmB,EAAQnB,EAAS3pC,OAAS2pC,EAAS7kC,GACnCimC,EAAQpB,EAASzpC,OAASypC,EAAS/kC,IAGpC,IAAIomC,EAAM,EACNC,EAAM,EAOV,GALIxB,IACHuB,EAAMvB,EAAOzpC,OAASypC,EAAO3kC,GAC7BmmC,EAAMxB,EAAOvpC,OAASupC,EAAO7kC,IAG1BjG,EAAS,EAAG,CACf,IAAI+iC,EAAK/iC,EAAS2K,EAAA,IAAU9K,GAAcssC,EACtC1G,EAAKzlC,EAAS2K,EAAA,IAAU9K,GAAcusC,EACtClO,EAAKl+B,EAAS2K,EAAA,IAAU7K,GAAYusC,EACpC3G,EAAK1lC,EAAS2K,EAAA,IAAU7K,GAAYwsC,EAYpCV,GAXcjhC,EAAA,IAAU7K,EAAWiD,GACrB4H,EAAA,IAAU7K,EAAWiD,GACrB4H,EAAA,IAAU9K,EAAakD,GACvB4H,EAAA,IAAU9K,EAAakD,IAQ9B7B,EAAG,EAAGI,EAAG,IAChB+B,EAAOod,EAAA,QAAevf,EAAG6hC,EAAIzhC,EAAGmkC,IAEpCpiC,GAAQod,EAAA,MAAY5gB,EAAYkD,EAAK/C,GACrCqD,GAAQod,EAAA,kBAAyBvf,EAAGg9B,EAAI58B,EAAGokC,GAAMkG,GACjDvoC,GAAQod,EAAA,MAAY3gB,EAAUiD,EAAK/C,GACnCqD,GAAQod,EAAA,kBAAyBvf,EAAG6hC,EAAIzhC,EAAGmkC,GAAMmG,GAGhDpsC,KAAKirC,KAAKpnC,KADPN,EAAM,EACQM,EAGA,GAGd7D,KAAK+wB,cACR/wB,KAAK+sC,YAAYlpC,KAAOA,EACxB7D,KAAKiyB,iBAAiB/jB,KAAOlO,KAAK+sC,aAGnC,IAAIC,EAAU3sC,EAAakD,EAAM,EAC7B0pC,EAAU3sC,EAAWiD,EAAM,EAG3BkpC,EAAazsC,KAAKysC,WAEtBA,EAAWlJ,GAAK/iC,EAAS2K,EAAA,IAAU6hC,GAAWL,EAC9CF,EAAWxG,GAAKzlC,EAAS2K,EAAA,IAAU6hC,GAAWJ,EAC9CH,EAAW/N,GAAKl+B,EAAS2K,EAAA,IAAU8hC,GAAWJ,EAC9CJ,EAAWvG,GAAK1lC,EAAS2K,EAAA,IAAU8hC,GAAWH,EAE9CL,EAAWT,IAAM,EACjBS,EAAWR,IAAM,EAEjBQ,EAAWthB,OAASnrB,KAAK8N,KAEzB9N,KAAKktC,qBAURzsC,OAAA+B,eAAWgqC,EAAAprC,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK8C,iBAAiB,SAAUH,GAAO,oCAgBxClC,OAAA+B,eAAWgqC,EAAAprC,UAAA,WAOX,WACC,OAAOpB,KAAK0C,iBAAiB,YAR9B,SAAeC,GACd3C,KAAK8C,iBAAiB,MAAOH,GAAO,oCAUtC6pC,EA9KA,CAA+BW,GAAA,GAsL/BxkC,EAAA,EAAShD,kBAA6B,UAAI4mC,GC5N1C,IAAAa,GAAA,SAAAvtC,GAgCC,SAAAwtC,IAAA,IAAAvtC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,uBACjBL,EAAKqB,eAEP,OArC0CgH,EAAA,EAAAklC,EAAAxtC,GAqC1CwtC,EArCA,CAA0CC,GAAA,GAyJ1CC,GAAA,SAAA1tC,GAkFC,SAAA2tC,IAAA,IAAA1tC,EAGCD,EAAAE,KAAAC,OAAOA,KApBDF,EAAAurC,WAAqB,EAqB3BvrC,EAAKK,UAAY,eAEjBL,EAAKO,YAAc,GACnBP,EAAKQ,SAAW,IAEhBR,EAAKU,OAASC,OAAA+mB,EAAA,EAAA/mB,CAAQ,IAEtBX,EAAKiD,aAAgB,GAErBjD,EAAK2tC,YAAc,EAEnB,IAAIC,EAAiB5tC,EAAKkxB,eAAejG,YAAYV,EAAA,UACrDqjB,EAAevb,MAAQ,SACvBub,EAAetb,OAAS,SACxBsb,EAAejmB,aAAc,EAC7BimB,EAAextC,OAAS,WACxBJ,EAAK4tC,eAAiBA,EAEtB5tC,EAAK6tC,eAAe1gB,OAASygB,EAC7B5tC,EAAKorC,eAAeje,OAASygB,EAE7B5tC,EAAKkxB,eAAe5S,OAAOC,GAAG,iBAAkBve,EAAK+C,WAAY/C,GAAM,GAGvEA,EAAKqB,eA4PP,OA1WkCgH,EAAA,EAAAqlC,EAAA3tC,GAsH1B2tC,EAAApsC,UAAAiB,SAAP,eAAAvC,EAAAE,KACKgxB,EAAiBhxB,KAAKgxB,eAGtB1wB,GAFiBN,KAAK2tC,eAEX3tC,KAAKM,UAChBD,EAAaL,KAAKK,WAAaL,KAAKytC,YAAc,EAElDtL,EAAOh3B,EAAA,WAAiBnL,KAAKK,WAAYL,KAAKM,SAAU,GAG5D6hC,EAAOh3B,EAAA,oBAA0Bg3B,GAFHzgC,EAAG,EAAGI,EAAG,EAAGkF,MAAO,EAAGE,OAAQ,KAI5D,IAAIs7B,EAAYvgC,KAAKwJ,IAAIulB,EAAejH,WAAaoY,EAAKn7B,MAAOgqB,EAAehH,YAAcmY,EAAKj7B,QAE/FkG,EAAA,SAAeo1B,KAClBA,EAAY,GAGKviB,EAAA,sBAA6BjgB,KAAKQ,OAAQgiC,GAA5D,IAEIhiC,EAASyf,EAAA,sBAA6BjgB,KAAKQ,OAAQgiC,GACnDn9B,EAAmB4a,EAAA,sBAA6BjgB,KAAK+C,YAAavC,GAAQ,GAE1E+pC,EAAQvqC,KAAKkM,SAASyF,OAAOhP,MAAM+zB,IACnCjkB,EAAQ,EAERm7B,EAAW,EACfzjC,EAAA,KAAWnK,KAAK6tC,QAAS,SAACC,GACzB,IAAIC,EAAOD,EAAQ,GACnBhuC,EAAKkuC,aAAaD,GAClBt7B,IACA,IAAI9P,EAAQorC,EAAKxD,MACdwD,EAAKxD,MAAQA,EAAQzqC,EAAKmuC,cAC5BtrC,EAAQ4nC,EAAQzqC,EAAKmuC,aAEtBL,GAAYjrC,IAGb3C,KAAKqrC,YAAc/qC,EAAWN,KAAKK,WAAaL,KAAKytC,YAAch7B,GAASm7B,EAE5EzjC,EAAA,KAAWnK,KAAK6tC,QAAS,SAACC,GACzB,IAAIC,EAAOD,EAAQ,GACftI,EAAQuI,EAAKvI,MAEjBA,EAAMhlC,OAASA,EACfglC,EAAMziC,YAAcsC,EAEpB,IAQI9B,EARAZ,EAAQorC,EAAKxD,MAEdwD,EAAKxD,MAAQA,EAAQzqC,EAAKmuC,cAC5BtrC,EAAQ4nC,EAAQzqC,EAAKmuC,aAGtBF,EAAKjD,cAAgBnoC,EAIpBY,EADGzD,EAAKqrC,WACD7qC,EAAWR,EAAKO,YAAcoS,EAAQ3S,EAAK2tC,YAG5C3tC,EAAKurC,WAAa1oC,EAGzB6iC,EAAMjiC,IAAMA,EACZiiC,EAAMnlC,WAAaA,EACnB0tC,EAAKrC,eAAiBrrC,EACtB0tC,EAAK9gB,OAASntB,EAAK6tC,eACnBI,EAAK1rC,WACLhC,GAAckD,EAAMzD,EAAK2tC,cAG1BztC,KAAK0tC,eAAe/K,aAAgBjhC,EAAGlB,EAAS2hC,EAAKzgC,EAAGI,EAAGtB,EAAS2hC,EAAKrgC,EAAGkF,MAAOxG,EAAS2hC,EAAKn7B,MAAOE,OAAQ1G,EAAS2hC,EAAKj7B,QAC9HlH,KAAK0tC,eAAevgC,mBAEpBtN,EAAAuB,UAAMiB,SAAQtC,KAAAC,OAOLwtC,EAAApsC,UAAA6R,sBAAV,WAECpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MAItBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,mBASnCo6B,EAAApsC,UAAAyI,eAAV,WACC,OAAO,IAAIujC,IA0BZ3sC,OAAA+B,eAAWgrC,EAAApsC,UAAA,kBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,mBAR9B,SAAsBC,GACrB3C,KAAK8C,iBAAiB,aAAcH,GAAO,oCAiC5ClC,OAAA+B,eAAWgrC,EAAApsC,UAAA,gBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAR9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCAiB1ClC,OAAA+B,eAAWgrC,EAAApsC,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAM,EAAO,IAAI,oCAiB3DlC,OAAA+B,eAAWgrC,EAAApsC,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAM,EAAO,IAAI,oCAkBhElC,OAAA+B,eAAWgrC,EAAApsC,UAAA,iBASX,WACC,OAAOpB,KAAK0C,iBAAiB,kBAV9B,SAAqBC,GACpB3C,KAAK8C,iBAAiB,YAAaH,GAAO,GAC1C3C,KAAKkuC,MAAMvtC,SAAS8rC,WAAWvrC,cAAgB,EAC/ClB,KAAKkuC,MAAMvtC,SAASsqC,KAAKjgB,YAAc,mCAajCwiB,EAAApsC,UAAA+sC,WAAP,WACC,IAAIJ,EAAO,IAAI7D,GAEf,OADAlqC,KAAK+J,WAAWC,KAAK+jC,GACdA,GAMDP,EAAApsC,UAAAgtC,WAAP,WACC,IAAInD,EAAO,IAAIsB,GAEf,OADAvsC,KAAK+J,WAAWC,KAAKihC,GACdA,GAGTuC,EA1WA,CAAkCF,GAAA,GAkXlC3kC,EAAA,EAAShD,kBAAgC,aAAI4nC,iCC7gB7Cc,GAAA,SAAAxuC,GAuCC,SAAAyuC,IAAA,IAAAxuC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,uBAEjBL,EAAKkJ,UAAiB,MAAI,GAC1BlJ,EAAKkJ,UAAiB,MAAI,GAE1BlJ,EAAKkJ,UAAqB,UAAI,GAC9BlJ,EAAKkJ,UAAqB,UAAI,GAE9BlJ,EAAKqB,eAuDP,OAxG0CgH,EAAA,EAAAmmC,EAAAzuC,GAyDzCY,OAAA+B,eAAW8rC,EAAAltC,UAAA,cAOX,WACC,OAAOpB,KAAKuuC,aARb,SAAkBC,GACjBxuC,KAAKyuC,UAAUD,oCAUNF,EAAAltC,UAAAqtC,UAAV,SAAoBD,GAApB,IAAA1uC,EAAAE,KAMC,GALIA,KAAKuuC,SAAWC,GAAUxuC,KAAKuuC,SAClCpxB,EAAA,OAAcnd,KAAKq2B,QAASr2B,KAAKuuC,SAElCvuC,KAAKuuC,QAAUC,EAEXA,EAAQ,CACX,IAAInoB,EAA0CmoB,EAAOtiC,SACjDma,GAAgBA,GAAgBrmB,OACnCqmB,EAAamoB,YAAS9gC,GAEvB1N,KAAK0uC,UAAUF,GAEfxuC,KAAK+J,WAAWC,KAAK,IAAI0T,EAAA,EAAS,WAG7B5d,EAAKgK,WACRhK,EAAKgK,UAAU6kC,QAAQjtB,YAAY8sB,QAYvC/tC,OAAA+B,eAAW8rC,EAAAltC,UAAA,qBAAX,WAIC,OAHKpB,KAAK4uC,iBACT5uC,KAAK4uC,eAAiB,IAAIllC,EAAA,GAEpB1J,KAAK4uC,gDAGdN,EAxGA,CAA0CpyB,GAoK1C2yB,GAAA,SAAAhvC,GAyGC,SAAAivC,IAAA,IAAAhvC,EACCD,EAAAE,KAAAC,OAAOA,KA9CEF,EAAAivC,eAAyB,EAOzBjvC,EAAAkvC,aAAuB,EAiC1BlvC,EAAAmvC,sBAAgC,EAOtCnvC,EAAKK,UAAY,eAEjBL,EAAKkH,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACrBX,EAAKoH,OAASzG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAEtBX,EAAKoB,cAAgB,EACrBpB,EAAKkrB,YAAc,EAEnBlrB,EAAKovC,WAAY,EAEjB,IAAIC,EAAmBrvC,EAAKie,cAAcgN,YAAYV,EAAA,UACtD8kB,EAAiB1nB,aAAc,EAC/B0nB,EAAiB/uC,YAAa,EAC9B+uC,EAAiBjvC,OAAS,OAC1BJ,EAAKsvC,kBAAoBD,EAEzBrvC,EAAK6uC,QACL7uC,EAAK6uC,QAAQhuC,SAASI,cAAe,EAErCjB,EAAKm9B,mBAAqBn9B,EAAK6uC,QAAQhuC,SAEvCb,EAAKqB,eAqwBP,OAr4BkCgH,EAAA,EAAA2mC,EAAAjvC,GAwIjCY,OAAA+B,eAAWssC,EAAA1tC,UAAA,wBAAX,WACC,OAAOpB,KAAKovC,mDAOHN,EAAA1tC,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MACtBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,mBAUnC07B,EAAA1tC,UAAAyI,eAAV,WACC,OAAO,IAAIwkC,IAQLS,EAAA1tC,UAAAiB,SAAP,eAAAvC,EAAAE,KAIKqvC,EAAiBrvC,KAAKsC,MAAMgI,OAC5BglC,EAAuB,EACvBxkC,EAAgB,EAEpBX,EAAA,KAAWklC,EAAehlC,WAAY,SAACC,GAClCA,aAAkBwkC,GACjBhvC,EAAKuU,UAAY/J,EAAO+J,aACrB/J,EAAO4T,SAAW5T,EAAO4kC,WAA+B,IAAjBI,IAC5CA,IAGGhlC,GAAUxK,IACbgL,EAAQwkC,EAAe,MAM3B,IAAI5rC,EAAW1D,KAAKqU,SAAS3Q,SAEzB6rC,EAA4B7rC,EAAS6rC,kBACrCtO,EAA0Bv9B,EAASu9B,gBAEvCjhC,KAAK+uC,eAAiBQ,EAAqBzkC,EAAQwkC,GAAiBrO,EAAkBsO,GACtFvvC,KAAKgvC,aAAeO,GAAqBzkC,EAAQ,GAAKwkC,GAAgBrO,EAAkBsO,GAExF1vC,EAAAuB,UAAMiB,SAAQtC,KAAAC,MAEd,IAAK,IAAIiM,EAAI,EAAGA,EAAIjM,KAAK6K,WAAYoB,IAAK,CACzC,IAAIC,EAAWlM,KAAKkL,UAAUiB,SAASF,GACvCjM,KAAKwvC,qBAAqBtjC,GAG3B,IAASD,EAAIjM,KAAKkL,UAAU3G,OAAS,EAAG0H,EAAIjM,KAAK+K,SAAUkB,IAAK,CAC3DC,EAAWlM,KAAKkL,UAAUiB,SAASF,GACvCjM,KAAKwvC,qBAAqBtjC,KAUrB4iC,EAAA1tC,UAAAqL,oBAAP,SAA2BP,GAE1BlM,KAAKyvC,wBAAwBvjC,GAC7BrM,EAAAuB,UAAMqL,oBAAmB1M,KAAAC,KAACkM,IASjB4iC,EAAA1tC,UAAAsuC,iBAAV,SAA2BxjC,GAC1B,IAAIyC,EAAgB3O,KAAK+uC,eAQzB,OANI/uC,KAAKqU,UAAYrU,KAAKuK,MACzBoE,GAAiBzC,EAASlD,UAAUhJ,KAAKggB,YAAc,GAGvDrR,GAAiBzC,EAASlD,UAAUhJ,KAAKogB,YAAc,GAEjDzR,GAQDmgC,EAAA1tC,UAAA4kB,iCAAP,SAAwC9Z,EAA8BkT,GACjEpf,KAAKivC,qBACRjvC,KAAKyM,oBAAoBP,GAGzBrM,EAAAuB,UAAM4kB,iCAAgCjmB,KAAAC,KAACkM,EAAUkT,IAUzC0vB,EAAA1tC,UAAAuuC,eAAV,SAAyBzjC,GACxB,IAAI0C,EAAc5O,KAAKgvC,aAQvB,OANIhvC,KAAKqU,UAAYrU,KAAKuK,MACzBqE,GAAe1C,EAASlD,UAAUhJ,KAAK+f,QAAU,GAGjDnR,GAAe1C,EAASlD,UAAUhJ,KAAKmgB,QAAU,GAE3CvR,GASDkgC,EAAA1tC,UAAAquC,wBAAP,SAA+BvjC,GAA/B,IAEK0jC,EACAxJ,EACAyJ,EACA9iC,EALLjN,EAAAE,KAOK2O,EAAgB3O,KAAK0vC,iBAAiBxjC,GACtC0C,EAAc5O,KAAK2vC,eAAezjC,GAElC6T,EAAS/f,KAAK+f,OACdC,EAAahgB,KAAKggB,WAClBG,EAASngB,KAAKmgB,OACdC,EAAapgB,KAAKogB,WAElBzf,EAAmBX,KAAK2uC,QAAQhuC,SAEhCyqC,EAAuBzqC,EAASyqC,aAChC0E,EAAwBnvC,EAASmvC,cAEjChpC,EAAqBnG,EAASmG,WAC9BG,EAAsBtG,EAASsG,YAE/B+yB,EAAmBr5B,EAASq5B,SAC5BC,EAAoBt5B,EAASs5B,UAE7BjH,EAAsBryB,EAAS6G,iBAC/ByrB,EAAuBtyB,EAAS8G,kBAChCsoC,EAAqBpvC,EAAS4G,gBAC9ByoC,EAAwBrvC,EAAS2G,mBAEjC2oC,GAAuB,EAG3B,GAAKjwC,KAAKuK,iBAAiBhB,GAAkBvJ,KAAKwK,iBAAiBjB,EAAe,CAEjF,IAAK2C,EAASuY,SAASzkB,KAAK4d,iBAAmB1R,EAASuY,SAASzkB,KAAK6d,eACrE,OAKD,GAFAlP,EAAgB,EAChBC,EAAc,GACTxB,EAAA,MAAYg+B,GAEhBz8B,GADIuhC,EAAiB/kC,EAAA,OAAayD,EAAcD,IAAkB,EAAIy8B,EAAe,KAAO,EAAG,GAE/Fx8B,GAAeshC,EAOhB,GAJAN,EAAI5vC,KAAKuK,MAAM4F,KAAKjE,EAAU8T,EAAYrR,GAC1Cy3B,EAAIpmC,KAAKuK,MAAM4F,KAAKjE,EAAU6T,EAAQnR,GAGlCxB,EAAA,MAAYg+B,GAEfwE,GADIM,GAAmB9J,EAAIwJ,EAAK9oC,GAAc,EAE9Cs/B,GAAK8J,EAIN,IAAK9iC,EAAA,MAAY4sB,GAEhB4V,GADIM,GAAmB9J,EAAIwJ,EAAK5V,GAAY,EAE5CoM,GAAK8J,EAMN,GAHAvhC,EAAgB,EAChBC,EAAc,GAETxB,EAAA,MAAY0iC,GAEhBnhC,GADIuhC,EAAiB/kC,EAAA,OAAa,EAAI2kC,EAAgB,KAAO,EAAG,GAEhElhC,GAAeshC,EAOhB,GAJAL,EAAI7vC,KAAKwK,MAAM+F,KAAKrE,EAAUkU,EAAYzR,GAC1C5B,EAAI/M,KAAKwK,MAAM+F,KAAKrE,EAAUiU,EAAQvR,GAGlCxB,EAAA,MAAY0iC,GAEf/iC,GADImjC,GAAmBnjC,EAAI8iC,EAAK5oC,GAAe,EAE/C4oC,GAAKK,EAIN,IAAK9iC,EAAA,MAAY6sB,GAEhBltB,GADImjC,GAAmBnjC,EAAI8iC,EAAK5V,GAAa,EAE7C4V,GAAKK,EAGN9J,EAAIpmC,KAAKmwC,wBAAwB/J,GACjCwJ,EAAI5vC,KAAKmwC,wBAAwBP,GACjCC,EAAI7vC,KAAKowC,sBAAsBP,GAC/B9iC,EAAI/M,KAAKowC,sBAAsBrjC,QAE3B,GAAI/M,KAAKqU,UAAYrU,KAAKuK,MAAO,CAErC,IAAK2B,EAASuY,SAASzkB,KAAK6d,eAC3B,OAID,IAAKzQ,EAAA,MAAYg+B,GAEhBz8B,GADIuhC,EAAiB/kC,EAAA,OAAayD,EAAcD,IAAkB,EAAIy8B,EAAe,KAAO,EAAG,GAE/Fx8B,GAAeshC,EAOhB,GAJAN,EAAI5vC,KAAKuK,MAAM4F,KAAKjE,EAAU8T,EAAYrR,GAC1Cy3B,EAAIpmC,KAAKuK,MAAM4F,KAAKjE,EAAU6T,EAAQnR,GAGlCxB,EAAA,MAAYg+B,GAEfwE,GADIM,GAAmB9J,EAAIwJ,EAAK9oC,GAAc,EAE9Cs/B,GAAK8J,EAIN,IAAK9iC,EAAA,MAAY4sB,GAEhB4V,GADIM,GAAmB9J,EAAIwJ,EAAK5V,GAAY,EAE5CoM,GAAK8J,EAGN,IAAIG,EAAiBnkC,EAASlD,UAAUoX,GACpCkwB,EAAcpkC,EAASlD,UAAUmX,GAEjCngB,KAAKwK,iBAAiBwH,EAAA,IACzBq+B,EAAiB,EACjBC,EAAc,GAGfvjC,EAAI/M,KAAKwK,MAAM+F,KAAKrE,EAAUkU,EAAYiwB,GAC1CR,EAAI7vC,KAAKwK,MAAM+F,KAAKrE,EAAUiU,EAAQmwB,GAItCT,EAAI7vC,KAAKowC,sBAAsBP,GAC/B9iC,EAAI/M,KAAKowC,sBAAsBrjC,GAE3B9K,KAAKyX,IAAI0sB,EAAIwJ,GAAK5c,EAAcC,GAAgB,IACnDgd,GAAc,OAIX,CACJ,IAAK/jC,EAASuY,SAASzkB,KAAK4d,eAC3B,OAIA,IAiBIsyB,EAlBL,IAAK9iC,EAAA,MAAY0iC,GAEhBnhC,GADIuhC,EAAiB/kC,EAAA,OAAayD,EAAcD,IAAkB,EAAImhC,EAAgB,KAAO,EAAG,GAEhGlhC,GAAeshC,EAOhB,GAJAL,EAAI7vC,KAAKwK,MAAM+F,KAAKrE,EAAUkU,EAAYzR,GAC1C5B,EAAI/M,KAAKwK,MAAM+F,KAAKrE,EAAUiU,EAAQvR,GAGlCxB,EAAA,MAAY0iC,GAEf/iC,GADImjC,GAAmBnjC,EAAI8iC,EAAK5oC,GAAe,EAE/C4oC,GAAKK,EAIN,IAAK9iC,EAAA,MAAY6sB,GAEhBltB,GADImjC,GAAmBnjC,EAAI8iC,EAAK5V,GAAa,EAE7C4V,GAAKK,EAGN,IAAIK,EAAgBrkC,EAASlD,UAAU+W,GACnCywB,EAAetkC,EAASlD,UAAUgX,GAElChgB,KAAKuK,iBAAiByH,EAAA,IACzBu+B,EAAgB,EAChBC,EAAe,GAGhBpK,EAAIpmC,KAAKuK,MAAM4F,KAAKjE,EAAU6T,EAAQwwB,GACtCX,EAAI5vC,KAAKuK,MAAM4F,KAAKjE,EAAU8T,EAAYwwB,GAG1CpK,EAAIpmC,KAAKmwC,wBAAwB/J,GACjCwJ,EAAI5vC,KAAKmwC,wBAAwBP,GAE7B3tC,KAAKyX,IAAIm2B,EAAI9iC,GAAKgjC,EAAaC,GAAiB,IACnDC,GAAc,GAIhB,IAOKQ,EAPDhlB,EAAYxpB,KAAKyX,IAAI0sB,EAAIwJ,GACzBjkB,EAAY1pB,KAAKyX,IAAI3M,EAAI8iC,GAEzBnuC,EAAYO,KAAKwJ,IAAImkC,EAAGxJ,GACxBtkC,EAAYG,KAAKwJ,IAAIokC,EAAG9iC,GAEvBkjC,EAgGJjwC,KAAKwvC,qBAAqBtjC,IA9FrBA,EAASsiC,OAqCbiC,EAASvkC,EAASsiC,QApClBiC,EAASzwC,KAAK2uC,QAAQ94B,SAEtBX,EAAA,eAAuBlV,KAAMywC,EAAQzyB,EAAA,GACrC9I,EAAA,eAAuBlV,KAAK2uC,QAAQhuC,SAAU8vC,EAAQzyB,EAAA,GACtD9R,EAASwiC,UAAU+B,GAEnBvkC,EAASsiC,OAASiC,EAGdzwC,KAAK0wC,kBACRD,EAAOE,KAAO,WACdF,EAAOG,WAAY,IAGnBH,EAAOE,KAAO,WACdF,EAAOG,WAAY,GAGhBH,EAAOG,YACVH,EAAOryB,OAAOyyB,KAAK,QAAS,SAACC,GAC5BL,EAAOlyB,YAAcze,EAAKixC,eAAejxC,EAAKsnB,eAAgBlb,SAC5DwB,GAAW,GACd+iC,EAAOryB,OAAOyyB,KAAK,OAAQ,SAACC,GAC3BL,EAAOlyB,YAAc,SACnB7Q,GAAW,IAEX+iC,EAAOrW,YACVqW,EAAOryB,OAAOyyB,KAAK,OAAQ,SAACC,GAC3BL,EAAOlyB,YAAcze,EAAKixC,eAAejxC,EAAKsnB,eAAgBlb,SAC5DwB,GAAW,GACd+iC,EAAOryB,OAAOyyB,KAAK,MAAO,SAACC,GAC1BL,EAAOlyB,YAAc,SACnB7Q,GAAW,KAOhB+iC,EAAOzpC,MAAQykB,EACfglB,EAAOvpC,OAASykB,EAEhB8kB,EAAO/uC,EAAIA,EACX+uC,EAAO3uC,EAAIA,EAEX2uC,EAAOO,MAAQpB,EACfa,EAAOQ,MAAQpB,EAEfY,EAAOS,UAAY9K,EAAIwJ,EACvBa,EAAOU,WAAapkC,EAAI8iC,EAExBY,EAAOxjB,OAASjtB,KAAKmvC,iBACrBsB,EAAOW,cAAgBpxC,KAEvBA,KAAKqxC,gBAAgBZ,GAEjBA,EAAOluC,SACVkuC,EAAOpuC,WAGRouC,EAAOrkC,YAAa,EAGpBjC,EAAA,KAAWnK,KAAK+gB,WAAW1W,WAAY,SAAC4uB,GACvC,IAAIqY,EAA+BplC,EAASqlC,cAAcjjC,OAAO2qB,EAAUpkB,KACtEy8B,IACJA,EAAcxxC,EAAK6uC,QAAQ94B,SAG3BX,EAAA,eAAuB+jB,EAAUyE,SAAU4T,EAAatzB,EAAA,GAExD9R,EAASwiC,UAAU4C,GACnBplC,EAASqlC,cAAc/iC,OAAOyqB,EAAUpkB,IAAay8B,IAGtDA,EAAYrkB,OAASgM,EAAUyE,SAE/B4T,EAAYtqC,MAAQykB,EACpB6lB,EAAYpqC,OAASykB,EACrB2lB,EAAY5vC,EAAIA,EAChB4vC,EAAYxvC,EAAIA,EAEhBhC,EAAKuxC,gBAAgBC,GAEjBA,EAAY/uC,SACf+uC,EAAYjvC,WAGbivC,EAAYllC,YAAa,KAQ3BF,EAASslC,UAAY/lB,EACrBvf,EAASulC,WAAa9lB,GAIvBmjB,EAAA1tC,UAAAouC,qBAAA,SAAqBtjC,GAChBA,IACCA,EAASsiC,SAEZtiC,EAASsiC,OAAOxnC,MAAQ,EACxBkF,EAASsiC,OAAOtnC,OAAS,EACzBgF,EAASsiC,OAAOpiC,YAAa,GAG9BjC,EAAA,KAAWnK,KAAK+gB,WAAW1W,WAAY,SAAC4uB,GACvC,IAAIqY,EAAsBplC,EAASqlC,cAAcjjC,OAAO2qB,EAAUpkB,KAC9Dy8B,IAEHA,EAAYtqC,MAAQ,EACpBsqC,EAAYpqC,OAAS,EACrBoqC,EAAYllC,YAAa,OAanB0iC,EAAA1tC,UAAAiwC,gBAAV,SAA0B/a,GAEzB,IAAIpqB,EAAiDoqB,EAAOpqB,SAE5D,GAAIlM,KAAKuK,iBAAiByH,EAAA,GAAahS,KAAKwK,iBAAiBwH,EAAA,EAAW,CACvE,IAAI0/B,EACA/uC,OAAK,EACLgvC,OAAM,EAEN3xC,KAAKqU,UAAYrU,KAAKwK,MACrBxK,KAAKggB,YAAchgB,KAAK+f,SAC3B2xB,EAAOxlC,EAAS8M,SAAShZ,KAAKggB,YAC9Brd,EAAQuJ,EAAS8M,SAAShZ,KAAK+f,QAC/B4xB,EAASzlC,EAAS8M,SAAShZ,KAAKuK,MAAMZ,cAAgB,IAAK,mBAIxD3J,KAAKogB,YAAcpgB,KAAKmgB,SAC3BuxB,EAAOxlC,EAAS8M,SAAShZ,KAAKogB,YAC9Bzd,EAAQuJ,EAAS8M,SAAShZ,KAAKmgB,QAC/BwxB,EAASzlC,EAAS8M,SAAShZ,KAAKwK,MAAMb,cAAgB,IAAK,mBAIzDhH,EAAQ+uC,GACXxlC,EAAS0lC,iBAAkB,EAC3Btb,EAAOhR,aAAa/J,SAASvb,KAAK6xC,oBAClCvb,EAAOwb,SAAS9xC,KAAK6xC,mBAAoB,KAGzC3lC,EAAS0lC,iBAAkB,EAC3Btb,EAAOhR,aAAa/J,SAASvb,KAAK+xC,oBAClCzb,EAAOwb,SAAS9xC,KAAK+xC,mBAAoB,IAGtCJ,EAAS,GACZzlC,EAAS8lC,qBAAsB,EAC/B1b,EAAOhR,aAAa/J,SAASvb,KAAKiyC,wBAClC3b,EAAOwb,SAAU9xC,KAA2B,uBAAG,KAG/CkM,EAAS8lC,qBAAsB,EAC/B1b,EAAOhR,aAAa/J,SAASvb,KAAKkyC,wBAClC5b,EAAOwb,SAAU9xC,KAA2B,uBAAG,MAUlDS,OAAA+B,eAAWssC,EAAA1tC,UAAA,eAAX,WAMC,OALKpB,KAAKmyC,WACTnyC,KAAKmyC,SAAW,IAAI//B,EAAA,EAA8BpS,KAAKoyC,wBACvDpyC,KAAK+J,WAAWC,KAAK,IAAIoI,EAAA,EAAapS,KAAKmyC,WAC3CnyC,KAAK+J,WAAWC,KAAKhK,KAAKmyC,SAASxxC,WAE7BX,KAAKmyC,0CAQHrD,EAAA1tC,UAAAgxC,qBAAV,WACC,OAAO,IAAIC,GAAA,GAWZ5xC,OAAA+B,eAAWssC,EAAA1tC,UAAA,iBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,kBAR9B,SAAqBC,GACpB3C,KAAK8C,iBAAiB,YAAaH,GAAO,oCAoB3ClC,OAAA+B,eAAWssC,EAAA1tC,UAAA,yBAAX,WAIC,OAHKpB,KAAK6xC,qBACT7xC,KAAK6xC,mBAAqB7xC,KAAK4uB,OAAO/Y,OAAO,sBAEvC7V,KAAK6xC,oDAYbpxC,OAAA+B,eAAWssC,EAAA1tC,UAAA,6BAAX,WAIC,OAHKpB,KAAKiyC,yBACTjyC,KAAKiyC,uBAAyBjyC,KAAK4uB,OAAO/Y,OAAO,0BAE3C7V,KAAKiyC,wDAcbxxC,OAAA+B,eAAWssC,EAAA1tC,UAAA,yBAAX,WAIC,OAHKpB,KAAK+xC,qBACT/xC,KAAK+xC,mBAAqB/xC,KAAK4uB,OAAO/Y,OAAO,sBAEvC7V,KAAK+xC,oDAYbtxC,OAAA+B,eAAWssC,EAAA1tC,UAAA,6BAAX,WAIC,OAHKpB,KAAKkyC,yBACTlyC,KAAKkyC,uBAAyBlyC,KAAK4uB,OAAO/Y,OAAO,0BAE3C7V,KAAKkyC,wDASNpD,EAAA1tC,UAAAiiB,kBAAP,SAAyBnX,GAAzB,IAAApM,EAAAE,KAGC,GAFAH,EAAAuB,UAAMiiB,kBAAiBtjB,KAAAC,KAACkM,GAEpBlM,KAAK4+B,eAAgB,CACxB,IACI0T,EACAC,EAFAhU,EAAoBv+B,KAAK4+B,eAAeL,OAIxCryB,IAEFomC,EADGpmC,EAAS0lC,gBACI5xC,KAAK6xC,mBAGL7xC,KAAK+xC,mBAIrBQ,EADGrmC,EAAS8lC,oBACQhyC,KAAKiyC,uBAGLjyC,KAAKkyC,wBAI3B/nC,EAAA,KAAWo0B,EAAOU,SAAS50B,WAAY,SAAC60B,GACnChzB,GACHgzB,EAAM4S,SAASS,GACfrT,EAAM4S,SAASQ,KAIfpT,EAAM4S,SAAShyC,EAAKoyC,wBACpBhT,EAAM4S,SAAShyC,EAAKiyC,yBAajBjD,EAAA1tC,UAAAk9B,mBAAP,SAA0BC,GACzB,IAAI9S,EAAY8S,EAAOz3B,WACnB6kB,EAAY4S,EAAOt3B,YAEvBs3B,EAAOiU,iBAEP,IAAIhE,EAA2BjQ,EAAOxT,YAAY0nB,GAAA,GAClDjE,EAAO/mB,aAAc,EACrBvS,EAAA,eAAuBlV,KAAMwuC,EAAQxwB,EAAA,GAErCwwB,EAAOjzB,SAAcvb,KAAK2uC,QAAQhuC,UAClC6tC,EAAOpoC,QAAQ,EAAG,EAAG,EAAG,GACxBooC,EAAOxnC,MAAQykB,EACf+iB,EAAOtnC,OAASykB,EAEhB,IAAIiT,EAAiCL,EAAOryB,SAC5C0yB,EAAeC,MAAQ7+B,KAAK8N,KAC5B8wB,EAAeE,UAAY9+B,KAAK8N,MAQ1BghC,EAAA1tC,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACfxb,KAAK2uC,QAAQhuC,SAAS4a,SAASC,EAAOmzB,QAAQhuC,WAQrCmuC,EAAA1tC,UAAAujB,mBAAV,SAA6BL,EAAgBhJ,GAC5C,OAAItb,KAAKqU,UAAYrU,KAAKuK,OACjBvK,KAAK+uC,eAAiB/uC,KAAKgvC,cAAgB,EAG5CnvC,EAAAuB,UAAMujB,mBAAkB5kB,KAAAC,KAACskB,EAAQhJ,IAShCwzB,EAAA1tC,UAAAyjB,mBAAV,SAA6BP,EAAgBhJ,GAC5C,OAAItb,KAAKqU,UAAYrU,KAAKwK,OACjBxK,KAAK+uC,eAAiB/uC,KAAKgvC,cAAgB,EAG5CnvC,EAAAuB,UAAMyjB,mBAAkB9kB,KAAAC,KAACskB,EAAQhJ,IAOhCwzB,EAAA1tC,UAAAgvC,sBAAV,SAAgCltC,GAC/B,IAAI8sC,EAAgBhwC,KAAK2uC,QAAQhuC,SAAS2G,mBAGtC6a,GAFaniB,KAAK2uC,QAAQhuC,SAAS4G,gBAGnC6a,EAAepiB,KAAKwK,MAAMnH,WAAa2sC,EAE3C,OAAO7kC,EAAA,WAAiBjI,EAAYif,EAAMC,IAMjC0sB,EAAA1tC,UAAA+uC,wBAAV,SAAkCjtC,GACjC,IAAI8vB,EAAchzB,KAAK2uC,QAAQhuC,SAAS6G,iBACpCyrB,EAAejzB,KAAK2uC,QAAQhuC,SAAS8G,kBAErCua,GAAgBgR,EAChB9Q,EAAeliB,KAAKuK,MAAMlH,WAAa4vB,EAE3C,OAAO9nB,EAAA,WAAiBjI,EAAY8e,EAAME,IAE5C4sB,EAr4BA,CAAkCvxB,GA64BlC5U,EAAA,EAAShD,kBAAgC,aAAIkpC,GAC7ClmC,EAAA,EAAShD,kBAAwC,qBAAI0oC,GC5jCrD,IAAAqE,GAAA,SAAA7yC,GAYC,SAAA8yC,IAAA,IAAA7yC,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,wBAEjBL,EAAKqB,eAwDP,OAxE2CgH,EAAA,EAAAwqC,EAAA9yC,GA8C1CY,OAAA+B,eAAWmwC,EAAAvxC,UAAA,kBAAX,WACC,IAAIwxC,EAAkB5yC,KAAK4yC,gBAC3B,GAAIA,GAAmBA,EAAgB3lB,OACtC,OAAO2lB,EAAgB3lB,OAAO7N,sCAUhC3e,OAAA+B,eAAWmwC,EAAAvxC,UAAA,aAAX,WACC,OAAOpB,KAAK4yC,gBAAgBjwC,uCAS7BlC,OAAA+B,eAAWmwC,EAAAvxC,UAAA,uBAAX,WACC,OAAwBpB,KAAK6yC,8CAE/BF,EAxEA,CAA2CtE,IAiI3CyE,GAAA,SAAAjzC,GAwDC,SAAAkzC,IAAA,IAAAjzC,EACCD,EAAAE,KAAAC,OAAOA,KAEPF,EAAKK,UAAY,gBACjBL,EAAKqB,aAELrB,EAAKkrB,YAAc,EACnBlrB,EAAKoB,cAAgB,EACrBpB,EAAKshB,kBAAoB,EACzBthB,EAAK6uC,QAAQhuC,SAAS0jB,YAAc,+BACpCvkB,EAAK6uC,QAAQhuC,SAASqyC,YAAc,SAEpC,IAAIpoB,EAAkB,IAAIC,EAAA,SAE1B/qB,EAAKqrB,OAASP,EAAgBK,OAAO,cACrCnrB,EAAKkf,WAAW1C,WAAa,KAC7Bxc,EAAKkf,WAAW5C,OAAS,KACzBtc,EAAKkf,WAAWzC,WAAa,KAC7Bzc,EAAKkf,WAAW3C,OAAS,KAEzBvc,EAAK2lB,wBAAyB,EAE9B3lB,EAAK4vB,YAAa,EAGlB5vB,EAAK6uC,QAAQhuC,SAASI,cAAe,IA8JvC,OA/OmCoH,EAAA,EAAA4qC,EAAAlzC,GA2FxBkzC,EAAA3xC,UAAA+M,gBAAV,SAA0BjC,EAA6BkC,GACpCA,EAAa2B,eAAiB7D,EAChDrM,EAAAuB,UAAM+M,gBAAepO,KAAAC,KAACkM,EAAUkC,IASvB2kC,EAAA3xC,UAAAyI,eAAV,WACC,OAAO,IAAI6oC,IASLK,EAAA3xC,UAAA8jB,KAAP,SAAY/M,GAEX,IAAIkN,EAAwBrlB,KAAKslB,aAAaC,mBAC3CnY,EAAA,SAAe+K,KACjBkN,EAAwBlN,GAGzBnY,KAAKkL,UAAUwB,KAAK,SAACR,GACpBA,EAAS0mC,gBAAgB/V,gBAAgB,QAAS3wB,EAAS0mC,gBAAgBjhC,OAAOhP,MAAMA,SAGzF,IAAIgjB,EAAY9lB,EAAAuB,UAAM6xC,SAAQlzC,KAAAC,KAACqlB,GAC3B/iB,EAAQtC,KAAKsC,MAYjB,OAXGA,IACEqjB,IAAcA,EAAUC,aAC3BD,EAAUvH,OAAOC,GAAG,iBAAkB,WACrC/b,EAAM6K,qBAIP7K,EAAM6K,mBAEP7K,EAAM6K,oBAEAwY,GASDotB,EAAA3xC,UAAAykB,KAAP,SAAY1N,GAEX,IAAIkN,EAAwBrlB,KAAKslB,aAAaC,mBAC3CnY,EAAA,SAAe+K,KACjBkN,EAAwBlN,GAGzB,IAAIwN,EAAY9lB,EAAAuB,UAAMwnB,SAAQ7oB,KAAAC,KAACqlB,GAE/BrlB,KAAKkL,UAAUwB,KAAK,SAACR,GACpBA,EAAS0mC,gBAAgB/V,gBAAgB,QAAS,KAGnD,IAAIv6B,EAAQtC,KAAKsC,MAYjB,OAXGA,IACEqjB,IAAcA,EAAUC,aAC3BD,EAAUvH,OAAOC,GAAG,iBAAkB,WACrC/b,EAAM6K,qBAIP7K,EAAM6K,mBAEP7K,EAAM6K,oBAEAwY,GAQDotB,EAAA3xC,UAAA2gB,cAAP,aAUOgxB,EAAA3xC,UAAAod,iBAAP,aAUOu0B,EAAA3xC,UAAAulB,cAAP,SAAqBC,GAEhBA,IAIExZ,EAAA,SAAewZ,EAAO5H,aAAgB5R,EAAA,SAAewZ,EAAO5H,cAChE4H,EAAO5H,gBAKTnf,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,IAUdmsB,EAAA3xC,UAAAk9B,mBAAP,SAA0BC,GACzB,IAAI9S,EAAY8S,EAAOz3B,WACnB6kB,EAAY4S,EAAOt3B,YAEvBs3B,EAAOiU,iBAEP,IAAIhE,EAA2BjQ,EAAOxT,YAAY0nB,GAAA,GAClDjE,EAAO/mB,aAAc,EACrBvS,EAAA,eAAuBlV,KAAMwuC,EAAQxwB,EAAA,GAGrCwwB,EAAOpoC,QAAQ,EAAG,EAAG,EAAG,GACxBooC,EAAOxnC,MAAQykB,EACf+iB,EAAOtnC,OAASykB,EAEhB,IAAIiT,EAAiCL,EAAOryB,SAC5C0yB,EAAeC,MAAQ2P,EAAO1gC,KAC9B8wB,EAAeE,UAAY0P,EAAO1gC,MAEpCilC,EA/OA,CAAmClE,IAuPnClmC,EAAA,EAAShD,kBAAiC,cAAImtC,GAC9CnqC,EAAA,EAAShD,kBAAyC,sBAAI+sC,oBC9WtDQ,GAAA,SAAArzC,GAyDC,SAAAszC,IAAA,IAAArzC,EACCD,EAAAE,KAAAC,OAAOA,YAtBDF,EAAAszC,QAuBNtzC,EAAKK,UAAY,kBAEjBL,EAAK6R,OAAOhP,SAEZ7C,EAAK6R,OAAO2xB,MAEZxjC,EAAK6R,OAAOo0B,MAEZjmC,EAAK6R,OAAO4xB,MAEZzjC,EAAK6R,OAAOs0B,MAEZnmC,EAAKuzC,YAAYpU,UAAW,EAE5Bn/B,EAAKqB,eAqNP,OA9RqCgH,EAAA,EAAAgrC,EAAAtzC,GAiFpCY,OAAA+B,eAAW2wC,EAAA/xC,UAAA,aAOX,WACC,IAAIuB,EAAQ3C,KAAK2R,OAAc,MAAEirB,aAYjC,OAVKxvB,EAAA,SAAezK,KACnBA,EAAQ,EACJ3C,KAAKi/B,UACR90B,EAAA,KAAWnK,KAAKi/B,SAAS50B,WAAY,SAAC60B,GACjC9xB,EAAA,SAAe8xB,EAAMv8B,SACxBA,GAASu8B,EAAMv8B,UAKZA,OApBR,SAAiBA,GAChB3C,KAAK2c,SAAS,QAASha,oCAsBxBlC,OAAA+B,eAAW2wC,EAAA/xC,UAAA,eAAX,WACC,OAAIpB,KAAKitB,OACDjtB,KAAK2C,MAAQ3C,KAAKitB,OAAOtqB,MAAQ,IAElC,qCAURlC,OAAA+B,eAAW2wC,EAAA/xC,UAAA,UAOX,WACC,OAAOpB,KAAK2R,OAAO2xB,GAAG3gC,WARvB,SAAcA,GACb3C,KAAK2c,SAAS,KAAMha,oCAiBrBlC,OAAA+B,eAAW2wC,EAAA/xC,UAAA,UAOX,WACC,OAAOpB,KAAK2R,OAAO4xB,GAAG5gC,WARvB,SAAcA,GACb3C,KAAK2c,SAAS,KAAMha,oCAiBrBlC,OAAA+B,eAAW2wC,EAAA/xC,UAAA,UAOX,WACC,OAAOpB,KAAK2R,OAAOo0B,GAAGpjC,WARvB,SAAcA,GACb3C,KAAK2c,SAAS,KAAMha,oCAiBrBlC,OAAA+B,eAAW2wC,EAAA/xC,UAAA,UAOX,WACC,OAAOpB,KAAK2R,OAAOs0B,GAAGtjC,WARvB,SAAcA,GACb3C,KAAK2c,SAAS,KAAMha,oCAerBlC,OAAA+B,eAAW2wC,EAAA/xC,UAAA,YAOX,WACC,OAAOpB,KAAKoJ,WAAWgW,UARxB,SAAgBA,GACfpf,KAAKqJ,YAAY,OAAQ+V,oCAqB1B3e,OAAA+B,eAAW2wC,EAAA/xC,UAAA,gBAOX,WACC,OAAOpB,KAAKoJ,WAAW61B,cARxB,SAAoBA,GACnBj/B,KAAKqJ,YAAY,WAAY41B,oCAmB9Bx+B,OAAA+B,eAAW2wC,EAAA/xC,UAAA,aAAX,WACC,OAAKpB,KAAKitB,OAIFjtB,KAAKitB,OAAOqmB,MAAQ,EAHpB,mCAeT7yC,OAAA+B,eAAW2wC,EAAA/xC,UAAA,aAOX,WACC,IAAIy9B,EAAQ7+B,KAAKoJ,WAAWy1B,MAY5B,YAVanxB,GAATmxB,GACC7+B,KAAKitB,SACR4R,EAAQ7+B,KAAKitB,OAAO4R,YAGTnxB,GAATmxB,GACC7+B,KAAK8J,YACR+0B,EAAQ7+B,KAAK8J,UAAUsrB,OAAOjpB,SAASnM,KAAK8J,UAAUsrB,OAAOpd,KAAOhY,KAAK8K,QAGpE+zB,OApBR,SAAiBl8B,GAChB3C,KAAKqJ,YAAY,QAAS1G,oCA0B3BlC,OAAA+B,eAAW2wC,EAAA/xC,UAAA,cASX,WACC,OAAOpB,KAAKoK,aAVb,SAAkBE,GACbtK,KAAKoK,UACRpK,KAAK8J,UAAUQ,OAAOoX,YAAY1hB,KAAKoK,SACvCpK,KAAKoK,QAAQqX,WAEdzhB,KAAKoK,QAAUE,EACftK,KAAK+J,WAAWC,KAAKM,oCAMvB6oC,EA9RA,CAAqC5iB,GAuYrCgjB,GAAA,SAAA1zC,GAsKC,SAAA2zC,IAAA,IAAA1zC,EAGCD,EAAAE,KAAAC,OAAOA,KArFDF,EAAA2zC,gBAAqD3zC,EAAK4zC,SA6D1D5zC,EAAA6zC,UAAoB,EAyB1B7zC,EAAKK,UAAY,UAEjBL,EAAK8zC,UAAY,EACjB9zC,EAAK+zC,aAAe,EAEpB/zC,EAAKs1B,OAAS,IAAI0e,GAAA,EAClBh0C,EAAKi0C,QAAU,aAGf,IAAIxpC,EAAQzK,EAAKwhB,MAAMtX,KAAK,IAAIgI,EAAA,GAChCzH,EAAM+kB,MAAM7hB,UAAW,EACvBlD,EAAMypC,cAAe,EAErB,IAAIC,EAAY1pC,EAAM7G,SACtBuwC,EAAUzvC,QAAS,EACnByvC,EAAUpzC,OAAOF,SAAS8M,UAAW,EACrCwmC,EAAUnzC,MAAMH,SAAS8M,UAAW,EACpCwmC,EAAUvzC,KAAKC,SAAS8M,UAAW,EACnCwmC,EAAUxkB,UAAU9uB,SAAS8M,UAAW,EACxCwmC,EAAU1oC,gBAAkB,IAC5B0oC,EAAUhzC,KAAKwM,UAAW,EAC1BwmC,EAAU/iC,SAASzD,UAAW,EAG9B,IAAIjD,EAAQ1K,EAAK+hB,MAAM7X,KAAK,IAAIgI,EAAA,GAChCxH,EAAM8kB,MAAM7hB,UAAW,EACvBjD,EAAMwpC,cAAe,EAErB,IAAIE,EAAY1pC,EAAM9G,SACtBwwC,EAAU1vC,QAAS,EACnB0vC,EAAUrzC,OAAOF,SAAS8M,UAAW,EACrCymC,EAAUpzC,MAAMH,SAAS8M,UAAW,EACpCymC,EAAUxzC,KAAKC,SAAS8M,UAAW,EACnCymC,EAAUzkB,UAAU9uB,SAAS8M,UAAW,EACxCymC,EAAU3oC,gBAAkB,IAC5B2oC,EAAUjzC,KAAKwM,UAAW,EAC1BymC,EAAUhjC,SAASzD,UAAW,EAC9BymC,EAAUvwC,UAAW,EAGrB7D,EAAKyK,MAAQA,EACbzK,EAAK0K,MAAQA,EAEb,IAAM7J,EAAW,IAAImyC,UACrBhzC,EAAKq0C,gBAAkB,IAAIzqC,EAAA,EAAgD/I,GAC3Eb,EAAKiK,WAAWC,KAAK,IAAIN,EAAA,EAAmB5J,EAAKq0C,kBACjDr0C,EAAKiK,WAAWC,KAAKrJ,GAErBb,EAAKovB,cAAc9Q,OAAOC,GAAG,MAAO,WACnCve,EAAKs0C,oBAAoBt0C,EAAKu0C,qBAC5B3mC,GAAW,GAEd5N,EAAKq0C,gBAAgB/1B,OAAOC,GAAG,YAAa,SAAC6J,GAC5CA,EAAM+G,SAASyd,YAAa,QAC1Bh/B,GAAW,GAGd5N,EAAKqB,eA8xBP,OAjgC6BgH,EAAA,EAAAqrC,EAAA3zC,GA4O5BY,OAAA+B,eAAWgxC,EAAApyC,UAAA,qBAkBX,WACC,OAAOpB,KAAKs0C,oBAnBb,SAAyBC,GAAzB,IAAAz0C,EAAAE,KACKA,KAAKs0C,gBAAkBC,IAC1Bv0C,KAAKs0C,eAAiBC,EACtBA,EAActnB,OAASjtB,KACvBu0C,EAAcjmB,SACdimB,EAAcrG,MAAMvtC,SAASyd,OAAOC,GAAG,MAAO,SAAC6J,GAC9C,IAAIhc,EAA4Bgc,EAAMvmB,OAAOuK,SAASkC,YACtDtO,EAAKs0C,oBAAoBloC,GACzBpM,EAAK00C,iBAAiBtoC,SACpBwB,GAAW,GAEd1N,KAAK+J,WAAWC,KAAKuqC,qCAiBhBf,EAAApyC,UAAAqT,aAAP,WAECzU,KAAKsK,OAAOmL,QAEZ5V,EAAAuB,UAAMqT,aAAY1U,KAAAC,MAEdA,KAAKq0C,eACRr0C,KAAKq0C,cAAc5yB,UAGpB,IAAIgzB,EAAez0C,KAAKkL,UAAUvK,SAAS0uB,QAE3CrvB,KAAKq0C,cAAgBI,EAErBtqC,EAAA,KAAWnK,KAAKkL,UAAUb,WAAY,SAAC6B,GACtCA,EAAS+gB,OAASwnB,IAGnBA,EAAaxV,SAAWj/B,KAAKkL,UAE7BupC,EAAanR,GAAK,EAClBmR,EAAa1O,GAAK,EAClB0O,EAAar1B,KAAOpf,KAAK00C,UAEzB,IACItyB,EADO,IACQpiB,KAAKiH,YAAcjH,KAAK8G,YAAe,IAE1D2tC,EAAalR,GAHF,IAIXkR,EAAaxO,GAAK7jB,EAElBpiB,KAAKuK,MAAMkB,IAAM,EACjBzL,KAAKuK,MAAMwE,IAPA,IASX/O,KAAKwK,MAAMiB,IAAM,EACjBzL,KAAKwK,MAAMuE,IAAMqT,EAEjBpiB,KAAK20C,YAAYF,GAEjBz0C,KAAKw0C,iBAAiBC,IAUhBjB,EAAApyC,UAAAuzC,YAAP,SAAmB1nB,EAAyB8mB,GAC3C,GAAI9mB,EAAQ,CACX,IAAIgS,EAAWhS,EAAOgS,SAEjB8U,IACJA,EAAU/zC,KAAK+zC,SAGD,aAAXA,GACH9U,EAASttB,OAAOilB,KAAK,SAACpR,EAAGzY,GACxB,OAAOyY,EAAE7iB,MAAQoK,EAAEpK,QAGN,cAAXoxC,GACH9U,EAASttB,OAAOilB,KAAK,SAACpR,EAAGzY,GACxB,OAAOA,EAAEpK,MAAQ6iB,EAAE7iB,QAIrB3C,KAAK40C,uBAAuB,GAE5B50C,KAAKyzC,gBAAgBxmB,GAErB,IAAK,IAAIhhB,EAAI,EAAGI,EAAM4yB,EAAS16B,OAAQ0H,EAAII,EAAKJ,IAAK,CAEpD,IAAI8hC,EAAO9O,EAAS9yB,SAASF,GAEzB8hC,EAAK9O,UACRj/B,KAAK20C,YAAY5G,MAaXyF,EAAApyC,UAAAozC,iBAAV,SAA2BtoC,GAA3B,IAAApM,EAAAE,KACCA,KAAK60C,eAML,IAJA,IAAIC,GAAkB5oC,GAGlB6oC,EAAiB7oC,EAAS+gB,YACLvf,GAAlBqnC,GACN/0C,KAAKg1C,WAAWD,GAChBD,EAAe9qC,KAAK+qC,GACpBA,EAAiBA,EAAe9nB,OAGjC6nB,EAAelN,UAEX5nC,KAAKu0C,gBACRv0C,KAAKu0C,cAAcz1B,KAAOg2B,GAI3B90C,KAAKi1C,qBAAqB/oC,GAG1BiR,EAAA,KAAYnd,KAAK60C,YAAa,SAACvqC,IACM,GAAhCxK,EAAKwK,OAAOkW,QAAQlW,IACvBxK,EAAKwK,OAAON,KAAKM,GAElBA,EAAOpG,OAASoG,EAAOgpC,SAUfE,EAAApyC,UAAA6zC,qBAAV,SAA+B/oC,GAC9B,GAAIA,EAAS+yB,UACA/yB,EAASonC,MAETtzC,KAAK6zC,aAAe7zC,KAAK4zC,UAAW,CAE/C5zC,KAAKg1C,WAAW9oC,GAEhB,IAAK,IAAID,EAAI,EAAGA,EAAIC,EAAS+yB,SAAS16B,OAAQ0H,IAAK,CAClD,IAAIizB,EAAQhzB,EAAS+yB,SAAS9yB,SAASF,GACnCizB,EAAMD,UACTj/B,KAAKi1C,qBAAqB/V,MAYrBsU,EAAApyC,UAAA8yB,eAAV,WACC,OAAO,GAUEsf,EAAApyC,UAAA4zC,WAAV,SAAqB9oC,GAArB,IAAApM,EAAAE,KACC,IAAKkM,EAAS5B,OAAQ,CACrB,IAAIA,OAAM,EAEN3J,EAAWX,KAAKm0C,gBAAgB7lC,OAAOpC,EAASonC,MAAM/9B,aAEzDjL,EADG3J,EACMA,EAAS0uB,QAGTrvB,KAAKsK,OAAOuL,UAGfuJ,KAAOlT,EAASkT,KACvB9U,EAAOyqC,eAAiB7oC,EACxBA,EAAS5B,OAASA,EAElB,IAAIgpC,EAAQpnC,EAASonC,MACrBhpC,EAAOgpC,MAAQA,EAEf,IAAIllC,EAAmBlC,EAASkC,YAC5BA,IACH9D,EAAOsc,OAASxY,EAAYwY,QAG7B5mB,KAAK80B,UAAUpT,YAAYpX,GAC3BA,EAAOwU,KAAO5S,EAAS+yB,SAASttB,OAChCrH,EAAOwD,KAAO5B,EAAS2yB,MAEvBv0B,EAAO6kC,iBAAiBtpB,KAAK,GAC7Bvb,EAAO2nB,iBAAiBpM,KAAK,GAE7Bvb,EAAOqkC,QAAQhuC,SAASa,QAAQC,IAAI,OAAQ,SAACqM,EAAMnM,GAClD,IAAIuK,EAAkCvK,EAAOuK,SAC7C,GAAIA,EAAU,CACb,IAAI0mC,EAAkB1mC,EAAS0mC,gBAC/B,GAAIA,EAGH,OAFAjxC,EAAOmM,KAAO8kC,EAAgB/T,MAC9Bl9B,EAAOH,QAAQ+M,OAAO,QACfqkC,EAAgB/T,SAKtB7+B,KAAK2zC,WAAaznC,EAASonC,MAAQtzC,KAAK6zC,cAAiB3nC,EAAS+yB,UAAY/yB,EAAS+yB,SAAS16B,OAAS,KAC5G+F,EAAOqkC,QAAQhuC,SAASu0C,gBAAkB7rB,EAAA,EAAiBd,QACvDvoB,KAAK2zC,UACRrpC,EAAOqkC,QAAQhuC,SAASyd,OAAOC,GAAG,MAAO,SAAC6J,GACzC,IAAInY,EAAwCmY,EAAMvmB,OAAOuK,SAErDA,EAASonC,MAAQxzC,EAAK+zC,aACzB/zC,EAAKs0C,oBAAoBrkC,EAAe6iC,gBAAgB3lB,QAGxDntB,EAAKq1C,qBAAqBplC,IAGzB/P,UAAM0N,IAKZ1N,KAAK60C,YAAY7qC,KAAKkC,EAAS5B,SAStBkpC,EAAApyC,UAAAg0C,cAAV,SAAwBj9B,GAAxB,IAAArY,EAAAE,KAECmK,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,IACO,GAAtCxK,EAAK+0C,YAAYr0B,QAAQlW,IAE5BA,EAAO6kC,iBAAiBtpB,OACxBvb,EAAO2nB,iBAAiBpM,KAAK1N,KAI7B7N,EAAO6kC,iBAAiBjqB,OACxB5a,EAAO2nB,iBAAiB/M,KAAK/M,GAEzB7N,EAAOgpC,MAAQxzC,EAAK+zC,cACvBvpC,EAAO2nB,iBAAiBpM,KAAK1N,OAW1Bq7B,EAAApyC,UAAA+zC,qBAAP,SAA4BjpC,GAC3BlM,KAAKo0C,oBAAoBloC,EAAS0mC,kBAS5BY,EAAApyC,UAAAgzC,oBAAP,SAA2BloC,GAA3B,IAAApM,EAAAE,KACC,GAAIkM,GAAYA,EAAS+yB,SAAU,CAClCj/B,KAAKuK,MAAM6Q,aAAalP,EAASo3B,GAAIp3B,EAASq3B,IAC9CvjC,KAAKwK,MAAM4Q,aAAalP,EAAS65B,GAAI75B,EAAS+5B,IAE9CjmC,KAAK6zC,aAAe3nC,EAASonC,MAC7BtzC,KAAKq1C,gBAAkBnpC,EAEvBlM,KAAKw0C,iBAAiBtoC,GAEtB,IAAIopC,EAAuBt1C,KAAKuK,MAAM+qC,sBAAwBt1C,KAAKwK,MAAM8qC,qBAErEA,IAAyBA,EAAqB1vB,cACjD5lB,KAAKu1C,eAAevrC,KAAKsrC,GACzBA,EAAqBl3B,OAAOyyB,KAAK,iBAAkB,WAClD/wC,EAAKs1C,mBAINp1C,KAAKo1C,kBASE5B,EAAApyC,UAAA6R,sBAAV,WAECpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MAItBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,mBAWnCogC,EAAApyC,UAAAyI,eAAV,WACC,OAAO,IAAIqpC,IAaZzyC,OAAA+B,eAAWgxC,EAAApyC,UAAA,iBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,kBAR9B,SAAqBC,GACpB3C,KAAK8C,iBAAiB,YAAaH,GAAO,oCAe3ClC,OAAA+B,eAAWgxC,EAAApyC,UAAA,oBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,qBAR9B,SAAwBC,GACvB3C,KAAK8C,iBAAiB,eAAgBH,GAAO,oCAkB9ClC,OAAA+B,eAAWgxC,EAAApyC,UAAA,eAIX,WACC,OAAOpB,KAAK0C,iBAAiB,gBAL9B,SAAmBC,GAClB3C,KAAK8C,iBAAiB,UAAWH,GAAO,oCAY/B6wC,EAAApyC,UAAAq5B,aAAV,WACC,OAAO,IAAIqY,IASZryC,OAAA+B,eAAWgxC,EAAApyC,UAAA,gBAUX,WACC,OAAOpB,KAAK00C,eAXb,SAAoB/xC,GACnB3C,KAAK00C,UAAY/xC,EACb3C,KAAKq0C,gBACRr0C,KAAKq0C,cAAcj1B,KAAOpf,KAAK00C,4CAiB1BlB,EAAApyC,UAAAulB,cAAP,SAAqBC,GAEpB,GAAIA,EAAQ,CAGX,GAAIxZ,EAAA,SAAewZ,EAAwB,kBAAMxZ,EAAA,SAAewZ,EAAwB,iBACvF,OAAQA,EAAwB,iBAC/B,IAAK,WACJA,EAAwB,gBAAI5mB,KAAK0zC,SACjC,MACD,IAAK,aACJ9sB,EAAwB,gBAAI5mB,KAAKw1C,WACjC,MACD,IAAK,QACJ5uB,EAAwB,gBAAI5mB,KAAKwlC,MACjC,MACD,IAAK,OACJ5e,EAAwB,gBAAI5mB,KAAKy1C,KACjC,MACD,IAAK,YACJ7uB,EAAwB,gBAAI5mB,KAAK01C,UACjC,MACD,eACQ9uB,EAAwB,gBAO9BxZ,EAAA,SAAewZ,EAAO2tB,iBAAmBnnC,EAAA,SAAewZ,EAAO2tB,cAAc1wB,QAChF+C,EAAO2tB,cAAc1wB,KAAO,iBAG7BhkB,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,KAWf4sB,EAAApyC,UAAAunC,eAAP,WACC9oC,EAAAuB,UAAMunC,eAAc5oC,KAAAC,MACpBA,KAAK20C,YAAY30C,KAAKq1C,kBAQhB7B,EAAApyC,UAAAiS,kBAAP,WACCxT,EAAAuB,UAAMiS,kBAAiBtT,KAAAC,MACvBA,KAAK20C,YAAY30C,KAAKq0C,eAEtBlqC,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnCA,EAAOqrC,oBAGR31C,KAAKo0C,oBAAoBp0C,KAAKq0C,gBAoDxBb,EAAApyC,UAAAo0C,WAAP,SAAkBvoB,GACjB,IACChhB,EACAyqB,EAFGkf,EAAQ3oB,EAAOgS,SACf4W,EAAID,EAAMrxC,OACRuxC,EAAO,IAAIC,MAAMF,EAAI,GAE3B,IAAKC,EAAK,GAAKpf,EAAMzqB,EAAI,EAAGA,EAAI4pC,IAAK5pC,EACpC6pC,EAAK7pC,EAAI,GAAKyqB,GAAOkf,EAAMzpC,SAASF,GAAGtJ,OAKxC,SAAAqzC,EAAmB/pC,EAAWgqC,EAAWtzC,EAAe2gC,EAAYyC,EAAYxC,EAAY0C,GAC3F,GAAIh6B,GAAKgqC,EAAI,EAAG,CACf,IAAIlI,EAAO6H,EAAMzpC,SAASF,GAG1B,OAFA8hC,EAAKzK,GAAKA,EAAIyK,EAAKhI,GAAKA,EACxBgI,EAAKxK,GAAKA,OAAIwK,EAAK9H,GAAKA,GAIzB,IAAIiQ,EAAcJ,EAAK7pC,GACtBkqC,EAAexzC,EAAQ,EAAKuzC,EAC5BE,EAAInqC,EAAI,EACRoqC,EAAKJ,EAAI,EAEV,KAAOG,EAAIC,GAAI,CACd,IAAIC,EAAMF,EAAIC,IAAO,EACjBP,EAAKQ,GAAOH,EAAaC,EAAIE,EAAM,EAClCD,EAAKC,EAGNH,EAAcL,EAAKM,EAAI,GAAON,EAAKM,GAAKD,GAAgBlqC,EAAI,EAAImqC,KAAIA,EAEzE,IAAIG,EAAYT,EAAKM,GAAKF,EACzBM,EAAa7zC,EAAQ4zC,EAEtB,GAAKhT,EAAKD,EAAO2C,EAAKF,EAAK,CAC1B,IAAI0Q,GAAMnT,EAAKkT,EAAajT,EAAKgT,GAAa5zC,EAC9CqzC,EAAU/pC,EAAGmqC,EAAGG,EAAWjT,EAAIyC,EAAI0Q,EAAIxQ,GACvC+P,EAAUI,EAAGH,EAAGO,EAAYC,EAAI1Q,EAAIxC,EAAI0C,OAClC,CACN,IAAIyQ,GAAM3Q,EAAKyQ,EAAavQ,EAAKsQ,GAAa5zC,EAC9CqzC,EAAU/pC,EAAGmqC,EAAGG,EAAWjT,EAAIyC,EAAIxC,EAAImT,GACvCV,EAAUI,EAAGH,EAAGO,EAAYlT,EAAIoT,EAAInT,EAAI0C,IAjC1C+P,CAAU,EAAGH,EAAG5oB,EAAOtqB,MAAOsqB,EAAOqW,GAAIrW,EAAO8Y,GAAI9Y,EAAOsW,GAAItW,EAAOgZ,KA4ChEuN,EAAApyC,UAAAokC,MAAP,SAAavY,GAYZ,IAXA,IAMC8gB,EANGzK,EAAKrW,EAAOqW,GACZC,EAAKtW,EAAOsW,GACZwC,EAAK9Y,EAAO8Y,GACZE,EAAKhZ,EAAOgZ,GAEZ2P,EAAQ3oB,EAAOgS,SAElBhzB,GAAK,EACL4pC,EAAID,EAAMrxC,OACV6xC,EAAInpB,EAAOtqB,QAAUsjC,EAAKF,GAAM9Y,EAAOtqB,QAE/BsJ,EAAI4pC,IACZ9H,EAAO6H,EAAMzpC,SAASF,IAASq3B,GAAKA,EAAIyK,EAAKxK,GAAKA,EAClDwK,EAAKhI,GAAKA,EAAIgI,EAAK9H,GAAKF,GAAMgI,EAAKprC,MAAQyzC,GAUtC5C,EAAApyC,UAAAq0C,KAAP,SAAYxoB,GAYX,IAXA,IAMC8gB,EANGzK,EAAKrW,EAAOqW,GACZC,EAAKtW,EAAOsW,GACZwC,EAAK9Y,EAAO8Y,GACZE,EAAKhZ,EAAOgZ,GAEZ2P,EAAQ3oB,EAAOgS,SAElBhzB,GAAK,EACL4pC,EAAID,EAAMrxC,OACV6xC,EAAInpB,EAAOtqB,QAAU4gC,EAAKD,GAAMrW,EAAOtqB,QAE/BsJ,EAAI4pC,IACZ9H,EAAO6H,EAAMzpC,SAASF,IAAS85B,GAAKA,EAAIgI,EAAK9H,GAAKA,EAClD8H,EAAKzK,GAAKA,EAAIyK,EAAKxK,GAAKD,GAAMyK,EAAKprC,MAAQyzC,GAUtC5C,EAAApyC,UAAAs0C,UAAP,SAAiBzoB,GACD,EAAfA,EAAOqmB,MAAYtzC,KAAKwlC,MAAMvY,GAAUjtB,KAAKy1C,KAAKxoB,IAS5CumB,EAAApyC,UAAAsyC,SAAP,SAAgBzmB,GAwBf,IAvBA,IAQI0pB,EAIAhwC,EACAF,EAEAmwC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EArBAC,GAAS,EAAIl1C,KAAKm1C,KAAK,IAAM,EAE7B9T,EAAKrW,EAAOqW,GACZC,EAAKtW,EAAOsW,GACZwC,EAAK9Y,EAAO8Y,GACZE,EAAKhZ,EAAOgZ,GAEZ2P,EAAQ3oB,EAAOgS,SAEfoY,EAAK,EACLC,EAAK,EACLzB,EAAID,EAAMrxC,OAGV5B,EAAQsqB,EAAOtqB,MASZ00C,EAAKxB,GAAG,CACdlvC,EAAK48B,EAAKD,EAAI78B,EAAKw/B,EAAKF,EAGxB,GAAG6Q,EAAWhB,EAAMzpC,SAASmrC,KAAM30C,aAAei0C,GAAYU,EAAKzB,GAOnE,IANAgB,EAAWC,EAAWF,EAEtBM,EAAON,EAAWA,GADlBK,EAAQh1C,KAAK8M,IAAItI,EAAKE,EAAIA,EAAKF,IAAO9D,EAAQw0C,IAE9CH,EAAW/0C,KAAK8M,IAAI+nC,EAAWI,EAAMA,EAAOL,GAGrCS,EAAKzB,IAAKyB,EAAI,CAUpB,GATAV,GAAYD,EAAYf,EAAMzpC,SAASmrC,GAAI30C,MACvCg0C,EAAYE,IACfA,EAAWF,GAERA,EAAYG,IACfA,EAAWH,GAEZO,EAAON,EAAWA,EAAWK,GAC7BF,EAAW90C,KAAK8M,IAAI+nC,EAAWI,EAAMA,EAAOL,IAC7BG,EAAU,CACxBJ,GAAYD,EAAW,MAExBK,EAAWD,EAIZ,IAAIQ,EAAMv3C,KAAKkL,UAAUvK,SAAS0uB,QAClCkoB,EAAI50C,MAAQi0C,EACZW,EAAI9B,KAAO9uC,EAAKF,EAChB8wC,EAAItY,SAAW2W,EAAMpQ,MAAM6R,EAAIC,GAC/BC,EAAIjU,GAAKA,EACTiU,EAAIxR,GAAKA,EACTwR,EAAIhU,GAAKA,EACTgU,EAAItR,GAAKA,EAELsR,EAAI9B,MACP8B,EAAItR,GAAKtjC,EAAQojC,GAAMt/B,EAAKmwC,EAAWj0C,EAAQsjC,EAC/CjmC,KAAKy1C,KAAK8B,KAGVA,EAAIhU,GAAK5gC,EAAQ2gC,GAAM38B,EAAKiwC,EAAWj0C,EAAQ4gC,EAC/CvjC,KAAKwlC,MAAM+R,IAEZ50C,GAASi0C,EAAUS,EAAKC,IAUnB9D,EAAApyC,UAAAo2C,0BAAP,SAAiCtrC,EAA8BkT,GACnD,SAARA,GACFpf,KAAKuI,uBAIAirC,EAAApyC,UAAA4kB,iCAAP,SAAwC9Z,EAA8BkT,GAC1D,SAARA,GACFpf,KAAKuI,uBAQAirC,EAAApyC,UAAAsjC,WAAP,WACC,IAAIC,EAAS3kC,KAAK2kC,OAClB,GAAIA,EAAQ,CACX,IAAIC,KAEJz6B,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACf,GAAhBA,EAAOgpC,QACLhpC,EAAOu6B,gBACXD,EAAW56B,KAAKM,MAKnBq6B,EAAO3lB,WAAWI,KAAO,OACzBulB,EAAO7lB,KAAO8lB,IAOT4O,EAAApyC,UAAAue,YAAP,WAEC9f,EAAAuB,UAAMue,YAAW5f,KAAAC,MAEjBA,KAAKq0C,mBAAgB3mC,EAErB1N,KAAKsK,OAAOmL,QAERzV,KAAKu0C,eACRv0C,KAAKu0C,cAAc50B,cAGpB3f,KAAKuK,MAAMoV,cACX3f,KAAKwK,MAAMmV,eAGb6zB,EAjgCA,CAA6BxlB,GAygC7BrlB,EAAA,EAAShD,kBAA2B,QAAI4tC,GCp4CxC,IAAAkE,GAAA,SAAA53C,GAkCC,SAAA63C,IAAA,IAAA53C,EACCD,EAAAE,KAAAC,OAAOA,YAREF,EAAA2f,OAAS,IAAI/B,EAAA,EAStB5d,EAAKK,UAAY,kBAEjBL,EAAKiK,WAAWC,KAAKlK,EAAK2f,QAE1B3f,EAAKqB,eA0EP,OAlHqCgH,EAAA,EAAAuvC,EAAA73C,GAmD7B63C,EAAAt2C,UAAA0C,kBAAP,SAAyBpD,EAAYuC,EAAkBc,GACtDd,IAAuBc,EAAcd,GAAYvC,EAAKE,SACtD,IAAIgB,EAAgB5B,KAAKgD,gBAAgBC,GAEzC,GAAIvC,EAAKsD,QAAS,CAEjB,IAAI2C,EAAa3G,KAAKsC,MAAMq1C,KACxBlxC,EAAazG,KAAKsC,MAAMs1C,KAExBjsB,EAAY3rB,KAAK63C,YAErBn3C,EAAKmD,KAAOod,EAAA,QAAevf,EAAGiF,EAAI7E,EAAG2E,IAAQwa,EAAA,QAAevf,EAAGiF,EAAI7E,EAAG6pB,EAAIllB,IAAQwa,EAAA,QAAevf,EAAG,EAAGI,EAAG6pB,IAE3G3rB,KAAK4E,aAAalE,EAAMkB,GAExB5B,KAAKmE,iBAAiBzD,EAAMuC,EAAU,EAAG,IAQnCy0C,EAAAt2C,UAAA8/B,sBAAP,WACCrhC,EAAAuB,UAAM8/B,sBAAqBnhC,KAAAC,MAE3B,IAAI2rB,EAAI3rB,KAAK63C,YACTlxC,EAAK3G,KAAKsC,MAAMq1C,KAChBlxC,EAAKzG,KAAKsC,MAAMs1C,KACpB53C,KAAKkR,SAASrN,KAAOod,EAAA,QAAevf,EAAGiF,EAAI7E,EAAG2E,IAAQwa,EAAA,QAAevf,EAAGiF,EAAI7E,EAAG6pB,EAAIllB,IAAQwa,EAAA,QAAevf,EAAG,EAAGI,EAAG6pB,KASpHlrB,OAAA+B,eAAWk1C,EAAAt2C,UAAA,aAUX,WACC,OAAOpB,KAAKyf,OAAO4B,WAXpB,SAAiB/e,GACZA,GACHtC,KAAKyf,OAAOkC,IAAIrf,EAAOA,EAAM8b,OAAOC,GAAG,kBAAmBre,KAAK83C,gBAAiB93C,MAAM,qCAiB9E03C,EAAAt2C,UAAA02C,gBAAV,SAA0B5vB,GACH,SAAlBA,EAAMyF,UAAyC,SAAlBzF,EAAMyF,UACtC3tB,KAAK6C,cAIR60C,EAlHA,CAAqC9mB,EAAA,GA0HrCjoB,EAAA,EAAShD,kBAAmC,gBAAI8xC,GC3HhD,IAAAM,GAAA,SAAAl4C,GAoCC,SAAAm4C,IAAA,IAAAl4C,EACCD,EAAAE,KAAAC,OAAOA,YAREF,EAAA2f,OAAS,IAAI/B,EAAA,EAStB5d,EAAKK,UAAY,kBACjBL,EAAKiK,WAAWC,KAAKlK,EAAK2f,QAC1B3f,EAAKqB,eA0EP,OAlHqCgH,EAAA,EAAA6vC,EAAAn4C,GAmD7Bm4C,EAAA52C,UAAA0C,kBAAP,SAAyBpD,EAAYuC,EAAkBc,GACtDd,IAAuBc,EAAcd,GAAYvC,EAAKE,SAEtD,IAAIgB,EAAgB5B,KAAKgD,gBAAgBC,GACzC,GAAIvC,EAAKsD,QAAS,CAEjB,IAAI2C,EAAa3G,KAAKsC,MAAMq1C,KACxBlxC,EAAazG,KAAKsC,MAAMs1C,KAExBnsB,EAAYzrB,KAAKi4C,WAErBv3C,EAAKmD,KAAOod,EAAA,QAAevf,EAAG,EAAGI,EAAG,IAAOmf,EAAA,QAAevf,EAAGiF,EAAI7E,EAAG2E,IAAQwa,EAAA,QAAevf,EAAG+pB,EAAI9kB,EAAI7E,EAAG2E,IAE1GzG,KAAK4E,aAAalE,EAAMkB,GAExB5B,KAAKmE,iBAAiBzD,EAAMuC,EAAU,EAAG,IAQnC+0C,EAAA52C,UAAA8/B,sBAAP,WACCrhC,EAAAuB,UAAM8/B,sBAAqBnhC,KAAAC,MAE3B,IAAIyrB,EAAYzrB,KAAKi4C,WACrBj4C,KAAKkR,SAASrN,KAAOod,EAAA,QAAevf,EAAG,EAAGI,EAAG,IACzCmf,EAAA,QAAevf,EAAG+pB,EAAG3pB,EAAG,IACxBmf,EAAA,QAAevf,EAAG+pB,EAAIzrB,KAAKsC,MAAMq1C,KAAM71C,EAAG9B,KAAKsC,MAAMs1C,QAS1Dn3C,OAAA+B,eAAWw1C,EAAA52C,UAAA,aAUX,WACC,OAAOpB,KAAKyf,OAAO4B,WAXpB,SAAiB/e,GACZA,GACHtC,KAAKyf,OAAOkC,IAAIrf,EAAOA,EAAM8b,OAAOC,GAAG,kBAAmBre,KAAK83C,gBAAiB93C,MAAM,qCAiB9Eg4C,EAAA52C,UAAA02C,gBAAV,SAA0B5vB,GACH,SAAlBA,EAAMyF,UAAyC,SAAlBzF,EAAMyF,UACtC3tB,KAAK6C,cAIRm1C,EAlHA,CAAqClnB,EAAA,gBChCrConB,GAAA,SAAAr4C,GAWC,SAAAs4C,IAAA,IAAAr4C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,yBACjBL,EAAKqB,eAGP,OAjB4CgH,EAAA,EAAAgwC,EAAAt4C,GAiB5Cs4C,EAjBA,CAA4C9J,IAmF5C+J,GAAA,SAAAv4C,GA0DC,SAAAw4C,IAAA,IAAAv4C,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,iBAEjBL,EAAK6uC,QAAQhuC,SAAS23C,SAASnc,eAAgB,EAC/Cr8B,EAAK6uC,QAAQhuC,SAASmlB,YAAY1c,WAAW8Z,SAAU,EAEvDpjB,EAAKqB,eA4FP,OA9JoCgH,EAAA,EAAAkwC,EAAAx4C,GAwEnCY,OAAA+B,eAAW61C,EAAAj3C,UAAA,wBAAX,WACC,OAAIpB,KAAKsC,OAAStC,KAAKsC,MAAM6sC,iBACrBnvC,KAAKsC,MAAM6sC,iBAGXnvC,KAAKovC,mDAUPiJ,EAAAj3C,UAAAquC,wBAAP,SAA+BvjC,GAC9BrM,EAAAuB,UAAMquC,wBAAuB1vC,KAAAC,KAACkM,GAC3BA,EAASsiC,SACXtiC,EAASsiC,OAAO7nC,GAAK3G,KAAK2G,GAC1BuF,EAASsiC,OAAO/nC,GAAKzG,KAAKyG,KAUrB4xC,EAAAj3C,UAAA2kB,qBAAP,WACClmB,EAAAuB,UAAM2kB,qBAAoBhmB,KAAAC,MACvBA,KAAKsC,OACPtC,KAAKsC,MAAM6K,oBASHkrC,EAAAj3C,UAAAgxC,qBAAV,WACC,OAAO,IAAImG,GAAA,GAWZ93C,OAAA+B,eAAW61C,EAAAj3C,UAAA,aAUX,WACC,OAAOpB,KAAK0C,iBAAiB,cAX9B,SAAiBC,GAChB3C,KAAK8C,iBAAiB,QAASH,GAAO,GACvB3C,KAAK2uC,QAAQhuC,SACnB23C,SAAS/O,MAAQ5mC,mCAiB3BlC,OAAA+B,eAAW61C,EAAAj3C,UAAA,aAUX,WACC,OAAOpB,KAAK0C,iBAAiB,cAX9B,SAAiBC,GAChB3C,KAAK8C,iBAAiB,QAASH,GAChB3C,KAAK2uC,QAAQhuC,SACnB23C,SAASl1C,MAAQT,mCAU5B01C,EA9JA,CAAoCxJ,IAsKpClmC,EAAA,EAAShD,kBAAkC,eAAIyyC,GAC/CzvC,EAAA,EAAShD,kBAA0C,uBAAIuyC,GCjPvD,IAAAM,GAAA,SAAA34C,GAEC,SAAA44C,IAAA,IAAA34C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,oBACjBL,EAAKqB,eAGP,OARuCgH,EAAA,EAAAswC,EAAA54C,GAQvC44C,EARA,CAAuCloB,GAwEvCmoB,GAAA,SAAA74C,GAsDC,SAAA84C,IAAA,IAAA74C,EAGCD,EAAAE,KAAAC,OAAOA,KAtBEF,EAAA6wB,eAAyC8mB,GAMzC33C,EAAA+wB,eAAyCknB,GAiBlDj4C,EAAKK,UAAY,YAGjBL,EAAKypC,MAAQ,GACbzpC,EAAKsD,MAAQ,GAGb,IAAI+rC,EAAmBrvC,EAAKkyB,gBAAgBjH,YAAYV,EAAA,UACxD8kB,EAAiB1nB,aAAc,EAC/B0nB,EAAiB/uC,YAAa,EAC9B+uC,EAAiBjvC,OAAS,OAC1BJ,EAAKqvC,iBAAmBA,EAExBrvC,EAAKqvC,iBAAiBjhC,KAAOpO,EAAKirB,YAAY/M,EAAA,GAG9Cle,EAAKqB,eA0KP,OApP+BgH,EAAA,EAAAwwC,EAAA94C,GAmF9BY,OAAA+B,eAAWm2C,EAAAv3C,UAAA,aASX,WACC,OAAOpB,KAAK0C,iBAAiB,cAV9B,SAAiBC,GAChB3C,KAAK8C,iBAAiB,QAASH,GAC/B3C,KAAK44C,YACL54C,KAAK6pC,uDAgBNppC,OAAA+B,eAAWm2C,EAAAv3C,UAAA,aASX,WACC,OAAOpB,KAAK0C,iBAAiB,cAV9B,SAAiBC,GAChB3C,KAAK8C,iBAAiB,QAASH,GAC/B3C,KAAK44C,YACL54C,KAAK6pC,uDAgBNppC,OAAA+B,eAAWm2C,EAAAv3C,UAAA,YAAX,WACC,OAAO+J,EAAA,IAAUnL,KAAKoD,OAASpD,KAAKupC,uCASrC9oC,OAAA+B,eAAWm2C,EAAAv3C,UAAA,YAAX,WACC,OAAQ+J,EAAA,IAAUnL,KAAKoD,OAASpD,KAAKupC,uCAQ/BoP,EAAAv3C,UAAAunC,eAAP,WACC9oC,EAAAuB,UAAMunC,eAAc5oC,KAAAC,MACpBA,KAAK44C,aAOID,EAAAv3C,UAAAw3C,UAAV,WACC54C,KAAKgxB,eAAesB,WAAatyB,KAAK43C,KACtC53C,KAAKgxB,eAAeiC,aAAejzB,KAAK23C,KAEpC33C,KAAK6zB,aACR7zB,KAAK6zB,WAAWptB,GAAKzG,KAAK43C,KAC1B53C,KAAK6zB,WAAWltB,GAAK3G,KAAK23C,MAGvB33C,KAAKm0B,aACRn0B,KAAKm0B,WAAW1tB,GAAKzG,KAAK43C,KAC1B53C,KAAKm0B,WAAWxtB,GAAK3G,KAAK23C,MAG3B33C,KAAK64C,cAOIF,EAAAv3C,UAAAy3C,WAAV,eAAA/4C,EAAAE,KACKyS,EAAgB,EAChBxG,EAAI,EACR9B,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GAC/BA,aAAkB8tC,MAEhB9tC,EAAO4kC,WAAajjC,EAAI,GAC5BwG,IAGDnI,EAAOwuC,WAAarmC,EAAQ,EAC5BxG,OAIF,IAAI8sC,EAAY,EAEhB5uC,EAAA,KAAWnK,KAAKsK,OAAOD,WAAY,SAACC,GACnC,GAAIA,aAAkB8tC,GAAgB,CAErC9tC,EAAOi/B,MAAQzpC,EAAKypC,MAAQ,EAC5Bj/B,EAAOlH,MAAQtD,EAAKsD,MACpBkH,EAAO3D,GAAK7G,EAAKypC,MAAQ,EAAUp+B,EAAA,IAAUrL,EAAKsD,OAAUkH,EAAiB,WAC7EA,EAAO7D,IAAM3G,EAAKypC,MAAQ,EAAUp+B,EAAA,IAAUrL,EAAKsD,OAAUkH,EAAiB,WAE9E,IAAI0uC,EAAY,EAChB1uC,EAAOqkC,QAAQjiC,KAAK,SAAC8hC,GACpBA,EAAOtqC,OAAS,IAAO80C,EAAID,EAAwB,IAApBzuC,EAAOwuC,WACtCE,MAGDD,OAGF/4C,KAAKi5C,eASCN,EAAAv3C,UAAAulB,cAAP,SAAqBC,GAEpB,GAAIA,GAGCxZ,EAAA,SAAewZ,EAAOtc,SAAW8C,EAAA,QAAcwZ,EAAOtc,QACzD,IAAK,IAAI2B,EAAI,EAAGI,EAAMua,EAAOtc,OAAO/F,OAAQ0H,EAAII,EAAKJ,IACpD2a,EAAOtc,OAAO2B,GAAG4X,KAAO+C,EAAOtc,OAAO2B,GAAG4X,MAAQ,iBAMpDhkB,EAAAuB,UAAMulB,cAAa5mB,KAAAC,KAAC4mB,IAIX+xB,EAAAv3C,UAAA63C,YAAV,WACC,IAAIxtB,EAAYzrB,KAAKmqB,cAAcrjB,WAC/B6kB,EAAY3rB,KAAKmqB,cAAcljB,YAE/BN,EAAa3G,KAAK23C,KAClBlxC,EAAazG,KAAK43C,KAElB/zC,EAAOod,EAAA,QAAevf,EAAG,EAAGI,EAAG,IAAOmf,EAAA,QAAevf,EAAGiF,EAAI7E,EAAG2E,IAAQwa,EAAA,QAAevf,EAAG+pB,EAAI9kB,EAAI7E,EAAG2E,IAAQwa,EAAA,QAAevf,EAAG+pB,EAAI9kB,EAAI7E,EAAG6pB,EAAIllB,IAAQwa,EAAA,QAAevf,EAAG+pB,EAAG3pB,EAAG6pB,IAAO1K,EAAA,QAAevf,EAAG+pB,EAAG3pB,EAAG6pB,IAAO1K,EAAA,QAAevf,EAAG,EAAGI,EAAG6pB,IAAO1K,EAAA,YAElPkuB,EAAmBnvC,KAAKmvC,iBACxBA,GAAoBA,EAAiBjhC,OACxCihC,EAAiBjhC,KAAKrK,KAAOA,IAGhC80C,EApPA,CAA+B3qB,GA4P/BrlB,EAAA,EAAShD,kBAA6B,UAAI+yC,8CC/S1CQ,GAAA,SAAAr5C,GAsCC,SAAAs5C,IAAA,IAAAr5C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,cACjBL,EAAKI,OAAS,SA+BhB,OAxEiCiI,EAAA,EAAAgxC,EAAAt5C,GA+CtBs5C,EAAA/3C,UAAAg4C,aAAV,WACCv5C,EAAAuB,UAAMg4C,aAAYr5C,KAAAC,MAElBA,KAAKq5C,QAAUr5C,KAAK+qB,YAAY0T,EAAA,GAChCz+B,KAAKq5C,QAAQ5xB,aAAc,EAE3BznB,KAAKs5C,SAAWt5C,KAAK+qB,YAAY0T,EAAA,GACjCz+B,KAAKs5C,SAAS7xB,aAAc,GAQtB0xB,EAAA/3C,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACXxb,KAAKq5C,SACRr5C,KAAKq5C,QAAQ99B,SAASC,EAAO69B,SAE1Br5C,KAAKs5C,UACRt5C,KAAKs5C,SAAS/9B,SAASC,EAAO89B,WAIjCH,EAxEA,CAAiC9G,GAAA,GAgFjC1pC,EAAA,EAAShD,kBAA+B,YAAIuzC,GCpG5C,IAAAK,GAAA,SAAA15C,GAkBC,SAAA25C,IAAA,IAAA15C,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAK6R,OAAO8nC,aACZ35C,EAAK6R,OAAO+nC,aACZ55C,EAAK6R,OAAOgoC,cACZ75C,EAAK6R,OAAOioC,cAEZ95C,EAAKK,UAAY,4BAEjBL,EAAKqB,eAsGP,OAlI+CgH,EAAA,EAAAqxC,EAAA35C,GAoC9CY,OAAA+B,eAAWg3C,EAAAp4C,UAAA,iBAOX,WACC,OAAOpB,KAAK2R,OAAO8nC,UAAU92C,WAR9B,SAAqBA,GACpB3C,KAAK2c,SAAS,YAAaha,oCAe5BlC,OAAA+B,eAAWg3C,EAAAp4C,UAAA,iBAOX,WACC,OAAOpB,KAAK2R,OAAO+nC,UAAU/2C,WAR9B,SAAqBA,GACpB3C,KAAK2c,SAAS,YAAaha,oCAe5BlC,OAAA+B,eAAWg3C,EAAAp4C,UAAA,kBAOX,WACC,OAAOpB,KAAK2R,OAAOgoC,WAAWh3C,WAR/B,SAAsBA,GACrB3C,KAAK2c,SAAS,aAAcha,oCAe7BlC,OAAA+B,eAAWg3C,EAAAp4C,UAAA,kBAOX,WACC,OAAOpB,KAAK2R,OAAOioC,WAAWj3C,WAR/B,SAAsBA,GACrB3C,KAAK2c,SAAS,aAAcha,oCAiB7BlC,OAAA+B,eAAWg3C,EAAAp4C,UAAA,mBAOX,WACC,OAAOpB,KAAK2R,OAAOyK,OAAOzZ,WAR3B,SAAuBA,GACtB3C,KAAK2c,SAAS,SAAUha,oCAiBzBlC,OAAA+B,eAAWg3C,EAAAp4C,UAAA,mBAOX,WACC,OAAOpB,KAAK2R,OAAO0K,OAAO1Z,WAR3B,SAAuBA,GACtB3C,KAAK2c,SAAS,SAAUha,oCAS1B62C,EAlIA,CAA+CnL,IA4O/CwL,GAAA,SAAAh6C,GAiEC,SAAAi6C,IAAA,IAAAh6C,EACCD,EAAAE,KAAAC,OAAOA,KACPF,EAAKK,UAAY,oBAEjBL,EAAKoB,cAAgB,EAErB,IAAI0pB,EAAkB,IAAIC,EAAA,EACtBkvB,EAAgBnvB,EAAgBK,OAAO,YACvC+uB,EAAgBpvB,EAAgBK,OAAO,mBAE3CnrB,EAAKm6C,kBAAkB7wC,WAAW0E,KAAOksC,EACzCl6C,EAAKm6C,kBAAkB7wC,WAAW+hB,OAAS6uB,EAE3Cl6C,EAAKo6C,kBAAkB9wC,WAAW0E,KAAOisC,EACzCj6C,EAAKo6C,kBAAkB9wC,WAAW+hB,OAAS4uB,EAE3Cj6C,EAAKqB,eAmQP,OApVuCgH,EAAA,EAAA2xC,EAAAj6C,GAwF5Bi6C,EAAA14C,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MACtBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,wBAUnC0mC,EAAA14C,UAAAyI,eAAV,WACC,OAAO,IAAI0vC,IASLO,EAAA14C,UAAAquC,wBAAP,SAA+BvjC,GAC9BrM,EAAAuB,UAAMquC,wBAAuB1vC,KAAAC,KAACkM,GAC9BlM,KAAKm6C,oBAAoBjuC,IAGhB4tC,EAAA14C,UAAA+4C,oBAAV,SAA8BjuC,GAC7B,IAAIsiC,EAAsBtiC,EAASsiC,OACnC,GAAIA,EAAQ,CACX,IAAI4L,EAAU5L,EAAO6K,QACjBgB,EAAW7L,EAAO8K,SAEtB,GAAIt5C,KAAKqU,UAAYrU,KAAKuK,MAAO,CAChC,IAAI7I,EAAY8sC,EAAO1nC,WAAa,EAEpCszC,EAAQ14C,EAAIA,EACZ24C,EAAS34C,EAAIA,EAEb,IAAIgwC,EAAOxlC,EAASkR,gBAAgBpd,KAAKogB,YACrCk6B,EAAQpuC,EAASkR,gBAAgBpd,KAAKmgB,QAEtCo6B,EAAQv6C,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAKogB,YACvCo6B,EAASx6C,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAKmgB,QACxCs6B,EAAOz6C,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAK06C,WACtCC,EAAQ36C,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAK46C,YAEvC74C,EAASysC,EAAOzsC,OAEpBq4C,EAAQnU,GAAKwU,EAAO14C,EACpBs4C,EAASpU,GAAK0U,EAAQ54C,EAElB2vC,EAAO4I,GACVF,EAAQlU,GAAKqU,EAAQx4C,EACrBs4C,EAASnU,GAAKsU,EAASz4C,IAGvBq4C,EAAQlU,GAAKsU,EAASz4C,EACtBs4C,EAASnU,GAAKqU,EAAQx4C,GAIxB,GAAI/B,KAAKqU,UAAYrU,KAAKwK,MAAO,CAChC,IAAI1I,EAAY0sC,EAAOvnC,YAAc,EAErCmzC,EAAQt4C,EAAIA,EACZu4C,EAASv4C,EAAIA,EAEb,IAAI+4C,EAAO3uC,EAASkR,gBAAgBpd,KAAKggB,YACrC86B,EAAQ5uC,EAASkR,gBAAgBpd,KAAK+f,QAEtCg7B,EAAQ/6C,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAKggB,YACvCg7B,EAASh7C,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAK+f,QACxCk7B,EAAOj7C,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAKk7C,WACtCC,EAAQn7C,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAKo7C,YAEvCv5C,EAAS2sC,EAAO3sC,OAEpBu4C,EAAQ7W,GAAK0X,EAAOp5C,EACpBw4C,EAAS9W,GAAK4X,EAAQt5C,EAElBg5C,EAAOC,GACVV,EAAQ1b,GAAKqc,EAAQl5C,EACrBw4C,EAAS3b,GAAKsc,EAASn5C,IAGvBu4C,EAAQ1b,GAAKsc,EAASn5C,EACtBw4C,EAAS3b,GAAKqc,EAAQl5C,GAIxBsI,EAAA,KAAWnK,KAAK+gB,WAAW1W,WAAY,SAAC4uB,GAEvC,IAAIqY,EAAcplC,EAASqlC,cAAcjjC,OAAO2qB,EAAUpkB,KAC1D,GAAIy8B,EAAa,CAChB,IAAI+J,EAAe/J,EAAY+H,QAC/BgC,EAAa35C,EAAI04C,EAAQ14C,EACzB25C,EAAav5C,EAAIs4C,EAAQt4C,EACzBu5C,EAAa9X,GAAK6W,EAAQ7W,GAC1B8X,EAAa3c,GAAK0b,EAAQ1b,GAC1B2c,EAAapV,GAAKmU,EAAQnU,GAC1BoV,EAAanV,GAAKkU,EAAQlU,GAG1B,IAAIoV,EAAgBhK,EAAYgI,SAChCgC,EAAc55C,EAAI24C,EAAS34C,EAC3B45C,EAAcx5C,EAAIu4C,EAASv4C,EAC3Bw5C,EAAc/X,GAAK8W,EAAS9W,GAC5B+X,EAAc5c,GAAK2b,EAAS3b,GAC5B4c,EAAcrV,GAAKoU,EAASpU,GAC5BqV,EAAcpV,GAAKmU,EAASnU,QAYhCzlC,OAAA+B,eAAWs3C,EAAA14C,UAAA,iBAAX,WACC,OAAOpB,KAAKu7C,4CASb96C,OAAA+B,eAAWs3C,EAAA14C,UAAA,iBAAX,WACC,OAAOpB,KAAKw7C,4CASb/6C,OAAA+B,eAAWs3C,EAAA14C,UAAA,kBAAX,WACC,OAAOpB,KAAKy7C,6CASbh7C,OAAA+B,eAAWs3C,EAAA14C,UAAA,kBAAX,WACC,OAAOpB,KAAK07C,6CAMH5B,EAAA14C,UAAAyd,aAAV,WAGC,GAFAhf,EAAAuB,UAAMyd,aAAY9e,KAAAC,MAEdA,KAAKqU,UAAYrU,KAAKuK,MAAO,CAChC,IAAI2V,EAAyBD,EAAA,WAAkBjgB,KAAKwK,MAAMb,eAC1D3J,KAAKw7C,WAAgD,MAAQt7B,EAAiB,IAC9ElgB,KAAK07C,YAAiD,OAASx7B,EAAiB,IAGjF,GAAIlgB,KAAKqU,UAAYrU,KAAKwK,MAAO,CAChC,IAAIsV,EAAyBG,EAAA,WAAkBjgB,KAAKuK,MAAMZ,eAC1D3J,KAAKu7C,WAAgD,MAAQz7B,EAAiB,IAC9E9f,KAAKy7C,YAAiD,OAAS37B,EAAiB,IAGjF9f,KAAKugB,cAAcvgB,KAAKuK,MAAYvK,KAAK4d,cAAoB5d,KAAKu7C,YAClEv7C,KAAKugB,cAAcvgB,KAAKuK,MAAYvK,KAAK4d,cAAoB5d,KAAKy7C,aAElEz7C,KAAKugB,cAAcvgB,KAAKwK,MAAYxK,KAAK6d,cAAoB7d,KAAKw7C,YAClEx7C,KAAKugB,cAAcvgB,KAAKwK,MAAYxK,KAAK6d,cAAoB7d,KAAK07C,cAU5D5B,EAAA14C,UAAAk9B,mBAAP,SAA0BC,GAEzB,IAAI9S,EAAY8S,EAAOz3B,WACnB6kB,EAAY4S,EAAOt3B,YAEvBs3B,EAAOiU,iBAEP,IAIImJ,EACAC,EALApN,EAAsBjQ,EAAOxT,YAAYmuB,IAC7C1K,EAAO/mB,aAAc,EACrB+mB,EAAOjzB,SAAcvb,KAAK2uC,QAAQhuC,UAKlC,IAAI24C,EAAiB9K,EAAO6K,QACxBA,EAAgB7K,EAAO8K,SAEvBt5C,KAAKqU,UAAYrU,KAAKwK,OACzBmxC,EAAKlwB,EAAI,EACTmwB,EAAKjwB,EAEL2tB,EAASx3C,EAAI6pB,EAAI,EACjB0tB,EAAQv3C,EAAI6pB,EAAI,EAEhB2tB,EAAS5a,GAAKjT,EAAI,EAClB4tB,EAAQ3a,GAAKjT,EAAI,EACjB4tB,EAAQ33C,EAAI+pB,EAAI,EAAI,EACpB+iB,EAAOA,OAAO9sC,EAAI+pB,EAAI,IAGtBkwB,EAAKlwB,EACLmwB,EAAKjwB,EAAI,EACT2tB,EAAS53C,EAAI+pB,EAAI,EACjB4tB,EAAQ33C,EAAI+pB,EAAI,EAEhB6tB,EAASpT,GAAKva,EAAI,EAClB0tB,EAAQnT,GAAKva,EAAI,EACjB0tB,EAAQv3C,EAAI6pB,EAAI,EAAI,EACpB6iB,EAAOA,OAAO1sC,EAAI6pB,EAAI,GAEvB6iB,EAAOxnC,MAAQ20C,EACfnN,EAAOtnC,OAAS00C,EAEhB1mC,EAAA,eAAuBlV,KAAMu+B,EAAQvgB,EAAA,GACrC9I,EAAA,eAAuBlV,KAAK2uC,QAAQhuC,SAAU6tC,EAAQxwB,EAAA,GAEtDwwB,EAAOrjB,OAASnrB,KAAKk6C,kBAAkB9wC,WAAW+hB,OAClDqjB,EAAO1gC,KAAO0gC,EAAOrjB,OAErB,IAAIyT,EAAiCL,EAAOryB,SAC5C0yB,EAAeC,MAAQ2P,EAAO1gC,KAC9B8wB,EAAeE,UAAY0P,EAAO1gC,MAQzBgsC,EAAA14C,UAAAgxC,qBAAV,WACC,OAAO,IAAI8G,IAGbY,EApVA,CAAuCjL,IA4VvClmC,EAAA,EAAShD,kBAAqC,kBAAIk0C,GAClDlxC,EAAA,EAAShD,kBAA6C,0BAAI4zC,GCrjB1D,IAAAsC,GAAA,SAAAh8C,GA6CC,SAAAi8C,IAAA,IAAAh8C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,OACjBL,EAAKI,OAAS,SAoChB,OApF0BiI,EAAA,EAAA2zC,EAAAj8C,GAqDfi8C,EAAA16C,UAAAg4C,aAAV,WAGCp5C,KAAK+7C,SAAW/7C,KAAK+qB,YAAY0T,EAAA,GACjCz+B,KAAK+7C,SAASt0B,aAAc,EAE5BznB,KAAKg8C,YAAch8C,KAAK+qB,YAAY0T,EAAA,GACpCz+B,KAAKg8C,YAAYv0B,aAAc,EAE/BznB,KAAKi8C,UAAYj8C,KAAK+qB,YAAY0T,EAAA,GAClCz+B,KAAKi8C,UAAUx0B,aAAc,GAQvBq0B,EAAA16C,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACXxb,KAAK+7C,UACR/7C,KAAK+7C,SAASxgC,SAASC,EAAOugC,UAE3B/7C,KAAKg8C,aACRh8C,KAAKg8C,YAAYzgC,SAASC,EAAOwgC,aAE9Bh8C,KAAKi8C,WACRj8C,KAAKi8C,UAAU1gC,SAASC,EAAOygC,YAIlCH,EApFA,CAA0B5C,IA4F1BvwC,EAAA,EAAShD,kBAAwB,KAAIk2C,GChHrC,IAAAK,GAAA,SAAAr8C,GAkBC,SAAAs8C,IAAA,IAAAr8C,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,qBAEjBL,EAAKqB,eAEP,OAzBwCgH,EAAA,EAAAg0C,EAAAt8C,GAyBxCs8C,EAzBA,CAAwC5C,IAyExC6C,GAAA,SAAAv8C,GA6CC,SAAAw8C,IAAA,IAAAv8C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,aAEjBL,EAAKqB,eAqMP,OAtPgCgH,EAAA,EAAAk0C,EAAAx8C,GAwDrBw8C,EAAAj7C,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MACtBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,iBAUnCipC,EAAAj7C,UAAAyI,eAAV,WACC,OAAO,IAAIqyC,IAIFG,EAAAj7C,UAAA+4C,oBAAV,SAA8BjuC,GAC7B,IAAIsiC,EAAetiC,EAASsiC,OAC5B,GAAIA,EAAQ,CACX,IAAI8N,EAAW9N,EAAOuN,SAClBQ,EAAc/N,EAAOwN,YACrBQ,EAAYhO,EAAOyN,UAEvB,GAAIj8C,KAAKqU,UAAYrU,KAAKuK,MAAO,CAChC,IAAI7I,EAAY8sC,EAAO1nC,WAAa,EACpCy1C,EAAY76C,EAAIA,EAELwK,EAASkR,gBAAgBpd,KAAKogB,YAC7BlU,EAASkR,gBAAgBpd,KAAKmgB,QAD1C,IAGIo6B,EAAQv6C,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAKogB,YACvCo6B,EAASx6C,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAKmgB,QACxCs6B,EAAOz6C,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAK06C,WACtCC,EAAQ36C,KAAKwK,MAAM+F,KAAKrE,EAAUlM,KAAK46C,YAEvC74C,EAASysC,EAAOzsC,OAEpBu6C,EAASrW,GAAKsU,EAAQx4C,EACtBu6C,EAASpW,GAAKqU,EAAQx4C,EACtBu6C,EAAS/Y,GAAK,EACd+Y,EAAS5d,GAAKh9B,EAEd86C,EAAUvW,GAAKuU,EAASz4C,EACxBy6C,EAAUtW,GAAKsU,EAASz4C,EACxBy6C,EAAUjZ,GAAK7hC,EACf86C,EAAU9d,GAAK,EAAIh9B,EAEnB66C,EAAYtW,GAAK0U,EAAQ54C,EACzBw6C,EAAYrW,GAAKuU,EAAO14C,EAGzB,GAAI/B,KAAKqU,UAAYrU,KAAKwK,MAAO,CAChC,IAAI1I,EAAY0sC,EAAOvnC,YAAc,EAErCs1C,EAAYz6C,EAAIA,EAELoK,EAASkR,gBAAgBpd,KAAKggB,YAC7B9T,EAASkR,gBAAgBpd,KAAK+f,QAD1C,IAGIg7B,EAAQ/6C,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAKggB,YACvCg7B,EAASh7C,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAK+f,QACxCk7B,EAAOj7C,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAKk7C,WACtCC,EAAQn7C,KAAKuK,MAAM4F,KAAKjE,EAAUlM,KAAKo7C,YAEvCv5C,EAAS2sC,EAAO3sC,OAEpBy6C,EAAS/Y,GAAKwX,EAAQl5C,EACtBy6C,EAAS5d,GAAKqc,EAAQl5C,EACtBy6C,EAASrW,GAAKnkC,EACdw6C,EAASpW,GAAK,EAAIpkC,EAElB06C,EAAUjZ,GAAKyX,EAASn5C,EACxB26C,EAAU9d,GAAKsc,EAASn5C,EACxB26C,EAAUvW,GAAK,EACfuW,EAAUtW,GAAKpkC,EAEfy6C,EAAYhZ,GAAK4X,EAAQt5C,EACzB06C,EAAY7d,GAAKuc,EAAOp5C,EAGzBsI,EAAA,KAAWnK,KAAK+gB,WAAW1W,WAAY,SAAC4uB,GAEvC,IAAIqY,EAAcplC,EAASqlC,cAAcjjC,OAAO2qB,EAAUpkB,KAC1D,GAAIy8B,EAAa,CAChB,IAAImL,EAAgBnL,EAAYyK,SAChCU,EAAc/6C,EAAI46C,EAAS56C,EAC3B+6C,EAAc36C,EAAIw6C,EAASx6C,EAC3B26C,EAAclZ,GAAK+Y,EAAS/Y,GAC5BkZ,EAAc/d,GAAK4d,EAAS5d,GAC5B+d,EAAcxW,GAAKqW,EAASrW,GAC5BwW,EAAcvW,GAAKoW,EAASpW,GAE5B,IAAIwW,EAAiBpL,EAAY2K,UACjCS,EAAeh7C,EAAI86C,EAAU96C,EAC7Bg7C,EAAe56C,EAAI06C,EAAU16C,EAC7B46C,EAAenZ,GAAKiZ,EAAUjZ,GAC9BmZ,EAAehe,GAAK8d,EAAU9d,GAC9Bge,EAAezW,GAAKuW,EAAUvW,GAC9ByW,EAAexW,GAAKsW,EAAUtW,GAE9B,IAAIyW,EAAmBrL,EAAY0K,YACnCW,EAAiBj7C,EAAI66C,EAAY76C,EACjCi7C,EAAiB76C,EAAIy6C,EAAYz6C,EACjC66C,EAAiBpZ,GAAKgZ,EAAYhZ,GAClCoZ,EAAiBje,GAAK6d,EAAY7d,GAClCie,EAAiB1W,GAAKsW,EAAYtW,GAClC0W,EAAiBzW,GAAKqW,EAAYrW,QAc/BmW,EAAAj7C,UAAAk9B,mBAAP,SAA0BC,GAEzB,IAAI9S,EAAY8S,EAAOz3B,WACnB6kB,EAAY4S,EAAOt3B,YAEvBs3B,EAAOiU,iBAEP,IAIImJ,EACAC,EALApN,EAAejQ,EAAOxT,YAAY8wB,IACtCrN,EAAO/mB,aAAc,EACrB+mB,EAAOjzB,SAAcvb,KAAK2uC,QAAQhuC,UAKlC,IAAIo7C,EAAiBvN,EAAOuN,SACxBE,EAAkBzN,EAAOyN,UACzBD,EAAoBxN,EAAOwN,YAE3Bh8C,KAAKqU,UAAYrU,KAAKwK,OACzBmxC,EAAKlwB,EAAI,EACTmwB,EAAKjwB,EAELqwB,EAAYl6C,EAAI6pB,EAAI,EACpBqwB,EAAYtd,GAAKjT,EAEjBswB,EAASr6C,EAAI+pB,EAAI,EAAI,EACrBswB,EAAS7V,GAAKva,EAAI,EAElBswB,EAAUv6C,EAAI+pB,EAAI,EAClBwwB,EAAU/V,GAAKva,EACfswB,EAAUhW,GAAKta,EAAI,IAGnBgwB,EAAKlwB,EACLmwB,EAAKjwB,EAAI,EAETqwB,EAAYt6C,EAAI+pB,EAAI,EACpBuwB,EAAY9V,GAAKva,EAEjBowB,EAASj6C,EAAI6pB,EAAI,EAAI,EACrBowB,EAASrd,GAAKjT,EAAI,EAElBwwB,EAAUn6C,EAAI6pB,EAAI,EAClBswB,EAAUvd,GAAKjT,EACfwwB,EAAU1Y,GAAK9X,EAAI,GAEpB+iB,EAAOxnC,MAAQ20C,EACfnN,EAAOtnC,OAAS00C,EAEhB1mC,EAAA,eAAuBlV,KAAMu+B,EAAQvgB,EAAA,GACrC9I,EAAA,eAAuBlV,KAAK2uC,QAAQhuC,SAAU6tC,EAAQxwB,EAAA,GAEtDwwB,EAAOrjB,OAASnrB,KAAKk6C,kBAAkB9wC,WAAW+hB,OAElD,IAAIyT,EAAiCL,EAAOryB,SAC5C0yB,EAAeC,MAAQ2P,EAAOrjB,OAC9ByT,EAAeE,UAAY0P,EAAOrjB,QAQzBkxB,EAAAj7C,UAAAgxC,qBAAV,WACC,OAAO,IAAIyJ,IAGbQ,EAtPA,CAAgCxC,IA8PhClxC,EAAA,EAAShD,kBAA8B,WAAIy2C,GAC3CzzC,EAAA,EAAShD,kBAAsC,mBAAIu2C,GC9SnD,IAAAU,GAAA,SAAA/8C,GA0CC,SAAAg9C,IAAA,IAAA/8C,EAGCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,0BA0DnB,OAxG2CgI,EAAA,EAAA00C,EAAAh9C,GA0DnCg9C,EAAAz7C,UAAA+5B,YAAP,SAAmBC,EAAkBC,EAAuBC,EAAqBC,EAAqBuhB,EAAoBC,GACzH,GAAI3hB,EAAO72B,OAAS,GAAK82B,EAAY92B,OAAS,EAE7C,GAAIu4C,EAAU,CACb,IAAIj5C,EAAeod,EAAA,OAAama,EAAO,IACvC,GAAIA,EAAO72B,OAAS,EACnB,IAAK,IAAI0H,EAAI,EAAGA,EAAImvB,EAAO72B,OAAQ0H,IAAK,CACvC,IAAIrK,EAAQw5B,EAAOnvB,GACfA,EAAI,GAAKhK,KAAKqK,MAAML,EAAI,GAC3BpI,GAAQod,EAAA,OAAarf,GAGrBiC,GAAQod,EAAA,OAAarf,GAKxB5B,KAAKk7B,aAAar3B,KAAOA,GAErB7D,KAAKgrB,YAAc,GAAKhrB,KAAKi7B,WAAWjQ,YAAc,KACzDnnB,EAAOod,EAAA,OAAama,EAAO,IAAMna,EAAA,SAAema,GAChDv3B,GAAQod,EAAA,OAAaoa,EAAY,IAAMpa,EAAA,SAAeoa,GACtDx3B,GAAQod,EAAA,OAAama,EAAO,IAC5Bv3B,GAAQod,EAAA,YAERjhB,KAAKi7B,WAAWp3B,KAAOA,OAMpB,CACAA,EAAeod,EAAA,OAAama,EAAO,IAAMna,EAAA,SAAema,GAE5Dp7B,KAAKk7B,aAAar3B,KAAOA,GAErB7D,KAAKgrB,YAAc,GAAKhrB,KAAKi7B,WAAWjQ,YAAc,KACzDnnB,GAAQod,EAAA,OAAaoa,EAAY,IAAMpa,EAAA,SAAeoa,GACtDx3B,GAAQod,EAAA,OAAama,EAAO,IAC5Bv3B,GAAQod,EAAA,YAERjhB,KAAKi7B,WAAWp3B,KAAOA,KAK5Bg5C,EAxGA,CAA2C9hB,GAgH3CpyB,EAAA,EAAShD,kBAAyC,sBAAIi3C,GChJtD,IAAAI,GAAA,SAAAn9C,GAYC,SAAAo9C,IAAA,IAAAn9C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,yBACjBL,EAAKqB,eAGP,OAlB4CgH,EAAA,EAAA80C,EAAAp9C,GAkB5Co9C,EAlBA,CAA4CrhB,IAwE5CshB,GAAA,SAAAr9C,GA4CC,SAAAs9C,IAAA,IAAAr9C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,iBACjBL,EAAKqB,aACLrB,EAAK6O,cAAgB,EACrB7O,EAAK8O,YAAc,IAyJrB,OA1MoCzG,EAAA,EAAAg1C,EAAAt9C,GA0DzBs9C,EAAA/7C,UAAAyI,eAAV,WACC,OAAO,IAAImzC,IAaFG,EAAA/7C,UAAAy8B,UAAV,SAAoBzC,EAAkBlvB,EAA6B6T,EAAgBI,EAAgBgG,GAElG,IAAIxX,EAAgB3O,KAAK2O,cACrBC,EAAc5O,KAAK4O,YAEnB00B,EAAatjC,KAAKuK,MAAM4F,KAAKjE,EAAU6T,EAAQpR,GAC/Co3B,EAAa/lC,KAAKwK,MAAM+F,KAAKrE,EAAUiU,EAAQxR,GAE/C40B,EAAavjC,KAAKuK,MAAM4F,KAAKjE,EAAU6T,EAAQnR,GAC/Cq3B,EAAajmC,KAAKwK,MAAM+F,KAAKrE,EAAUiU,EAAQvR,GASnD,GAPA00B,EAAKn4B,EAAA,WAAiBm4B,GAAK,IAAO,KAClCyC,EAAK56B,EAAA,WAAiB46B,GAAK,IAAO,KAElCxC,EAAKp4B,EAAA,WAAiBo4B,GAAK,IAAO,KAClC0C,EAAK96B,EAAA,WAAiB86B,GAAK,IAAO,MAG7BjmC,KAAK88C,UAAY98C,KAAKs8B,SACtBlB,EAAO72B,OAAS,EAAG,CACtB,IAAI64C,EAAoBhiB,EAAOA,EAAO72B,OAAS,GAC3CvE,KAAKqU,UAAYrU,KAAKuK,QACrB4b,EACHiV,EAAOpxB,MAAOtI,EAAG07C,EAAU17C,EAAGI,EAAGmkC,IAGjC7K,EAAOpxB,MAAOtI,EAAG4hC,EAAIxhC,EAAGs7C,EAAUt7C,KAGhC9B,KAAKqU,UAAYrU,KAAKwK,QACrB2b,EACHiV,EAAOpxB,MAAOtI,EAAG6hC,EAAIzhC,EAAGs7C,EAAUt7C,IAGlCs5B,EAAOpxB,MAAOtI,EAAG07C,EAAU17C,EAAGI,EAAGikC,KAMrC,IAAIsX,GAAmB37C,EAAG4hC,EAAIxhC,EAAGikC,GAC7BsG,GAAmB3qC,EAAG6hC,EAAIzhC,EAAGmkC,GAE7B9f,EACHiV,EAAOpxB,KAAKqiC,EAAQgR,GAGpBjiB,EAAOpxB,KAAKqzC,EAAQhR,IAYZ8Q,EAAA/7C,UAAA+5B,YAAV,SAAsB6B,EAAgC5B,EAAkBC,GACvE,IAAI0hB,GAAW,EACX/8C,KAAKwK,OAASxK,KAAKqU,WACtB0oC,GAAW,GAEZ/f,EAAQ7B,YAAYC,EAAQC,EAAar7B,KAAKu8B,SAAUv8B,KAAKw8B,SAAUx8B,KAAK88C,SAAUC,IAQ7EI,EAAA/7C,UAAA86B,cAAV,WACC,OAAO,IAAI0gB,IAWZn8C,OAAA+B,eAAW26C,EAAA/7C,UAAA,gBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAR9B,SAAoBC,GACnB3C,KAAK8C,iBAAiB,WAAYH,GAAO,oCAiB1ClC,OAAA+B,eAAW26C,EAAA/7C,UAAA,qBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,sBAR9B,SAAyBC,GACxB3C,KAAK8C,iBAAiB,gBAAiBH,GAAO,oCAgB/ClC,OAAA+B,eAAW26C,EAAA/7C,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK8C,iBAAiB,cAAeH,GAAO,oCAU9Cw6C,EA1MA,CAAoCrhB,IAkNpCnzB,EAAA,EAAShD,kBAAkC,eAAIu3C,GAC/Cv0C,EAAA,EAAShD,kBAA0C,uBAAIq3C,GChQvD,IAAAM,GAAA,SAAAz9C,GAiCC,SAAA09C,IAAA,IAAAz9C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,gBAqDnB,OAxFiCgI,EAAA,EAAAo1C,EAAA19C,GAyCtB09C,EAAAn8C,UAAAg4C,aAAV,WACCp5C,KAAKw9C,YAAcx9C,KAAK+qB,YAAY+b,GAAA,GACpC9mC,KAAKw9C,YAAY/1B,aAAc,EAC/BznB,KAAKw9C,YAAYt8C,mBAAgBwM,EAEjC1N,KAAKwuC,OAAcxuC,KAAKw9C,aAQlBD,EAAAn8C,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACXxb,KAAKw9C,aACRx9C,KAAKw9C,YAAYjiC,SAASC,EAAOgiC,cAUzBD,EAAAn8C,UAAAq8C,YAAV,WACC,IAAI96C,EAAQ3C,KAAK0C,iBAAiB,YAIlC,OAHK0K,EAAA,SAAezK,KACnBA,EAAQ3C,KAAKw9C,YAAY75B,UAEnBhhB,GAQE46C,EAAAn8C,UAAAs8C,YAAV,WACC,IAAI/6C,EAAQ3C,KAAK0C,iBAAiB,YAIlC,OAHK0K,EAAA,SAAezK,KACnBA,EAAQ3C,KAAKw9C,YAAY55B,UAEnBjhB,GAGT46C,EAxFA,CAAiClL,GAAA,GAgGjC1pC,EAAA,EAAShD,kBAA+B,YAAI23C,GCtH5C,IAAAK,GAAA,SAAA99C,GAmBC,SAAA+9C,IAAA,IAAA99C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,uBACjBL,EAAKqB,eAEP,OAxB+CgH,EAAA,EAAAy1C,EAAA/9C,GAwB/C+9C,EAxBA,CAA+CvP,IAwE/CwP,GAAA,SAAAh+C,GAgDC,SAAAi+C,IAAA,IAAAh+C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,oBACjBL,EAAKqB,eAqMP,OAxPuCgH,EAAA,EAAA21C,EAAAj+C,GA2D5Bi+C,EAAA18C,UAAAgxC,qBAAV,WACC,OAAO,IAAIkL,IAQLQ,EAAA18C,UAAAiB,SAAP,WAGKrC,KAAKsC,MAAMC,SACdvC,KAAKsC,MAAMD,WAGZxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,OASR89C,EAAA18C,UAAAquC,wBAAP,SAA+BvjC,GAA/B,IASK6xC,EACAC,EAEAC,EACAC,EAbLp+C,EAAAE,KACKK,EAAaL,KAAKsC,MAAMjC,WACxBC,EAAWN,KAAKsC,MAAMhC,SAEtB6f,EAAiBngB,KAAKmgB,OACtBC,EAAqBpgB,KAAKogB,WAC1BL,EAAiB/f,KAAK+f,OACtBC,EAAqBhgB,KAAKggB,WAQ1BrR,EAAgB3O,KAAK0vC,iBAAiBxjC,GACtC0C,EAAc5O,KAAK2vC,eAAezjC,GAElCiyC,GAAa79C,EAAWD,IAAeL,KAAKkL,UAAU3G,QAAUvE,KAAKwD,IAAMxD,KAAKyD,QAEpFpD,GAA0BsO,EAAgBwvC,EAC1C79C,IAAuB,EAAIsO,GAAeuvC,EAE1C,IAEI/S,EAFmBprC,KAAK2uC,QAAQhuC,SAEAyqC,aAEhCh+B,EAAA,MAAYg+B,KACfA,EAAe,KAGhB,IAAI8E,EAAiB/kC,EAAA,OAAayD,EAAcD,IAAkB,EAAIy8B,EAAe,KAAO,EAAG,GAmB/F,GAlBAz8B,GAAiBuhC,EACjBthC,GAAeshC,EAEXlwC,KAAKqU,UAAYrU,KAAKuK,OACzB0zC,EAAU9yC,EAAA,aAAoBzJ,EAAG1B,KAAKwK,MAAM2F,KAAKjE,EAAUiU,EAAQjU,EAASlD,UAAUmX,GAAS,UAAWre,EAAG9B,KAAKwK,MAAM+F,KAAKrE,EAAUiU,EAAQjU,EAASlD,UAAUmX,GAAS,YAC3K+9B,EAAU/yC,EAAA,aAAoBzJ,EAAG1B,KAAKwK,MAAM2F,KAAKjE,EAAUkU,EAAYlU,EAASlD,UAAUoX,GAAa,UAAWte,EAAG9B,KAAKwK,MAAM+F,KAAKrE,EAAUkU,EAAYlU,EAASlD,UAAUoX,GAAa,YAE3L29B,EAAS/9C,KAAKuK,MAAMiG,SAAStE,EAAU8T,EAAYrR,EAAe,UAClEqvC,EAASh+C,KAAKuK,MAAMiG,SAAStE,EAAU6T,EAAQnR,EAAa,YAG5DqvC,EAAU9yC,EAAA,aAAoBzJ,EAAG1B,KAAKwK,MAAM2F,KAAKjE,EAAUiU,EAAQxR,EAAe,UAAW7M,EAAG9B,KAAKwK,MAAM+F,KAAKrE,EAAUiU,EAAQxR,EAAe,YACjJuvC,EAAU/yC,EAAA,aAAoBzJ,EAAG1B,KAAKwK,MAAM2F,KAAKjE,EAAUkU,EAAYxR,EAAa,UAAW9M,EAAG9B,KAAKwK,MAAM+F,KAAKrE,EAAUkU,EAAYxR,EAAa,YAErJmvC,EAAS/9C,KAAKuK,MAAMiG,SAAStE,EAAU6T,EAAQ7T,EAASlD,UAAU+W,GAAS,UAC3Ei+B,EAASh+C,KAAKuK,MAAMiG,SAAStE,EAAU8T,EAAY9T,EAASlD,UAAUgX,GAAa,WAGhFg+B,EAASD,EAAQ,CACpB,IAAIK,EAAOJ,EACXA,EAASD,EACTA,EAASK,EAGVL,EAAS5yC,EAAA,WAAiB4yC,EAAQ19C,EAAYC,GAC9C09C,EAAS7yC,EAAA,WAAiB6yC,EAAQ39C,EAAYC,GAE9C,IAAIk9C,EAActxC,EAASsiC,OACtBgP,IACJA,EAAcx9C,KAAK2uC,QAAQ94B,SAC3B3J,EAASsiC,OAASgP,EAClBtoC,EAAA,oBAA4BlV,KAAK2uC,QAAQhuC,SAAU68C,EAAax/B,EAAA,GAChE9R,EAASwiC,UAAU8O,GACnBx9C,KAAKqxC,gBAAgBmM,IAGtB,IAAIhY,EAAQgY,EAAYA,YAExBhY,EAAMnlC,WAAa09C,EAEnB,IAAIx6C,EAAMy6C,EAASD,EAEfx6C,EAAM,GACTiiC,EAAMjiC,IAAMA,EACZiiC,EAAMhlC,OAASy9C,EACfzY,EAAMziC,YAAcm7C,EACpBV,EAAYpxC,YAAa,EAEzBoxC,EAAYvwB,OAASjtB,KAAKmvC,iBAE1BhlC,EAAA,KAAWnK,KAAK+gB,WAAW1W,WAAY,SAAC4uB,GACvC,IAAIqY,EAAcplC,EAASqlC,cAAcjjC,OAAO2qB,EAAUpkB,KACrDy8B,IACJA,EAAcxxC,EAAK6uC,QAAQ94B,SAE3BX,EAAA,oBAA4BpV,EAAK6uC,QAAQhuC,SAAU2wC,EAAatzB,EAAA,GAChE9I,EAAA,eAAuB+jB,EAAUyE,SAAU4T,EAAatzB,EAAA,GAEpDszB,EAAYplC,UACfiR,EAAA,OAAcm0B,EAAYplC,SAASmqB,QAASib,GAG7CplC,EAASwiC,UAAU4C,GACnBxxC,EAAKuxC,gBAAgBC,GACrBplC,EAASqlC,cAAc/iC,OAAOyqB,EAAUpkB,IAAKy8B,IAG9C,IAAI9L,EAAQgY,EAAYA,YACxBhY,EAAMnlC,WAAa09C,EACnBvY,EAAMjiC,IAAMA,EACZiiC,EAAMhlC,OAASy9C,EACfzY,EAAMziC,YAAcm7C,EAEhB1Y,EAAMjjC,SACTijC,EAAMnjC,WAGPivC,EAAYllC,YAAa,EACzBklC,EAAYrkB,OAASntB,EAAKqvC,oBAI3BnvC,KAAKwvC,qBAAqBtjC,IAgBlB4xC,EAAA18C,UAAAsiB,SAAV,SAAmBxX,EAAqC6a,EAAcC,EAAclC,EAAoBC,EAAoBkC,EAAoBC,GAE1ID,IACJA,EAAY,UAERC,IACJA,EAAY,UAGb,IAAIxlB,EAAY1B,KAAKwK,MAAM2F,KAAKjE,EAAU8a,EAAMjC,EAAWmC,GACvDplB,EAAY9B,KAAKwK,MAAM+F,KAAKrE,EAAU8a,EAAMjC,EAAWmC,GAEvD1mB,EAAiB2K,EAAA,aAAoBzJ,EAAGA,EAAGI,EAAGA,IAErC,GAAVtB,IACFA,EAAS,MAGV,IAAI4C,EAAgBpD,KAAKuK,MAAMiG,SAAStE,EAAU6a,EAAMjC,EAAWmC,GAEnE,OAASvlB,EAAGlB,EAAS2K,EAAA,IAAU/H,GAAQtB,EAAGtB,EAAS2K,EAAA,IAAU/H,KASpD06C,EAAA18C,UAAA0f,YAAV,WACC,IAAIpd,EAAmD1D,KAAKwK,MAAM9G,SAClE,OAAOud,EAAA,IAAUvd,EAASrD,WAAYqD,EAASpD,SAAWoD,EAASrD,WAAYqD,EAAS1B,YAAa0B,EAAS2B,mBAGhHy4C,EAxPA,CAAuCjP,IAgQvClmC,EAAA,EAAShD,kBAAqC,kBAAIk4C,GAClDl1C,EAAA,EAAShD,kBAA6C,0BAAIg4C,oBCzT1DU,GAAA,SAAAx+C,GAaC,SAAAy+C,IAAA,IAAAx+C,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,wBAEjBL,EAAKqB,eAEP,OAnB2CgH,EAAA,EAAAm2C,EAAAz+C,GAmB3Cy+C,EAnBA,CAA2CC,GAAA,GAkG3CC,GAAA,SAAA3+C,GAoDC,SAAA4+C,IAAA,IAAA3+C,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,gBACjBL,EAAK4+C,SAAWj+C,OAAA+mB,EAAA,EAAA/mB,CAAQ,GACxBX,EAAK6+C,YAAcl+C,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAC3BX,EAAK8+C,cAAgBn+C,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAC7BX,EAAK++C,QAAU,OAEf/+C,EAAKg/C,WAAWn+C,SAASqG,MAAQ,EACjClH,EAAKg/C,WAAWn+C,SAASuG,OAAS,EAElCpH,EAAKqB,eAmWP,OAnamCgH,EAAA,EAAAs2C,EAAA5+C,GAwExB4+C,EAAAr9C,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MACtBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,oBAUnCqrC,EAAAr9C,UAAAyI,eAAV,WACC,OAAO,IAAIw0C,IAQLI,EAAAr9C,UAAAiB,SAAP,WACCxC,EAAAuB,UAAMiB,SAAQtC,KAAAC,MACdA,KAAK++C,gBAAarxC,GAUT+wC,EAAAr9C,UAAA49C,aAAV,SAAuB9yC,GACtB,IAAIpB,EAAQoB,EAASpB,MACjBm0C,EAAoB/yC,EAASkR,gBAAgB,SAC7CtS,EAAQ9K,KAAKkL,UAAU3G,OAAS,IAEnC06C,EADej/C,KAAKkL,UAAUiB,SAASrB,EAAQ,GAC1BsS,gBAAgB,UAKtC,OAHiB,GAAb6hC,IACHA,EAAY,MAENA,GASDR,EAAAr9C,UAAA2kB,qBAAP,eAAAjmB,EAAAE,KACKg6B,EAAWh6B,KAAKk/C,gBAAgBn1B,WAChCkQ,EAAYj6B,KAAKk/C,gBAAgBl1B,YAiBrC,GAfAhqB,KAAKkL,UAAUwB,KAAK,SAACR,GACpB,IAAIizC,EAAWjzC,EAASkR,gBAAgB,SAAWlR,EAASvJ,MACxDy8C,EAAYlzC,EAASkzC,UACD,YAApBt/C,EAAKiwB,YACRkK,GAAcmlB,EAAUn4C,YAAck4C,EAGtCnlB,GAAaolB,EAAUt4C,WAAaq4C,IAKtCn/C,KAAKq/C,eAAiBp/B,EAAA,gBAAuBjgB,KAAK4+C,cAAe3kB,GACjEj6B,KAAKs/C,cAAgBr/B,EAAA,gBAAuBjgB,KAAK4+C,cAAe5kB,GAExC,YAApBh6B,KAAK+vB,YAA2B,CACnC,IAAIjuB,GAAKm4B,EAAYj6B,KAAKq/C,gBAAkB,EAC5Cr/C,KAAKk/C,gBAAgBp9C,EAAIA,EACzB9B,KAAKu/C,gBAAgBz9C,EAAIA,EACzB9B,KAAKw/C,eAAe19C,EAAIA,MAEpB,CACJ,IAAIJ,GAAKs4B,EAAWh6B,KAAKs/C,eAAiB,EAC1Ct/C,KAAKk/C,gBAAgBx9C,EAAIA,EACzB1B,KAAKu/C,gBAAgB79C,EAAIA,EACzB1B,KAAKw/C,eAAe99C,EAAIA,EAGzB7B,EAAAuB,UAAM2kB,qBAAoBhmB,KAAAC,OASjBy+C,EAAAr9C,UAAAq+C,cAAV,SAAwBvzC,GAEvB,IAAIwqB,EAAM12B,KAAKkM,SAASyF,OAAOhP,MAAM+zB,IAErC,GAAU,GAAPA,EAAH,CAIA,IAAI8O,EAAQt5B,EAASs5B,MACjB4Z,EAAYlzC,EAASkzC,UACrB16C,EAAQwH,EAASxH,MACjBL,EAAO6H,EAAS7H,KAGhBu4B,GADY58B,KAAKg/C,aAAa9yC,GACfA,EAASkR,gBAAgB,UAExB,GAAhBwf,IACHA,EAAe,MAGhB,IAAI8iB,EAAe1/C,KAAKs/C,cACpBV,EAAgB5+C,KAAKq/C,eAErBrlB,EAAWh6B,KAAKk/C,gBAAgBn1B,WAChCkQ,EAAYj6B,KAAKk/C,gBAAgBl1B,YAEjC21B,EAAYP,EAAUt4C,WACtB84C,EAAaR,EAAUn4C,YAE3B,GAAwB,YAApBjH,KAAK+vB,YAA2B,CACnC,IAAI2uB,EAAWz+B,EAAA,gBAAuBjgB,KAAK0+C,SAAU1kB,GAEhD5sB,EAAA,SAAepN,KAAK++C,cACxB/+C,KAAK++C,WAAaL,GAInB,IAAIC,EAAc1+B,EAAA,gBAAuBjgB,KAAK2+C,YAAa3kB,GACvD6lB,EAAgB7/C,KAAK++C,WAErB37C,EAAQnB,KAAKE,MAAMy8C,EAAeF,EAAWC,GAExC,IADLmB,EAAI79C,KAAK89C,IAAI99C,KAAKQ,GAAK,EAAIW,MAE9B08C,EAAI,MAGL,IAAIE,OAAW,EACXC,OAAgB,EAEpB,GAAoB,QAAhBjgD,KAAK6+C,QAAmB,CAC3B,IACIqB,GADexB,EAAWC,GAAe,EAAIC,EACtBhiB,EAAelG,EAEtCqiB,EAAI92C,KAAKyX,IAAImmC,EAAgBA,EAAgB,EAAIK,EAASJ,GAG9DG,GAAoB,EAAIC,GADxBF,GAAeH,EAAgB59C,KAAKm1C,KAAK2B,IAAM+G,GACAD,GAAiBG,MAE5D,CAGJC,EAAmBJ,GADnBG,EAAcpB,EAAgBhiB,EADpB58B,KAAKkM,SAASyF,OAAOhP,MAAM+zB,KAEYopB,EAIlDta,EAAMt+B,OAAS84C,EACfxa,EAAMx+B,MAAQgzB,EACdwL,EAAMmZ,YAAcsB,EACpBza,EAAMkZ,SAAWmB,EAEjBT,EAAUV,SAAWlZ,EAAMmZ,YAC3BS,EAAUT,YAAcnZ,EAAMmZ,YAE9BnZ,EAAM1jC,EAAI9B,KAAKmgD,OAGVngD,KAAKmmC,YAITzhC,EAAMhD,EAAI,EAHVgD,EAAMhD,EAAIs4B,EAAW,EAMtBt1B,EAAM5C,EAAI0jC,EAAMzjC,OAASyjC,EAAMv+B,YAAc5C,EAAK0gB,UAElD/kB,KAAKmgD,QAAU3a,EAAMv+B,YAAc24C,EAAahjB,EAAe1wB,EAASvJ,MACxEy8C,EAAUt9C,EAAI9B,KAAKmgD,OAASP,EAC5BR,EAAU19C,EAAIs4B,EAAW,MAErB,CACA0kB,EAAWz+B,EAAA,gBAAuBjgB,KAAK0+C,SAAUzkB,GAEhD7sB,EAAA,SAAepN,KAAK++C,cACxB/+C,KAAK++C,WAAaL,GAGnB,IAIIoB,EAJAnB,EAAc1+B,EAAA,gBAAuBjgB,KAAK2+C,YAAa1kB,GACvD4lB,EAAgB7/C,KAAK++C,WAErB37C,EAAQnB,KAAKE,MAAMu9C,EAAchB,EAAWC,GAEvC,IADLmB,EAAI79C,KAAK89C,IAAI99C,KAAKQ,GAAK,EAAIW,MAE9B08C,EAAI,MAGL,IAAIM,OAAU,EACVH,OAAgB,EAEpB,GAAoB,QAAhBjgD,KAAK6+C,QAIRoB,GAAoB,GAFhBC,GADexB,EAAWC,GAAe,EAAIe,EACtB9iB,EAAe58B,KAAKkM,SAASyF,OAAOhP,MAAM+zB,MACrE0pB,GAAcP,EAAgB59C,KAAKm1C,KAAKyI,EAAgBA,EAAgB,EAAIK,EAASJ,IAAMA,GAC7CD,GAAiBO,OAI/DH,EAAmBJ,GADnBO,EAAaV,EAAe9iB,EAAe58B,KAAKkM,SAASyF,OAAOhP,MAAM+zB,KACtBopB,EAGjDta,EAAMx+B,MAAQo5C,EACd5a,EAAMt+B,OAAS+yB,EACfuL,EAAMmZ,YAAcsB,EACpBza,EAAMkZ,SAAWmB,EAEjBT,EAAUV,SAAWlZ,EAAMmZ,YAC3BS,EAAUT,YAAcnZ,EAAMmZ,YAE9BnZ,EAAM9jC,EAAI1B,KAAKmgD,OAEVngD,KAAKmmC,YAITzhC,EAAM5C,EAAI9B,KAAKu/C,gBAAgB3xC,eAH/BlJ,EAAM5C,EAAIm4B,EAAY,EAMvBv1B,EAAMhD,EAAI8jC,EAAM3jC,OAAS2jC,EAAM1+B,WAAazC,EAAKygB,UAEjD9kB,KAAKmgD,QAAU3a,EAAM1+B,WAAa64C,EAAY/iB,EAAe1wB,EAASvJ,MACtEy8C,EAAU19C,EAAI1B,KAAKmgD,OAASR,EAC5BP,EAAUt9C,EAAIm4B,EAAY,EAG3Bj6B,KAAK++C,WAAavZ,EAAMmZ,cAgBzBl+C,OAAA+B,eAAWi8C,EAAAr9C,UAAA,gBASX,WACC,OAAOpB,KAAK0C,iBAAiB,iBAV9B,SAAoBC,GACf3C,KAAK4C,mBAAmB,WAAYD,GAAO,GAAO,EAAO,IAAI,IAChE3C,KAAK6C,8CAmBPpC,OAAA+B,eAAWi8C,EAAAr9C,UAAA,qBASX,WACC,OAAOpB,KAAK0C,iBAAiB,sBAV9B,SAAyBC,GACpB3C,KAAK4C,mBAAmB,gBAAiBD,GAAO,GAAO,EAAO,IAAI,IACrE3C,KAAK6C,8CAuBPpC,OAAA+B,eAAWi8C,EAAAr9C,UAAA,mBASX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAV9B,SAAuBC,GAClB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAO,EAAO,IAAI,IACnE3C,KAAK6C,8CAkCPpC,OAAA+B,eAAWi8C,EAAAr9C,UAAA,eASX,WACC,OAAOpB,KAAK0C,iBAAiB,gBAV9B,SAAmBC,GACd3C,KAAK8C,iBAAiB,UAAWH,IACpC3C,KAAK6C,8CAUR47C,EAnaA,CAAmCF,GAAA,GA2anC51C,EAAA,EAAShD,kBAAiC,cAAI64C,GAC9C71C,EAAA,EAAShD,kBAAyC,sBAAI04C,GChhBtD,IAAAgC,GAAA,SAAAxgD,GAYC,SAAAygD,IAAA,IAAAxgD,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,iCAEjBL,EAAKqB,eAEP,OAlBoDgH,EAAA,EAAAm4C,EAAAzgD,GAkBpDygD,EAlBA,CAAoDjC,IAoEpDkC,GAAA,SAAA1gD,GA+CC,SAAA2gD,IAAA,IAAA1gD,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,yBACjBL,EAAK4+C,SAAWj+C,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACxBX,EAAK6+C,YAAcl+C,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAC3BX,EAAK++C,QAAU,SAEf/+C,EAAKqB,aAELrB,EAAK2gD,YAAc3gD,EAAKo/C,gBAAgBn0B,YAAY/M,EAAA,GACpDle,EAAK2gD,YAAYv9B,SAAU,EAC3BpjB,EAAK2gD,YAAYv8C,OAAS,MAmI5B,OA9L4CiE,EAAA,EAAAq4C,EAAA3gD,GAmEpC2gD,EAAAp/C,UAAA2kB,qBAAP,WAEC,IAAIiU,EAAWh6B,KAAKk/C,gBAAgBllB,SAChCC,EAAYj6B,KAAKk/C,gBAAgBjlB,UAEjCymB,EAAa1gD,KAAKygD,YAGlBE,EAAeD,EAAW/yC,cAAgB+yC,EAAW5a,MACrD8a,EAAgBF,EAAW9yC,eAAiB8yC,EAAW5a,MAEvDA,EAAQ36B,EAAA,IAAU8uB,EAAY2mB,EAAe5mB,EAAW2mB,GAEzD7a,GAAS7jB,MACX6jB,EAAQ,GAGTA,EAAQ36B,EAAA,IAAU,KAAO26B,GAEzB,IAAI+a,EAAW11C,EAAA,IAAU6uB,EAAU2mB,EAAe7a,GAC9Cgb,EAAY31C,EAAA,IAAU8uB,EAAW2mB,EAAgB9a,GAErD4a,EAAW5a,MAAQA,EAEK,YAApB9lC,KAAK+vB,aAER/vB,KAAK0+C,SAAWmC,EAAW,EAC3B7gD,KAAK2+C,YAAckC,EAAW,EAC9B7gD,KAAK4+C,cAAgBkC,EACrBJ,EAAWh/C,EAAIs4B,EAAW,EAC1B0mB,EAAW5+C,EAAIg/C,EAAY,IAG3B9gD,KAAK0+C,SAAWoC,EAAY,EAC5B9gD,KAAK2+C,YAAcmC,EAAY,EAC/B9gD,KAAK4+C,cAAgBiC,EACrBH,EAAWtuB,OAAS,SACpBsuB,EAAWh/C,EAAIm/C,EAAW,EAC1BH,EAAW5+C,EAAIm4B,EAAY,GAG5BymB,EAAW5f,eAAiB,SAC5B4f,EAAW7f,iBAAmB,SAE9B7gC,KAAKk/C,gBAAgBhxC,KAAOlO,KAAKygD,YAEjC5gD,EAAAuB,UAAM2kB,qBAAoBhmB,KAAAC,OAOjBwgD,EAAAp/C,UAAA6R,sBAAV,WACCpT,EAAAuB,UAAM6R,sBAAqBlT,KAAAC,MACtBoN,EAAA,SAAepN,KAAKue,eACxBve,KAAKue,YAAcve,KAAKmT,SAASC,UAAU,oBAUnCotC,EAAAp/C,UAAAyI,eAAV,WACC,OAAO,IAAIw2C,IAuCZ5/C,OAAA+B,eAAWg+C,EAAAp/C,UAAA,kBAAX,WACC,OAAOpB,KAAKygD,6CAQHD,EAAAp/C,UAAA4lC,UAAV,SAAoBxB,GACnB3lC,EAAAuB,UAAM4lC,UAASjnC,KAAAC,KAACwlC,GAEhB,IAAIub,EAAKvb,EAAM5W,OAAOtgB,OAAO,SACzByyC,IACHA,EAAG33C,WAAW43C,eAAiB,IAGlCR,EA9LA,CAA4ChC,IAsM5C71C,EAAA,EAAShD,kBAA0C,uBAAI46C,GACvD53C,EAAA,EAAShD,kBAAkD,+BAAI06C,iCCnQ/DY,GAAA,SAAAphD,GAiCC,SAAAqhD,IAAA,IAAAphD,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,eAyBnB,OA5DgCgI,EAAA,EAAA+4C,EAAArhD,GAyC/BqhD,EAAA9/C,UAAAg4C,aAAA,WACCp5C,KAAKmhD,WAAanhD,KAAK+qB,YAAYq2B,GAAA,GACnCphD,KAAKmhD,WAAW15B,aAAc,EAG9BznB,KAAKwuC,OAAcxuC,KAAKmhD,YAQzBD,EAAA9/C,UAAAma,SAAA,SAASC,GACR3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACXxb,KAAKmhD,YACRnhD,KAAKmhD,WAAW5lC,SAASC,EAAO2lC,aAGnCD,EA5DA,CAAgC7O,GAAA,GAoEhC1pC,EAAA,EAAShD,kBAA8B,WAAIs7C,GC/F3C,IAAAI,GAAA,SAAAxhD,GAmBC,SAAAyhD,IAAA,IAAAxhD,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,qBACjBL,EAAKqB,eAGP,OAzBwCgH,EAAA,EAAAm5C,EAAAzhD,GAyBxCyhD,EAzBA,CAAwCjT,IAyExCkT,GAAA,SAAA1hD,GAuCC,SAAA2hD,IAAA,IAAA1hD,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,aACjBL,EAAKqB,eA6DP,OAxGgCgH,EAAA,EAAAq5C,EAAA3hD,GAmDrB2hD,EAAApgD,UAAAgxC,qBAAV,WACC,OAAO,IAAI6O,IAQFO,EAAApgD,UAAA0f,YAAV,WACC,IAAIna,EAAK,EACLF,EAAK,EACL+nC,EAASxuC,KAAK2uC,QAAQxiC,SAAS,GACnC,GAAGqiC,EAQF,OAPIxuC,KAAKqU,UAAYrU,KAAKuK,MACzB9D,EAAK+nC,EAAO2S,WAAWlqB,OAAOmR,QAAU,EAGxCzhC,EAAK6nC,EAAO2S,WAAWlqB,OAAOmR,QAAU,EAGlCnnB,EAAA,YACNvf,GAAIiF,EACJ7E,EAAG,EACHkF,MAAOhH,KAAKuK,MAAMlH,WAAasD,EAC/BO,OAAQlH,KAAKwK,MAAMnH,WAAaoD,KAY5B+6C,EAAApgD,UAAAquC,wBAAP,SAA+BvjC,GAG9B,GAFArM,EAAAuB,UAAMquC,wBAAuB1vC,KAAAC,KAACkM,GACjBA,EAASsiC,OACZ,CACT,IAAI2S,EAAaj1C,EAASsiC,OAAO2S,WAEjCA,EAAWrzC,KAAO5B,EAASsiC,OAAO1gC,KAE9B9N,KAAKqU,UAAYrU,KAAKwK,MACzB22C,EAAWpxB,YAAc,aAGzBoxB,EAAWpxB,YAAc,aAI7ByxB,EAxGA,CAAgC3S,IAgHhClmC,EAAA,EAAShD,kBAA8B,WAAI47C,GAC3C54C,EAAA,EAAShD,kBAAsC,mBAAI07C,GCjInD,IAAAI,GAAA,SAAA5hD,GAiCC,SAAA6hD,IAAA,IAAA5hD,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,iBA8GnB,OAjJkCgI,EAAA,EAAAu5C,EAAA7hD,GA4CvB6hD,EAAAtgD,UAAAg4C,aAAV,WACCp5C,KAAK2hD,aAAe3hD,KAAK+qB,YAAY/M,EAAA,GACrChe,KAAK2hD,aAAal6B,aAAc,EAEhCznB,KAAK8C,iBAAiB,UAAW,IAEjC9C,KAAKgH,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACrBT,KAAKkH,OAASzG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KAGtBT,KAAKwuC,OAAcxuC,KAAK2hD,cAQlBD,EAAAtgD,UAAAyG,KAAP,WACChI,EAAAuB,UAAMyG,KAAI9H,KAAAC,MACV,IAKIo7B,EALA3P,EAAIzrB,KAAKkxC,UACTvlB,EAAI3rB,KAAKmxC,WACTzvC,EAAI1B,KAAKgxC,MAAQhxC,KAAK6B,OACtBC,EAAI9B,KAAKixC,MAAQjxC,KAAK+B,OAOtBw6B,GAHKv8B,KAAKgH,MAGC,GACXw1B,EAAW,EAES,YAApBx8B,KAAK+vB,aACRwM,EAAWv8B,KAAK4hD,QAChBxmB,IAAY15B,EAAG,EAAGI,EAAG6pB,EAAI7pB,IAAOJ,EAAG+pB,EAAI,EAAG3pB,EAAGA,IAAOJ,EAAG+pB,EAAG3pB,EAAG6pB,EAAI7pB,MAGjE06B,EAAWx8B,KAAK4hD,QAChBxmB,IAAY15B,EAAGA,EAAGI,EAAG,IAAOJ,EAAGA,EAAI+pB,EAAG3pB,EAAG6pB,EAAI,IAAOjqB,EAAGA,EAAGI,EAAG6pB,KAG9D,IAAI9nB,EAAOod,EAAA,OAAama,EAAO,IAAM,IAAII,EAAA,EAAmBe,EAAUC,GAAUf,OAAOL,GACvFp7B,KAAKwuC,OAAO3qC,KAAOA,GAQb69C,EAAAtgD,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACXxb,KAAK2hD,cACR3hD,KAAK2hD,aAAapmC,SAASC,EAAOmmC,eAiBpClhD,OAAA+B,eAAWk/C,EAAAtgD,UAAA,eAOX,WACC,OAAOpB,KAAK0C,iBAAiB,gBAR9B,SAAmBC,GAClB3C,KAAK8C,iBAAiB,UAAWH,GAAO,oCAkBzClC,OAAA+B,eAAWk/C,EAAAtgD,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK8C,iBAAiB,cAAeH,GAAO,oCAU9C++C,EAjJA,CAAkCrP,GAAA,GAyJlC1pC,EAAA,EAAShD,kBAAgC,aAAI87C,GChN7C,IAAAI,GAAA,SAAAhiD,GAmBC,SAAAiiD,IAAA,IAAAhiD,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,6BACjBL,EAAKqB,eAGP,OAzBgDgH,EAAA,EAAA25C,EAAAjiD,GAyBhDiiD,EAzBA,CAAgDzT,IAwEhD0T,GAAA,SAAAliD,GA+CC,SAAAmiD,IAAA,IAAAliD,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,qBACjBL,EAAKqB,eAsCP,OAzFwCgH,EAAA,EAAA65C,EAAAniD,GA4D7BmiD,EAAA5gD,UAAAgxC,qBAAV,WACC,OAAO,IAAIqP,IAULO,EAAA5gD,UAAAquC,wBAAP,SAA+BvjC,GAE9B,IAAIsiC,EAAStiC,EAASsiC,OAClBA,IACgBtiC,EAASsiC,OAAOmT,aAEtB7zC,KAAO5B,EAASsiC,OAAO1gC,KAEhC9N,KAAKqU,UAAYrU,KAAKwK,MACzBgkC,EAAOze,YAAc,aAGrBye,EAAOze,YAAc,YAIvBlwB,EAAAuB,UAAMquC,wBAAuB1vC,KAAAC,KAACkM,IAEhC81C,EAzFA,CAAwCnT,IAiGxClmC,EAAA,EAAShD,kBAAsC,mBAAIo8C,GACnDp5C,EAAA,EAAShD,kBAA8C,2BAAIk8C,qFC3J3DI,GAAA,SAAApiD,GAYC,SAAAqiD,IAAA,IAAApiD,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,uBACjBL,EAAKqB,eAEP,OAjB0CgH,EAAA,EAAA+5C,EAAAriD,GAiB1CqiD,EAjBA,CAA0ClwC,EAAA,GAwF1CmwC,GAAA,SAAAtiD,GA+DC,SAAAuiD,IAAA,IAAAtiD,EAGCD,EAAAE,KAAAC,OAAOA,YAxBEF,EAAAuiD,UAAsB,SAyB/BviD,EAAKK,UAAY,eAEjBL,EAAKgD,iBAAiB,gBAAiB,KAGvChD,EAAKqB,eAmLP,OA3PyEgH,EAAA,EAAAi6C,EAAAviD,GAkFjEuiD,EAAAhhD,UAAAmX,YAAP,SAAmB5V,EAAemU,GACjC,OAAO9W,KAAKsiD,kBAAkBxrC,OAAOnU,EAAOmU,GAAU9W,KAAKuiD,qBAmBrDH,EAAAhhD,UAAA2W,aAAP,SAAoBtM,EAAasD,EAAaN,EAAoB2J,EAAmBoqC,GAEpF,IAAIC,MAEAjwC,EAAWxS,KAAK0iD,SAIpB,GAFA1iD,KAAK8C,iBAAiB,eAAgB,GAEtB,eAAZ0P,GAAyC,UAAZA,GAAoC,UAAZA,GAAoC,QAAZA,EAAoB,CAEhG4F,GAAa,IAChBA,EAAY,GAGbA,EAAYnW,KAAKqK,MAAM8L,GAEvB,IAAIuqC,EAAqBl3C,EACrBm3C,EAAqB7zC,EAGN,IAAfN,IACHA,EAAaxM,KAAKyX,IAAI3K,IAGvB,IAAIiJ,EAEA6qC,GAAY,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GACnCC,EAAc,EAEF,QAAZtwC,IACHqwC,GAAY,GAAI,GAAI,EAAG,EAAG,EAAG,QAG9B,IAAoB,IAAAE,EAAA56C,EAAA,EAAA06C,GAAQG,EAAAD,EAAA9+B,QAAA++B,EAAA9+B,KAAA8+B,EAAAD,EAAA9+B,OAAA,CAAvB,IAAIg/B,EAAOD,EAAArgD,MACf,GAAI8L,EAAaw0C,EAAU7qC,EAAW,CACrC0qC,EAAcG,EACd,yGAGF,IAAIxwC,EAAQxQ,KAAKoJ,MAAO0D,EAAMtD,GAAOq3C,EAAe1qC,GAEhD8qC,EAAmBjhD,KAAKkhD,IAAIlhD,KAAKyX,IAAIjH,IAAUxQ,KAAKmhD,OACpDC,EAAQphD,KAAKqhD,IAAI,GAAIrhD,KAAKmJ,MAAM83C,IAAa,GAC7CK,EAAe9wC,EAAQ4wC,EAM3BrrC,EAAO8qC,GAFPrwC,EADctH,EAAA,QAAc03C,EAAUU,GACpBF,GAIPrjD,KAAKsiD,kBAAkBkB,aAAaxrC,EAAMhY,KAAK0iD,UAE1Dj3C,EAAMxJ,KAAKmJ,MAAMK,EAAMuM,GAAQA,EAC/BjJ,EAAM9M,KAAKoJ,KAAK0D,EAAMiJ,GAAQA,EAE1BwqC,KACH/2C,GAAOuM,GACG,GAAK2qC,GAAc,IAC5Bl3C,EAAM,IAEPsD,GAAOiJ,GAEG,GAAK4qC,GAAc,IAC5B7zC,EAAM,IAGR0zC,GAAeh3C,IAAKA,EAAKsD,IAAKA,EAAKiJ,KAAMA,QAGzCyqC,EAAa5iD,EAAAuB,UAAM2W,aAAYhY,KAAAC,KAACyL,EAAKsD,EAAKN,EAAY2J,EAAWoqC,GAMlE,OAFAxiD,KAAKuiD,mBAAqBviD,KAAKsiD,kBAAkBmB,UAAUhB,EAAWzqC,KAAMyqC,EAAW1zC,IAAK/O,KAAK0iD,UAE1FD,GAWRhiD,OAAA+B,eAAW4/C,EAAAhhD,UAAA,6BAOX,WACC,OAAOpB,KAAK0jD,4BARb,SAAiC/gD,GAChC3C,KAAK0jD,uBAAyB/gD,mCAqBxBy/C,EAAAhhD,UAAAwP,eAAP,SAAsB3N,GACrB,IAAIN,EAAgBwI,EAAA,MAAYnL,KAAK4Y,gBAAgB3V,GAAWjD,KAAK2jD,oBACrE,OAAO3jD,KAAKwB,QAAQ2H,MAAM,iBAAkBnJ,KAAKuY,YAAY5V,EAAO3C,KAAK4jD,yBAc1EnjD,OAAA+B,eAAW4/C,EAAAhhD,UAAA,gBAWX,WACC,OAAOpB,KAAKqiD,eAZb,SAAoB7vC,GACfxS,KAAKqiD,WAAa7vC,IACrBxS,KAAKqiD,UAAY7vC,EACjBxS,KAAKsiD,kBAAkBI,SAAWlwC,EAClCxS,KAAK6C,+CAgBAu/C,EAAAhhD,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACfxb,KAAK0iD,SAAWlnC,EAAOknC,UAEzBN,EA3PA,CAAyEpwC,EAAA,GAmQzErJ,EAAA,EAAShD,kBAAgC,aAAIw8C,GAC7Cx5C,EAAA,EAAShD,kBAAwC,qBAAIs8C,8CChVrD4B,GAAA,SAAAhkD,GAiCC,SAAAikD,IAAA,IAAAhkD,EACCD,EAAAE,KAAAC,OAAOA,KAEPF,EAAKK,UAAY,eAEjB,IAAI4jD,EAASjkD,EAAKirB,YAAYiX,GAAA,UAC9B+hB,EAAOt8B,aAAc,EACrBs8B,EAAOvjD,OAAS,EAChBujD,EAAO3jD,YAAa,EACpBN,EAAKikD,OAASA,IAahB,OAvDkC57C,EAAA,EAAA27C,EAAAjkD,GAmD1BikD,EAAA1iD,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACfxb,KAAK+jD,OAAOxoC,SAASC,EAAOuoC,SAE9BD,EAvDA,CAAkCpZ,GAAA,GA+DlC/hC,EAAA,EAAShD,kBAAgC,aAAIk+C,GC9D7C,IAAAG,GAAA,SAAAnkD,GA4BC,SAAAokD,IAAA,IAAAnkD,EACCD,EAAAE,KAAAC,OAAOA,YAEPF,EAAKK,UAAY,cACjBL,EAAKokD,UAAYpkD,EAAKirB,YAAY/M,EAAA,GAClCle,EAAKokD,UAAUz8B,aAAc,EAC7B3nB,EAAKkH,MAAQ,GACblH,EAAKoH,OAAS,GACdpH,EAAKoB,cAAgB,EACrBpB,EAAKqkD,WAAY,IAsBnB,OA3DiCh8C,EAAA,EAAA87C,EAAApkD,GAyChCokD,EAAA7iD,UAAAwqB,iBAAA,WACC/rB,EAAAuB,UAAMwqB,iBAAgB7rB,KAAAC,MACtB,IAAIyrB,EAAIzrB,KAAK8G,WAAa,EACtB6kB,EAAI3rB,KAAKiH,YAAc,EAE3BjH,KAAKkkD,UAAUrgD,KAAOod,EAAA,QAAcvf,GAAG+pB,EAAG3pB,GAAG6pB,IAAM1K,EAAA,QAAcvf,EAAE+pB,EAAG3pB,GAAG6pB,IAAM1K,EAAA,QAAcvf,EAAE,EAAGI,GAAG6pB,IAAM1K,EAAA,QAAcvf,EAAE,EAAGI,EAAE6pB,IAAM1K,EAAA,QAAcvf,GAAG+pB,EAAG3pB,EAAE6pB,IAAM1K,EAAA,QAAcvf,EAAE+pB,EAAG3pB,EAAE6pB,KASjLs4B,EAAA7iD,UAAAma,SAAP,SAAgBC,GACf3b,EAAAuB,UAAMma,SAAQxb,KAAAC,KAACwb,GACfxb,KAAKkkD,UAAU3oC,SAASC,EAAO0oC,YAEjCD,EA3DA,CAAiCvZ,GAAA,GAmEjC/hC,EAAA,EAAShD,kBAA+B,YAAIq+C,qFC7F5CI,GAAA,SAAAvkD,GAYC,SAAAwkD,IAAA,IAAAvkD,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,wBACjBL,EAAKqB,eAmBP,OAlC2CgH,EAAA,EAAAk8C,EAAAxkD,GAuB1CY,OAAA+B,eAAW6hD,EAAAjjD,UAAA,YAOX,WACC,OAAOpB,KAAKoJ,WAAiB,UAR9B,SAAgBzG,GACf3C,KAAKqJ,YAAY,OAAQ1G,oCAU3B0hD,EAlCA,CAA2CC,GAAA,GA8F3CC,GAAA,SAAA1kD,GA6EC,SAAA2kD,IAAA,IAAA1kD,EAGCD,EAAAE,KAAAC,OAAOA,KACPF,EAAKK,UAAY,gBAEjB,IAAIyqB,EAAkB,IAAIC,EAAA,EAEtB45B,EAAW,IAAIC,GAAA,EACnBD,EAASryB,OAAS,SAClBqyB,EAAS1U,WAAa,EACtB0U,EAASzU,cAAgB,EAEzBlwC,EAAKkwC,cAAgB,EAErBlwC,EAAKouC,MAAQ,IAAI97B,EAAA,EAAuBqyC,GACxC3kD,EAAKiK,WAAWC,KAAK,IAAIoI,EAAA,EAAatS,EAAKouC,QAC3CpuC,EAAKiK,WAAWC,KAAKy6C,GAErB3kD,EAAK6kD,eAAiB,IAAIx6C,EAAA,aAA6BrK,EAAKouC,MAAO,WAAM,OAAApuC,EAAKouC,MAAMr4B,WACpF/V,EAAK6kD,eAAetoB,gBAAiB,EAErC,IAAIuoB,EAAW,IAAIC,GAAA,EACnBD,EAASE,UAAY,QACrBF,EAAS59C,MAAQ,EACjB49C,EAAS19C,OAAS,GAClB09C,EAAS92C,KAAO8c,EAAgBK,OAAO,yBACvC25B,EAAS55B,YAAc,GACvB45B,EAASxyB,OAAS,SAClBwyB,EAASG,WAAa,GACtBH,EAASryB,YAAc,GAEvBzyB,EAAKklD,WAAa,IAAI5yC,EAAA,EAAuBwyC,GAC7C9kD,EAAKiK,WAAWC,KAAK,IAAIoI,EAAA,EAAatS,EAAKklD,aAC3CllD,EAAKiK,WAAWC,KAAK46C,GAErB,IAAIK,EAAa,IAAIP,GAAA,SACrB5kD,EAAKmlD,WAAaA,EAClBA,EAAW1pC,SAASkpC,GACpBQ,EAAW7yB,OAAS,SACpB6yB,EAAWC,WAAa,OAExBplD,EAAKkH,MAAQvG,OAAA+mB,EAAA,EAAA/mB,CAAQ,KACrBX,EAAKI,OAAS,OACdJ,EAAKkf,WAAWI,KAAO,OAGvBtf,EAAKqB,eA2CP,OAvKmCgH,EAAA,EAAAq8C,EAAA3kD,GAoI3B2kD,EAAApjD,UAAA2kB,qBAAP,WACC/lB,KAAKwyC,iBACLxyC,KAAK2kD,eAAez3B,QACpBrtB,EAAAuB,UAAM2kB,qBAAoBhmB,KAAAC,OAUpBwkD,EAAApjD,UAAAqL,oBAAP,SAA2BP,GAG1B,IAAIu4C,EACJ,GAHA5kD,EAAAuB,UAAMqL,oBAAmB1M,KAAAC,KAACkM,GAGtBA,EAASpB,MAAQ9K,KAAKkL,UAAU3G,OAAS,EAAG,EAC/CkgD,EAAWzkD,KAAK2kD,eAAeQ,WACtBl4B,OAASjtB,KAClB,IAAIolD,EAAYplD,KAAKglD,WAAWnvC,SAChCuvC,EAAUn4B,OAASjtB,KACnBolD,EAAUhzB,OAAS,cAGnBqyB,EAAWzkD,KAAKilD,YACP7mC,OAAO7C,SAASvb,KAAKkuC,MAAMvtC,SAASyd,QAC7CqmC,EAAS5+B,KAAK,GACd4+B,EAASv/B,OACTu/B,EAASx3B,OAASjtB,KAEnBykD,EAASv4C,SAAWA,EACpBu4C,EAAS17C,KAAOmD,EAASkT,KACzBqlC,EAASpiD,YAEXmiD,EAvKA,CAAmCa,GAAA,GA+KnC18C,EAAA,EAAShD,kBAAiC,cAAI4+C,GAC9C57C,EAAA,EAAShD,kBAAyC,sBAAIy+C,GC/StDkB,OAAAC,UAAmBC,qCCDnB1mD,EAAAC,EAAAC,EAAA,sBAAAymD,IAAA,IAAAvmD,EAAAJ,EAAA,QAAA4mD,EAAA5mD,EAAA,QAAAgH,EAAAhH,EAAA,QAwEA2mD,EAAA,SAAA5lD,GA0BC,SAAA4lD,IAAA,IAAA3lD,EACCD,EAAAE,KAAAC,OAAOA,YACPF,EAAKK,UAAY,eACjBL,EAAKiB,cAAe,EACpBjB,EAAKqB,eAmCP,OAjEkCjC,EAAA,EAAAumD,EAAA5lD,GAsCjCY,OAAA+B,eAAWijD,EAAArkD,UAAA,mBAOX,WACC,OAAOpB,KAAK0C,iBAAiB,oBAR9B,SAAuBC,GACtB3C,KAAK4C,mBAAmB,cAAeD,GAAO,GAAM,EAAO,IAAI,oCAehElC,OAAA+B,eAAWijD,EAAArkD,UAAA,cAOX,WACC,OAAOpB,KAAK0C,iBAAiB,eAR9B,SAAkBC,GACjB3C,KAAK4C,mBAAmB,SAAUD,GAAO,GAAM,EAAO,IAAI,oCAU5D8iD,EAjEA,CAAkCC,EAAA,GA0ElC5/C,EAAA,EAASH,kBAAgC,aAAI8/C","file":"charts.js","sourcesContent":["/**\r\n * Module, defining Axis Renderer for circular axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRenderer, IAxisRendererProperties, IAxisRendererAdapters, IAxisRendererEvents } from \"./AxisRenderer\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisFillCircular } from \"./AxisFillCircular\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { GridCircular } from \"./GridCircular\";\r\nimport { AxisLabelCircular } from \"./AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularProperties extends IAxisRendererProperties {\r\n\r\n\t/**\r\n\t * Start angle of the circular axis in degrees (0-360).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the circular axis in degrees (0-360).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * Outer radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the circular axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Specifies if axis should use it's own start/end angles or the ones set on chart.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tuseChartAngles?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererCircular]].\r\n */\r\nexport interface IAxisRendererCircularEvents extends IAxisRendererEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererCircularAdapters extends IAxisRendererAdapters, IAxisRendererCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for circular axis.\r\n */\r\nexport class AxisRendererCircular extends AxisRenderer {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisRendererProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererCircularEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererCircularEvents;\r\n\r\n\t/**\r\n\t * Defines type of the grid elements.\r\n\t *\r\n\t * @type {GridCircular}\r\n\t */\r\n\tpublic _gridType: GridCircular;\r\n\r\n\t/**\r\n\t * Defines type for the fill elements.\r\n\t *\r\n\t * @type {AxisFillCircular}\r\n\t */\r\n\tpublic _fillType: AxisFillCircular;\r\n\r\n\t/**\r\n\t * Defines type for the label elements.\r\n\t *\r\n\t * @type {AxisLabelCircular}\r\n\t */\r\n\tpublic _labelType: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\t// axis.layout = \"none\"; // does not trigger redraw when size changes\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.className = \"AxisRendererCircular\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.useChartAngles = true;\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.grid.template.location = 0;\r\n\r\n\t\tthis.labels.template.location = 0;\r\n\t\tthis.labels.template.radius = 15;\r\n\r\n\t\tthis.ticks.template.location = 0;\r\n\t\tthis.ticks.template.pixelPerfect = false;\r\n\t\tthis.tooltipLocation = 0;\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t* @ignore\r\n\t*/\r\n\tpublic setAxis(axis: Axis) {\r\n\t\tsuper.setAxis(axis);\r\n\t\taxis.isMeasured = false;\r\n\r\n\t\t// modify x and y so that tooltip would always be on circle\r\n\t\tlet tooltip = axis.tooltip;\r\n\r\n\t\ttooltip.adapter.add(\"dx\", (x, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.cos(Math.atan2(point.y, point.x)) - point.x;\r\n\t\t});\r\n\r\n\t\ttooltip.adapter.add(\"dy\", (y, target) => {\r\n\t\t\tlet point: IPoint = $utils.svgPointToSprite({ x: target.pixelX, y: target.pixelY }, this);\r\n\t\t\treturn this.pixelRadius * Math.sin(Math.atan2(point.y, point.x)) - point.y;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return {number} Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn 2 * Math.PI * this.pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return {number} Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"innerRadius\", value, false, false, 10, false)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if axis should use its own `startAngle` and `endAngle` or\r\n\t * inherit them from relative properties from chart.\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value Use chart's angles\r\n\t */\r\n\tpublic set useChartAngles(value: boolean) {\r\n\t\tthis.setPropertyValue(\"useChartAngles\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Use chart angles\r\n\t */\r\n\tpublic get useChartAngles(): boolean {\r\n\t\treturn this.getPropertyValue(\"useChartAngles\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return {number} Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {IPoint} Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet coordinate: number = this.positionToCoordinate(position);\r\n\t\tlet angle: number = this.startAngle + (this.endAngle - this.startAngle) * coordinate / this.axisLength;\r\n\t\treturn { x: this.pixelRadius * $math.cos(angle), y: this.pixelRadius * $math.sin(angle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position (0-1) on axis to angle in degrees (0-360).\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {number} Angle (0-360)\r\n\t */\r\n\tpublic positionToAngle(position: number): number {\r\n\t\tlet axis: Axis = this.axis;\r\n\r\n\t\tlet arc: number = (this.endAngle - this.startAngle) / (axis.end - axis.start);\r\n\r\n\t\tlet angle: number;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tangle = this.startAngle + (axis.end - position) * arc;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tangle = this.startAngle + (position - axis.start) * arc;\r\n\t\t}\r\n\r\n\t\treturn $math.round(angle, 3);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\t\tthis.line.path = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius, radius);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Grid} grid Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: GridCircular, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet radius: number = $utils.relativeRadiusToValue($type.hasValue(grid.radius) ? grid.radius : percent(100), this.pixelRadius);\r\n\r\n\t\t\tlet gridInnerRadius = $utils.relativeRadiusToValue(grid.innerRadius, this.pixelRadius);\r\n\t\t\tgrid.zIndex = 0;\r\n\r\n\t\t\tlet innerRadius: number = $utils.relativeRadiusToValue($type.isNumber(gridInnerRadius) ? gridInnerRadius : this.innerRadius, this.pixelRadius, true);\r\n\t\t\tgrid.path = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisTick} tick Tick element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number, endPosition: number) {\r\n\r\n\t\tposition = position + (endPosition - position) * tick.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (tick.element) {\r\n\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\t\t\tlet tickLength: number = tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength = -tickLength;\r\n\t\t\t}\r\n\t\t\ttick.zIndex = 1;\r\n\t\t\ttick.path = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) }) + $path.lineTo({ x: (radius + tickLength) * $math.cos(angle), y: (radius + tickLength) * $math.sin(angle) });\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisLabel} label Label element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tlabel.fixPoint(point, this.pixelRadius);\r\n\t\tlabel.zIndex = 2;\r\n\r\n\t\tthis.positionItem(label, point);\r\n\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint} point Point coordinates\r\n\t * @return {boolean} Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param {number} value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"startAngle\", value)) {\r\n\t\t\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 {number} Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees (0-360).\r\n\t *\r\n\t * @param {number} value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\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 {number} End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {number} startPosition Starting position\r\n\t * @param {number} endPosition End position\r\n\t * @return {string} SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number, radius?: number | Percent, innerRadius?: number | Percent, cornerRadius?: number): string {\r\n\t\tlet path: string = \"\";\r\n\t\tif ($type.isNumber(startPosition) && $type.isNumber(endPosition)) {\r\n\r\n\t\t\tif (!$type.hasValue(radius)) {\r\n\t\t\t\tradius = this.radius;\r\n\t\t\t}\r\n\r\n\t\t\tstartPosition = $math.max(startPosition, this.axis.start);\r\n\t\t\tendPosition = $math.min(endPosition, this.axis.end);\r\n\r\n\t\t\tif (endPosition < startPosition) {\r\n\t\t\t\tendPosition = startPosition;\r\n\t\t\t}\r\n\r\n\t\t\tlet pixelRadius: number = $utils.relativeRadiusToValue(radius, this.pixelRadius);\r\n\t\t\tlet pixelInnerRadius: number = $utils.relativeRadiusToValue(innerRadius, this.pixelRadius, true);\r\n\r\n\t\t\tlet startAngle: number = this.positionToAngle(startPosition);\r\n\t\t\tlet endAngle: number = this.positionToAngle(endPosition);\r\n\r\n\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\tpath = $path.arc(startAngle, arc, pixelRadius, pixelInnerRadius, pixelRadius, cornerRadius);\r\n\t\t}\r\n\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new grid element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return {GridCircular} Grid element\r\n\t */\r\n\tpublic createGrid(): this[\"_gridType\"] {\r\n\t\treturn new GridCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new fill element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return {AxisFillCircular} Fill element\r\n\t */\r\n\tpublic createFill(axis: Axis): this[\"_fillType\"] {\r\n\t\treturn new AxisFillCircular(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new label element, suitable for this Axis Renderer type.\r\n\t *\r\n\t * @return {AxisLabelCircular} Label element\r\n\t */\r\n\tpublic createLabel(): this[\"_labelType\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param {IPoint} point Point\r\n\t * @return {number} Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\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 * Axis Label module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisLabel, IAxisLabelProperties, IAxisLabelAdapters, IAxisLabelEvents } from \"./AxisLabel\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisLabelCircular]].\r\n */\r\nexport interface IAxisLabelCircularProperties extends IAxisLabelProperties {\r\n\r\n\t/**\r\n\t * Rotation angle of the label in relation to circle line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\trelativeRotation?: number;\r\n\r\n\t/**\r\n\t * Distance of the label from circle line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tradius?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisLabelCircular]].\r\n */\r\nexport interface IAxisLabelCircularEvents extends IAxisLabelEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisLabelCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisLabelCircularAdapters extends IAxisLabelAdapters, IAxisLabelCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Use to create labels on circular axis.\r\n *\r\n * @see {@link IAxisLabelCircularEvents} for a list of available events\r\n * @see {@link IAxisLabelCircularAdapters} for a list of available Adapters\r\n */\r\nexport class AxisLabelCircular extends AxisLabel {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisLabelCircularProperties}\r\n\t */\r\n\tpublic _properties!: IAxisLabelCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisLabelCircularAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisLabelCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisLabelCircularEvents}\r\n\t */\r\n\tpublic _events!: IAxisLabelCircularEvents;\r\n\r\n\t/**\r\n\t * Related data item.\r\n\t *\r\n\t * @type {any}\r\n\t */\r\n\tpublic _dataItem: any;\r\n\r\n\t/**\r\n\t *\r\n\t * @type {number}\r\n\t * @ignore\r\n\t */\r\n\tpublic fdx: number = 0;\r\n\r\n\t/**\r\n\t *\r\n\t * @type {number}\r\n\t * @ignore\r\n\t */\r\n\tpublic fdy: number = 0;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisLabelCircular\";\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\t\tthis.location = 0.5;\r\n\t\tthis.radius = 0;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Relative rotation of the label.\r\n\t *\r\n\t * It is an angle to circle. In case 90, labels will be positioned like rays\r\n\t * of light, if 0 - positione along the circle.\r\n\t *\r\n\t * @param {number} value Rotation angle\r\n\t */\r\n\tpublic set relativeRotation(value: number) {\r\n\t\tthis.setPropertyValue(\"relativeRotation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Rotation angle\r\n\t */\r\n\tpublic get relativeRotation(): number {\r\n\t\treturn this.getPropertyValue(\"relativeRotation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Distance from axis circle to label in pixels or percent.\r\n\t *\r\n\t * @param {number} value Distance (px or percent)\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Distance (px)\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * returns label radius in pixels\r\n\t */\r\n\tpublic pixelRadius(axisRadius: number): number {\r\n\t\tlet sign: number = 1;\r\n\t\tif (this.inside) {\r\n\t\t\tsign = -1;\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeToValue(this.radius, axisRadius) * sign;\r\n\t}\r\n\r\n\t/**\r\n\t * [fixPoint description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {IPoint} point Label affixation point\r\n\t * @param {number} axisRadius Distance from point (px)\r\n\t * @return {IPoint} [description]\r\n\t */\r\n\tpublic fixPoint(point: IPoint, axisRadius: number, axisRadiusY?:number): IPoint {\r\n\t\tlet angle: number = $math.DEGREES * Math.atan2(point.y, point.x);\r\n\r\n\t\tif(!$type.isNumber(axisRadiusY)){\r\n\t\t\taxisRadiusY = axisRadius;\r\n\t\t}\r\n\r\n\t\tif (this.invalid) {\r\n\t\t\tthis.validate(); //@todo\" check if we need this\r\n\t\t}\r\n\r\n\t\tlet relativeRotation = this.relativeRotation;\r\n\t\t// we don't use valign for labels because then they would jump while animating. instead we modify dy depending on a y position\r\n\t\t// this math makes dy to be 1 at the top of the circle, 0.5 at the middle and 1 at the bottom\r\n\t\t// @todo with this math doesn't work well with inside = true\r\n\t\tthis.dy = -this._measuredHeight * (1 - (point.y + axisRadius) / (2 * axisRadius));\r\n\t\t// simmilar with dx\r\n\t\tthis.dx = -this._measuredWidth * (1 - (point.x + axisRadius) / (2 * axisRadius));\r\n\r\n\t\tlet labelRadius = this.pixelRadius(axisRadius);\r\n\r\n\t\tif ($type.isNumber(relativeRotation)) {\r\n\r\n\t\t\tlet pixelWidth = this.bbox.width;\r\n\t\t\tlet pixelHeight = this.bbox.height;\r\n\r\n\t\t\tif (angle > 90 || angle < -90) {\r\n\t\t\t\tif (relativeRotation == -90) {\r\n\t\t\t\t\trelativeRotation = 90;\r\n\t\t\t\t\tpixelWidth = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (relativeRotation == -90) {\r\n\t\t\t\t\tpixelHeight = - pixelHeight;\r\n\t\t\t\t}\r\n\t\t\t\tif (relativeRotation == 90) {\r\n\t\t\t\t\trelativeRotation = -90;\r\n\t\t\t\t\tpixelWidth = 0;\r\n\t\t\t\t\tpixelHeight = - pixelHeight;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.rotation = relativeRotation + angle + 90;\r\n\r\n\t\t\tlet dH = $math.sin(relativeRotation) / 2;\r\n\t\t\tlet dW = $math.cos(relativeRotation) / 2;\r\n\r\n\t\t\tlet rotation = this.rotation;\r\n\r\n\t\t\tthis.dx = pixelHeight * dH * $math.sin(rotation) - pixelWidth * dW * $math.cos(rotation);\r\n\t\t\tthis.dy = -pixelHeight * dH * $math.cos(rotation) - pixelWidth * dW * $math.sin(rotation);\r\n\r\n\t\t\tlet pixelPaddingBottom = this.pixelPaddingBottom;\r\n\t\t\tlet pixelPaddingTop = this.pixelPaddingTop;\r\n\t\t\tlet pixelPaddingLeft = this.pixelPaddingLeft;\r\n\t\t\tlet pixelPaddingRight = this.pixelPaddingRight;\r\n\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\tlabelRadius += (pixelHeight + pixelPaddingBottom + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelWidth + pixelPaddingLeft + pixelPaddingRight) * $math.sin(relativeRotation);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (angle > 90 || angle < -90) {\r\n\t\t\t\t\tlabelRadius -= (pixelPaddingBottom + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelPaddingLeft + pixelPaddingRight) * $math.sin(relativeRotation);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlabelRadius += (pixelPaddingBottom + this.bbox.height + pixelPaddingTop) * $math.cos(relativeRotation) + (pixelPaddingLeft + pixelPaddingRight + this.bbox.width) * $math.sin(relativeRotation);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.fdx = this.dx;\r\n\t\tthis.fdy = this.dy;\r\n\r\n\t\tpoint.x += $math.cos(angle) * labelRadius;\r\n\t\tpoint.y += $math.sin(angle) * labelRadius * axisRadiusY / axisRadius;\r\n\r\n\t\treturn point;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisLabelCircular\"] = AxisLabelCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisLabelCircular.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisFill, IAxisFillProperties, IAxisFillAdapters, IAxisFillEvents } from \"./AxisFill\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Axis } from \"./Axis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { AxisRendererCircular } from \"./AxisRendererCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularProperties extends IAxisFillProperties {\r\n\r\n\t/**\r\n\t * Inner radius. Relative ir absolute.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius. Relative or absolute.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tcornerRadius?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisFillCircular]].\r\n */\r\nexport interface IAxisFillCircularEvents extends IAxisFillEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisFillCircular]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisFillCircularAdapters extends IAxisFillAdapters, IAxisFillCircularProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Provides fill element functionality for circular Axes.\r\n *\r\n * @see {@link IAxisFillCircularEvents} for a list of available events\r\n * @see {@link IAxisFillCircularAdapters} for a list of available Adapters\r\n * @todo Needs description\r\n */\r\nexport class AxisFillCircular extends AxisFill {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisFillCircularProperties}\r\n\t */\r\n\tpublic _properties!: IAxisFillCircularProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisFillCircularAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisFillCircularAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisFillCircularEvents}\r\n\t */\r\n\tpublic _events!: IAxisFillCircularEvents;\r\n\r\n\t/**\r\n\t * An SVG path, used to draw fill shape.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @type {string}\r\n\t */\r\n\tpublic fillPath: string;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tconstructor(axis: Axis) {\r\n\t\tsuper(axis);\r\n\r\n\t\tthis.className = \"AxisFillCircular\";\r\n\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = this.axis.renderer;\r\n\t\t\tthis.fillPath = renderer.getPositionRangePath(this.startPosition, this.endPosition, this.radius, $type.hasValue(this.innerRadius) ? this.innerRadius : renderer.innerRadius, this.cornerRadius);\r\n\t\t\tthis.path = this.fillPath;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the fill. Relative ([[Percent]]) or absolute (pixels).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Corner radius for the fill. In pixels.\r\n\t *\r\n\t * @param {number} value Corner radius (px)\r\n\t */\r\n\tpublic set cornerRadius(value: number) {\r\n\t\tthis.setPropertyValue(\"cornerRadius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Corner radius (px)\r\n\t */\r\n\tpublic get cornerRadius(): number {\r\n\t\treturn this.getPropertyValue(\"cornerRadius\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisFillCircular\"] = AxisFillCircular;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisFillCircular.ts","/**\r\n * A module which defines functionality related to Category Axis Break.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { AxisBreak, IAxisBreakProperties, IAxisBreakAdapters, IAxisBreakEvents } from \"./AxisBreak\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CategoryAxisBreak]].\r\n */\r\nexport interface ICategoryAxisBreakProperties extends IAxisBreakProperties {\r\n\r\n\t/**\r\n\t * Category break starts on.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tstartCategory?: string;\r\n\r\n\t/**\r\n\t * Category break ends on.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tendCategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CategoryAxisBreak]].\r\n */\r\nexport interface ICategoryAxisBreakEvents extends IAxisBreakEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CategoryAxisBreak]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisBreakAdapters extends IAxisBreakAdapters, ICategoryAxisBreakProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Base class to define \"breaks\" in axes\r\n * @see {@link ICategoryAxisBreakEvents} for a list of available events\r\n * @see {@link ICategoryAxisBreakAdapters} for a list of available Adapters\r\n */\r\nexport class CategoryAxisBreak extends AxisBreak {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICategoryAxisBreakProperties}\r\n\t */\r\n\tpublic _properties!: ICategoryAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICategoryAxisBreakAdapters}\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICategoryAxisBreakEvents}\r\n\t */\r\n\tpublic _events!: ICategoryAxisBreakEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Axis this break is used for.\r\n\t *\r\n\t * @type {Axis}\r\n\t */\r\n\tpublic _axisType: CategoryAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisBreak\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Pixel position of the break's start.\r\n\t *\r\n\t * @return {number} Position (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get startPosition(): number {\r\n\t\tif (this.axis) {\r\n\t\t\treturn this.axis.indexToPosition(this.adjustedStartValue);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Pixel position of the break's end.\r\n\t *\r\n\t * @return {number} Position (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get endPosition(): number {\r\n\t\tif (this.axis) {\r\n\t\t\treturn this.axis.indexToPosition(this.adjustedEndValue);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A category break starts on.\r\n\t *\r\n\t * @param {string} value Start category\r\n\t */\r\n\tpublic set startCategory(value: string) {\r\n\t\tif (this.setPropertyValue(\"startCategory\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Start category\r\n\t */\r\n\tpublic get startCategory(): string {\r\n\t\treturn this.getPropertyValue(\"startCategory\");\r\n\t}\r\n\r\n\t/**\r\n\t * A category break ends on.\r\n\t *\r\n\t * @param {string} value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tif (this.setPropertyValue(\"endCategory\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.getPropertyValue(\"endCategory\");\r\n\t}\r\n\r\n\t/**\r\n\t * An index of start category.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set startValue(value: number) {\r\n\t\tif (this.setPropertyValue(\"startValue\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get startValue(): number {\r\n\t\tlet category: string = this.getPropertyValue(\"startCategory\");\r\n\t\tif (category) {\r\n\t\t\treturn this.axis.categoryToIndex(category);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.getPropertyValue(\"startValue\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * An index of end category or a end value.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set endValue(value: number) {\r\n\t\tif (this.setPropertyValue(\"endValue\", value)) {\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidateDataItems();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get endValue(): number {\r\n\t\tlet category: string = this.getPropertyValue(\"endCategory\");\r\n\t\tif (category) {\r\n\t\t\treturn this.axis.categoryToIndex(category);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.getPropertyValue(\"endValue\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxisBreak\"] = CategoryAxisBreak;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxisBreak.ts","/**\r\n * Category axis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Axis, AxisItemLocation, AxisDataItem, IAxisProperties, IAxisDataFields, IAxisAdapters, IAxisEvents, IAxisDataItemAdapters } from \"./Axis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { SerialChart } from \"../types/SerialChart\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { CategoryAxisBreak } from \"./CategoryAxisBreak\";\r\nimport { IDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport { Adapter } from \"../../core/utils/Adapter\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CategoryAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CategoryAxisDataItem extends AxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {CategoryAxis}\r\n\t */\r\n\tpublic _component!: CategoryAxis;\r\n\r\n\t/**\r\n\t * Holds Adapter.\r\n\t *\r\n\t * @type {Adapter}\r\n\t */\r\n\tpublic adapter = new Adapter(this);\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxisDataItem\";\r\n\t\tthis.text = \"{category}\";\r\n\r\n\t\tthis.locations.category = 0;\r\n\t\tthis.locations.endCategory = 1;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Category.\r\n\t *\r\n\t * @param {string} value Category\r\n\t */\r\n\tpublic set category(value: string) {\r\n\t\tthis.setProperty(\"category\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get category(): string {\r\n\t\tif (this.adapter.isEnabled(\"category\")) {\r\n\t\t\treturn this.adapter.apply(\"category\", this.properties[\"category\"]);\r\n\t\t}\r\n\t\treturn this.properties[\"category\"];\r\n\t}\r\n\r\n\t/**\r\n\t * End category.\r\n\t *\r\n\t * Used for items that span several categories, like [[CategoryAxisBreak]].\r\n\t *\r\n\t * @param {string} value End category\r\n\t */\r\n\tpublic set endCategory(value: string) {\r\n\t\tthis.setProperty(\"endCategory\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} End category\r\n\t */\r\n\tpublic get endCategory(): string {\r\n\t\treturn this.properties[\"endCategory\"];\r\n\t}\r\n}\r\n\r\n/**\r\n * Defines adapters for [[DataItem]]\r\n * Includes both the [[Adapter]] definitions and properties\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisDataItemAdapters extends IAxisDataItemAdapters {\r\n\tcategory: string;\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CategoryAxis]].\r\n *\r\n */\r\nexport interface ICategoryAxisDataFields extends IAxisDataFields {\r\n\r\n\t/**\r\n\t * A field that holds category information.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcategory?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CategoryAxis]].\r\n *\r\n */\r\nexport interface ICategoryAxisProperties extends IAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[CategoryAxis]].\r\n *\r\n */\r\nexport interface ICategoryAxisEvents extends IAxisEvents { }\r\n\r\n/**\r\n * Defines adapter for [[CategoryAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICategoryAxisAdapters extends IAxisAdapters, ICategoryAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a category-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Clients\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"CategoryAxis\",\r\n * \"title\": {\r\n * \"text\": \"Clients\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link ICategoryAxisEvents} for a list of available Events\r\n * @see {@link ICategoryAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CategoryAxis extends Axis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t *\r\n\t * @type {CategoryAxisDataFIelds}\r\n\t */\r\n\tpublic _dataFields: ICategoryAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICategoryAxisProperties}\r\n\t */\r\n\tpublic _properties!: ICategoryAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICategoryAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: ICategoryAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICategoryAxisEvents}\r\n\t */\r\n\tpublic _events!: ICategoryAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t *\r\n\t * @type {CategoryAxisDataItem}\r\n\t */\r\n\tpublic _dataItem: CategoryAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t *\r\n\t * @type {CategoryAxisBreak}\r\n\t */\r\n\tpublic _axisBreak: CategoryAxisBreak;\r\n\r\n\t/**\r\n\t * A reference to chart the axis is for.\r\n\t *\r\n\t * @type {SerialChart}\r\n\t */\r\n\tpublic chart: SerialChart;\r\n\r\n\t/**\r\n\t * Frequency of the labels on axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _frequency: number;\r\n\r\n\t/**\r\n\t * A collection that holds Axis' data items sorted by each category.\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tpublic dataItemsByCategory: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * last data item is used for the closing grid\r\n\t */\r\n\tprotected _lastDataItem: CategoryAxisDataItem;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"CategoryAxis\";\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"category\";\r\n\r\n\t\tthis._lastDataItem = this.createDataItem();\r\n\t\tthis._lastDataItem.component = this;\r\n\t\tthis._disposers.push(this._lastDataItem);\r\n\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {CategoryAxisDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CategoryAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return {CategoryAxisBreak} Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new CategoryAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateDataRange(): void {\r\n\r\n\t\tsuper.validateDataRange();\r\n\r\n\t\t$iter.each(this._series.iterator(), (series) => {\r\n\t\t\tif ((series.xAxis instanceof CategoryAxis) && (series.yAxis instanceof CategoryAxis)) {\r\n\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t}\r\n\t\t\telse {\r\n\r\n\t\t\t\tlet firstSeriesDataItem = this.getSeriesDataItem(series, this.start);\r\n\t\t\t\tlet lastSeriesDataItem = this.getSeriesDataItem(series, this.end, true);\r\n\t\t\t\tif (firstSeriesDataItem) {\r\n\t\t\t\t\tseries.startIndex = firstSeriesDataItem.index;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.start = this.start;\r\n\t\t\t\t}\r\n\t\t\t\tif (lastSeriesDataItem) {\r\n\t\t\t\t\tseries.endIndex = lastSeriesDataItem.index + 1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.end = this.end;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// range might not change, but axis breaks might.\r\n\t\t\t\tif (this.axisBreaks.length > 0) {\r\n\t\t\t\t\tseries.invalidateDataRange();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Validates the whole axis. Causes it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tlet dataCount: number = this.dataItems.length;\r\n\r\n\t\tlet startIndex = $math.fitToRange(Math.floor(this.start * dataCount - 1), 0, dataCount);\r\n\t\tlet endIndex = $math.fitToRange(Math.ceil(this.end * dataCount), 0, dataCount);\r\n\r\n\t\tif (this.renderer.invalid) {\r\n\t\t\tthis.renderer.validate();\r\n\t\t}\r\n\r\n\t\t// find frequency at which we'll show items\r\n\t\tlet maxCount: number = this.renderer.axisLength / this.renderer.minGridDistance;\r\n\t\tlet frequency: number = Math.min(this.dataItems.length, Math.ceil((endIndex - startIndex) / maxCount));\r\n\r\n\t\tthis._startIndex = Math.floor(startIndex / frequency) * frequency;\r\n\t\tthis._endIndex = Math.ceil(this.end * dataCount);\r\n\r\n\t\tthis.fixAxisBreaks();\r\n\r\n\t\tif (this._startIndex == this._endIndex) {\r\n\t\t\tthis._endIndex++;\r\n\t\t}\r\n\r\n\t\tthis._frequency = frequency;\r\n\r\n\t\tif (this.axisLength <= 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.maxZoomFactor = this.dataItems.length;\r\n\t\tif (this.dataItems.length <= 0) {\r\n\t\t\tthis.maxZoomFactor = 1;\r\n\t\t}\r\n\r\n\t\tthis.resetIterators();\r\n\r\n\t\t// it's important to use protected variables here, as getters will return 0 - length\r\n\t\t// TODO use iterator instead\r\n\t\t// @ todo: not solved cat axis item fading\r\n\t\tstartIndex = $math.max(0, this._startIndex - this._frequency);\r\n\t\tendIndex = $math.min(this.dataItems.length, this._endIndex + this._frequency);\r\n\r\n\t\tlet itemIndex = 0;\r\n\r\n\t\tfor (let i = 0; i < startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = endIndex, len = this.dataItems.length; i < len; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.__disabled = true;\r\n\t\t}\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tif (i < this.dataItems.length) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (i / this._frequency == Math.round(i / this._frequency)) {\r\n\t\t\t\t\tlet axisBreak: CategoryAxisBreak = this.isInBreak(i);\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t//previously we disabled all before, but this is better for cpu\r\n\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex); // helps to solve shrinking\r\n\t\t\t\t\tdataItem.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.appendDataItem(this._lastDataItem);\r\n\t\tthis.validateDataElement(this._lastDataItem, itemIndex + 1, this.dataItems.length);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\tlet adjustedStartValue: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet adjustedEndValue: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif ($math.intersect({ start: adjustedStartValue, end: adjustedEndValue }, { start: this._startIndex, end: this._endIndex })) {\r\n\r\n\t\t\t\tlet frequency: number = $math.fitToRange(Math.ceil(this._frequency / axisBreak.breakSize), 1, adjustedEndValue - adjustedStartValue);\r\n\t\t\t\tlet itemIndex = 0;\r\n\t\t\t\t// TODO use iterator instead\r\n\t\t\t\tfor (let b = adjustedStartValue; b <= adjustedEndValue; b = b + frequency) {\r\n\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(b);\r\n\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\tthis.validateDataElement(dataItem, itemIndex);\r\n\t\t\t\t\titemIndex++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.validateBreaks();\r\n\t\tthis.validateAxisRanges();\r\n\r\n\t\tthis.ghostLabel.invalidate(); // solves font issue\r\n\t\tthis.renderer.invalidateLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElement description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {CategoryAxisDataItem} dataItem [description]\r\n\t * @param {number} itemIndex [description]\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"], itemIndex?: number, index?: number): void {\r\n\t\tsuper.validateDataElement(dataItem);\r\n\r\n\t\t//dataItem.__disabled = false;\r\n\r\n\t\tlet renderer: AxisRenderer = this.renderer;\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = this.categoryToIndex(dataItem.category);\r\n\t\t}\r\n\r\n\t\tlet endIndex = this.categoryToIndex(dataItem.endCategory);\r\n\r\n\t\tif (!$type.isNumber(endIndex)) {\r\n\t\t\tendIndex = index;\r\n\t\t}\r\n\r\n\t\tlet position: number = this.indexToPosition(index, dataItem.locations.category);\r\n\t\tlet endPosition: number = this.indexToPosition(endIndex, dataItem.locations.endCategory);\r\n\r\n\t\tdataItem.position = position;\r\n\r\n\t\tlet fillEndIndex: number;\r\n\t\tlet fillPosition: number;\r\n\t\tlet fillEndPosition: number;\r\n\r\n\t\tif (dataItem.isRange) {\r\n\t\t\tfillEndIndex = endIndex;\r\n\t\t\tfillPosition = this.indexToPosition(index, dataItem.locations.category);\r\n\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, dataItem.locations.endCategory);\r\n\t\t}\r\n\r\n\t\tdataItem.point = renderer.positionToPoint(position);\r\n\r\n\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\tif (tick && !tick.disabled) {\r\n\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t}\r\n\r\n\t\tlet grid: Grid = dataItem.grid;\r\n\t\tif (grid && !grid.disabled) {\r\n\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t}\r\n\r\n\r\n\t\tlet label: AxisLabel = dataItem.label;\r\n\t\tif (label && !label.disabled) {\r\n\t\t\t// theorethically this might result problems if category text changes, the range text won't change. But otherwise range.label.text = \"custom text\" wont' work, which is not intuitive.\r\n\t\t\tif (!dataItem.isRange || label.text == undefined) {\r\n\t\t\t\tdataItem.text = dataItem.text;\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateLabelElement(label, position, endPosition);\r\n\r\n\t\t\tif (dataItem.label.measuredWidth > this.ghostLabel.measuredWidth || dataItem.label.measuredHeight > this.ghostLabel.measuredHeight) {\r\n\t\t\t\tthis.ghostLabel.text = dataItem.label.currentText;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\tif (fill && !fill.disabled) {\r\n\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tfillEndIndex = index + this._frequency;\r\n\t\t\t\tfillPosition = this.indexToPosition(index, fill.location);\r\n\t\t\t\tfillEndPosition = this.indexToPosition(fillEndIndex, fill.location);\r\n\t\t\t}\r\n\r\n\t\t\trenderer.updateFillElement(fill, fillPosition, fillEndPosition);\r\n\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\tthis.fillRule(dataItem, itemIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\tif (mask) {\r\n\t\t\trenderer.updateFillElement(mask, fillPosition, fillEndPosition);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes the axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {CategoryAxisDataItem} dataItem Data item\r\n\t * @param {Object} dataContext The raw data that corresponds to this data item\r\n\t */\r\n\tpublic processDataItem(dataItem: this[\"_dataItem\"], dataContext: Object): void {\r\n\t\t// creat a collection for fast access\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t\t// check if such category already exists\r\n\t\tlet existingDataItem: CategoryAxisDataItem = this.dataItemsByCategory.getKey(dataItem.category);\r\n\t\tif (existingDataItem != dataItem) {\r\n\t\t\tthis.dataItems.remove(existingDataItem);\r\n\t\t}\r\n\r\n\t\tthis.dataItemsByCategory.setKey(dataItem.category, dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a category index to an actual screen coordinate on the axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param {number} index Index\r\n\t * @param {AxisItemLocation | number} location Location (0-1)\r\n\t * @return {number} Position (px)\r\n\t */\r\n\tpublic indexToPosition(index: number, location?: AxisItemLocation | number): number {\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = 0.5;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet difference: number = this.adjustDifference(startIndex, endIndex);\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tdifference -= startLocation;\r\n\t\tdifference -= (1 - endLocation);\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tif (index < startIndex) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tif ($math.intersect({ start: breakStartIndex, end: breakEndIndex }, { start: startIndex, end: endIndex })) {\r\n\t\t\t\tbreakStartIndex = Math.max(startIndex, breakStartIndex);\r\n\t\t\t\tbreakEndIndex = Math.min(endIndex, breakEndIndex);\r\n\r\n\t\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\t\t// value to the right of break end\r\n\t\t\t\tif (index > breakEndIndex) {\r\n\t\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t\t}\r\n\t\t\t\t// value to the left of break start\r\n\t\t\t\telse if (index < breakStartIndex) {\r\n\r\n\t\t\t\t}\r\n\t\t\t\t// value within break\r\n\t\t\t\telse {\r\n\t\t\t\t\tindex = breakStartIndex + (index - breakStartIndex) * breakSize;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\treturn $math.round((index + location - startLocation - startIndex) / difference, 5);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t *\r\n\t * @param {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {number} Position\r\n\t */\r\n\tpublic categoryToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.categoryToIndex(category);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {IOrientationPoint} Orientation point\r\n\t */\r\n\tpublic categoryToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\tlet position = this.categoryToPosition(category, location);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to a orientation point (x, y, angle) on axis\r\n\t *\r\n\t * `location` identifies relative location within category. 0 - beginning,\r\n\t * 0.5 - middle, 1 - end, and anything inbetween.\r\n\t * @param {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {IOrientationPoint} Orientation point\r\n\t */\r\n\tanyToPoint(category: string, location?: AxisItemLocation): IOrientationPoint {\r\n\t\treturn this.categoryToPoint(category, location);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a string category name to relative position on axis.\r\n\t *\r\n\t * An alias to `categoryToPosition()`.\r\n\t *\r\n\t * @param {string} category Category name\r\n\t * @param {AxisItemLocation} location Location (0-1)\r\n\t * @return {number} Relative position\r\n\t */\r\n\tpublic anyToPosition(category: string, location?: AxisItemLocation): number {\r\n\t\treturn this.categoryToPosition(category, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts named category to an index of data item it corresponds to.\r\n\t *\r\n\t * @param {string} category Category\r\n\t * @return {number} Data item index\r\n\t */\r\n\tpublic categoryToIndex(category: string): number {\r\n\t\tif ($type.hasValue(category)) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItemsByCategory.getKey(category);\r\n\t\t\tif (dataItem) {\r\n\t\t\t\treturn dataItem.index;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms the axis to specific named ctaegories.\r\n\t *\r\n\t * @param {string} startCategory Start category\r\n\t * @param {string} endCategory End category\r\n\t */\r\n\tpublic zoomToCategories(startCategory: string, endCategory: string): void {\r\n\t\tthis.zoomToIndexes(this.categoryToIndex(startCategory), this.categoryToIndex(endCategory) + 1);\r\n\t}\r\n\r\n\t/**\r\n\t * [getAnyRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {string} start [description]\r\n\t * @param {string} end [description]\r\n\t * @param {AxisItemLocation} startLocation [description]\r\n\t * @param {AxisItemLocation} endLocation [description]\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic getAnyRangePath(start: string, end: string, startLocation?: AxisItemLocation, endLocation?: AxisItemLocation): string {\r\n\t\tlet startPos: number = this.categoryToPosition(start, startLocation);\r\n\t\tlet endPos: number = this.categoryToPosition(end, endLocation);\r\n\t\treturn this.getPositionRangePath(startPos, endPos); // Base class (Axis) gets range shape from AxisRenderer\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position (px) within axis and adjust it to a specific\r\n\t * `location` within category it corresponds to.\r\n\t *\r\n\t * @param {number} position Source position (px)\r\n\t * @param {AxisItemLocation} location Location within category (0-1)\r\n\t * @return {number} Adjusted position (px)\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet index: number = this.positionToIndex(position);\r\n\t\treturn this.indexToPosition(index, location);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a data item from Series that corresponds to a specific absolute\r\n\t * position on the Axis.\r\n\t *\r\n\t * @param {XYSeries} series Target series\r\n\t * @param {number} position Position (px)\r\n\t * @return {XYSeriesDataItem} Series data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, last?: boolean): XYSeriesDataItem {\r\n\r\n\t\tif ($type.isNumber(position)) {\r\n\t\t\tlet index = this.positionToIndex(position);\r\n\r\n\t\t\tlet dataItem = this.dataItems.getIndex(index);\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet category = dataItem.category;\r\n\r\n\t\t\t\tlet sdi: XYSeriesDataItem;\r\n\t\t\t\t//try the same index first\r\n\t\t\t\tif (!last) {\r\n\t\t\t\t\tlet seriesDataItem = series.dataItems.getIndex(index);\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tif (seriesDataItem.categoryX == category) {\r\n\t\t\t\t\t\t\treturn seriesDataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tif (seriesDataItem.categoryY == category) {\r\n\t\t\t\t\t\t\treturn seriesDataItem;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$iter.eachContinue(series.dataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\t\t\t\tsdi = dataItem;\r\n\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t})\r\n\r\n\t\t\t\t\treturn sdi;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfor (let i = series.dataItems.length - 1; i >= 0; i--) {\r\n\t\t\t\t\t\tlet dataItem = series.dataItems.getIndex(i);\r\n\t\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\t\tif (dataItem.categoryX == category) {\r\n\t\t\t\t\t\t\t\treturn dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\t\tif (dataItem.categoryY == category) {\r\n\t\t\t\t\t\t\t\treturn dataItem;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {SeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.x;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).x;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {SeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key?: string, location?: number): number {\r\n\t\tlet position;\r\n\t\tif ($type.hasValue(key)) {\r\n\t\t\tposition = this.categoryToPosition(dataItem.categories[key], location);\r\n\t\t}\r\n\t\tif ($type.isNaN(position)) {\r\n\t\t\treturn this.basePoint.y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.renderer.positionToPoint(position).y;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Category\r\n\t * @param {number} location Location (0-1)\r\n\t * @param {string} stackKey Stack key (?)\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\treturn this.positionToAngle(this.categoryToPosition(dataItem.categories[key], location));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the start of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} position Position (px)\r\n\t * @return {number} Cell start position (px)\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an absolute pixel coordinate of the end of the cell (category),\r\n\t * that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} position Position (px)\r\n\t * @return {number} Cell end position (px)\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a category tooltip, based on specific position\r\n\t * within axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Position (px)\r\n\t * @return {string} Label (category)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) {\r\n\t\t\treturn this.adapter.apply(\"getTooltipText\", dataItem.category);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an index of the category that corresponds to specific pixel\r\n\t * position within axis.\r\n\t *\r\n\t * @param {number} position Position (px)\r\n\t * @return {number} Category index\r\n\t */\r\n\tpublic positionToIndex(position: number): number {\r\n\t\tposition = $math.round(position, 10);\r\n\t\tif (position < 0) {\r\n\t\t\tposition = 0;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet difference: number = endIndex - startIndex;\r\n\r\n\t\tlet axisBreaks = this.axisBreaks;\r\n\r\n\t\tlet index: number = null;\r\n\r\n\t\t// in case we have some axis breaks\r\n\t\t$iter.eachContinue(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakStartPosition: number = axisBreak.startPosition;\r\n\t\t\tlet breakEndPosition: number = axisBreak.endPosition;\r\n\r\n\t\t\tlet breakStartIndex: number = axisBreak.adjustedStartValue;\r\n\t\t\tlet breakEndIndex: number = axisBreak.adjustedEndValue;\r\n\r\n\t\t\tbreakStartIndex = $math.max(breakStartIndex, startIndex);\r\n\t\t\tbreakEndIndex = $math.min(breakEndIndex, endIndex);\r\n\r\n\t\t\tlet breakSize: number = axisBreak.breakSize;\r\n\r\n\t\t\tdifference -= (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\r\n\t\t\t// position to the right of break end\r\n\t\t\tif (position > breakEndPosition) {\r\n\t\t\t\tstartIndex += (breakEndIndex - breakStartIndex) * (1 - breakSize);\r\n\t\t\t}\r\n\t\t\t// position to the left of break start\r\n\t\t\telse if (position < breakStartPosition) {\r\n\r\n\t\t\t}\r\n\t\t\t// value within break\r\n\t\t\telse {\r\n\t\t\t\tlet breakPosition = (position - breakStartPosition) / (breakEndPosition - breakStartPosition);\r\n\t\t\t\tindex = breakStartIndex + Math.round(breakPosition * (breakEndIndex - breakStartIndex));\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\tif (!$type.isNumber(index)) {\r\n\t\t\tindex = Math.floor(position * difference + startIndex);\r\n\t\t}\r\n\t\tif (index >= endIndex) {\r\n\t\t\tindex--;\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns category based on position.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param {number} position Relative position on axis (0-1)\r\n\t * @return {string} Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(this.positionToIndex(position));\r\n\t\tif (dataItem) { // @martynas todo: added this check, but this means that some aria label might not be received?\r\n\t\t\treturn dataItem.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {IPoint} Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\t// This makes base grid to be drawn at the end of the axis and adds extra\r\n\t\t// grid which we need to nicely close the chart.\r\n\t\treturn this.renderer.positionToPoint(1);\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes Axis' renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\r\n\t\tlet renderer = this.renderer;\r\n\t\trenderer.baseGrid.disabled = true;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CategoryAxis\"] = CategoryAxis;\r\nregistry.registeredClasses[\"CategoryAxisDataItem\"] = CategoryAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/CategoryAxis.ts","/**\r\n * DateAxisBreak includes functionality to add breaks on a [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { ValueAxisBreak, IValueAxisBreakProperties, IValueAxisBreakAdapters, IValueAxisBreakEvents } from \"./ValueAxisBreak\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { DateAxis } from \"./DateAxis\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IDisposer, MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[DateAxisBreak]].\r\n */\r\nexport interface IDateAxisBreakProperties extends IValueAxisBreakProperties {\r\n\r\n\t/**\r\n\t * A `Date` break starts on.\r\n\t *\r\n\t * @type {Date}\r\n\t */\r\n\tstartDate?: Date;\r\n\r\n\t/**\r\n\t * A `Date` break ends on.\r\n\t *\r\n\t * @type {Date}\r\n\t */\r\n\tendDate?: Date;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxisBreak]]\r\n */\r\nexport interface IDateAxisBreakEvents extends IValueAxisBreakEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxisBreak]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisBreakAdapters extends IValueAxisBreakAdapters, IDateAxisBreakProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to define breaks for [[DateAxis]].\r\n *\r\n * A \"break\" can be used to \"cut out\" specific ranges of the axis scale, e.g.\r\n * weekends and holidays out of the Date-based axis.\r\n *\r\n * @see {@link IDateAxisBreakEvents} for a list of available events\r\n * @see {@link IDateAxisBreakAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxisBreak extends ValueAxisBreak {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IDateAxisBreakProperties}\r\n\t */\r\n\tpublic _properties!: IDateAxisBreakProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDateAxisBreakAdapters}\r\n\t */\r\n\tpublic _adapter!: IDateAxisBreakAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IDateAxisBreakEvents}\r\n\t */\r\n\tpublic _events!: IDateAxisBreakEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Axis this break is used for.\r\n\t *\r\n\t * @type {ValueAxis}\r\n\t */\r\n\tpublic _axisType: DateAxis;\r\n\r\n\t/**\r\n\t * [gridInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @type {ITimeInterval}\r\n\t */\r\n\tpublic gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [gridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Date}\r\n\t * @todo Description\r\n\t */\r\n\tpublic gridDate: Date;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisBreak\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting date for the break.\r\n\t *\r\n\t * @param {Date} value Start date\r\n\t */\r\n\tpublic set startDate(value: Date) {\r\n\t\tif (this.setPropertyValue(\"startDate\", value)) {\r\n\t\t\tthis.startValue = value.getTime();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Start date\r\n\t */\r\n\tpublic get startDate(): Date {\r\n\t\treturn this.getPropertyValue(\"startDate\");\r\n\t}\r\n\r\n\t/**\r\n\t * Ending date for the break.\r\n\t *\r\n\t * @param {Date} value End date\r\n\t */\r\n\tpublic set endDate(value: Date) {\r\n\t\tif (this.setPropertyValue(\"endDate\", value)) {\r\n\t\t\tthis.endValue = value.getTime();\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tthis.axis.invalidate();\r\n\t\t\t\tthis.axis.invalidateSeries();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.getPropertyValue(\"endDate\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DateAxisBreak\"] = DateAxisBreak;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxisBreak.ts","/**\r\n * DateAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { DateAxisBreak } from \"./DateAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DateAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DateAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {DateAxis}\r\n\t */\r\n\tpublic _component!: DateAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.values.date = {};\r\n\t\tthis.values.endDate = {};\r\n\t}\r\n\r\n\t/**\r\n\t * Date position of the data item.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set date(date: Date) {\r\n\t\tthis.setDate(\"date\", date);\r\n\t\tthis.value = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get date(): Date {\r\n\t\treturn this.dates[\"date\"];\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * End date for data item.\r\n\t *\r\n\t * @param {Date} date End date\r\n\t */\r\n\tpublic set endDate(date: Date) {\r\n\t\tthis.setDate(\"endDate\", date);\r\n\t\tthis.endValue = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.dates[\"endDate\"];\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DateAxis]].\r\n */\r\nexport interface IDateAxisDataFields extends IValueAxisDataFields {\r\n\r\n\t/**\r\n\t * Date.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdate?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[DateAxis]].\r\n */\r\nexport interface IDateAxisProperties extends IValueAxisProperties {\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tskipEmptyPeriods?: boolean;\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Use different format for period beginning?\r\n\t */\r\n\tmarkUnitChange?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\ttooltipDateFormat?: string;\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxis]].\r\n */\r\nexport interface IDateAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DateAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisAdapters extends IValueAxisAdapters, IDateAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create a date/time-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IDateAxisEvents} for a list of available Events\r\n * @see {@link IDateAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DateAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t *\r\n\t * @type {IDateAxisDataFields}\r\n\t */\r\n\tpublic _dataFields: IDateAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IDateAxisProperties}\r\n\t */\r\n\tpublic _properties!: IDateAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDateAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: IDateAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IDateAxisEvents}\r\n\t */\r\n\tpublic _events!: IDateAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t *\r\n\t * @type {DateAxisDataItem}\r\n\t */\r\n\tpublic _dataItem: DateAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t *\r\n\t * @type {DateAxisBreak}\r\n\t */\r\n\tpublic _axisBreak: DateAxisBreak;\r\n\r\n\t/**\r\n\t * A list of date/time intervals for Date axis.\r\n\t *\r\n\t * This define various granularities available for the axis. For example\r\n\t * if you have an axis spanning an hour, and space for 6 grid lines / labels\r\n\t * the axis will choose the granularity of 10 minutes, displaying a label\r\n\t * every 10 minutes.\r\n\t *\r\n\t * Default intervals:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { timeUnit: \"millisecond\", count: 1 },\r\n\t * { timeUnit: \"millisecond\", count: 5 },\r\n\t * { timeUnit: \"millisecond\", count: 10 },\r\n\t * { timeUnit: \"millisecond\", count: 50 },\r\n\t * { timeUnit: \"millisecond\", count: 100 },\r\n\t * { timeUnit: \"millisecond\", count: 500 },\r\n\t * { timeUnit: \"second\", count: 1 },\r\n\t * { timeUnit: \"second\", count: 5 },\r\n\t * { timeUnit: \"second\", count: 10 },\r\n\t * { timeUnit: \"second\", count: 30 },\r\n\t * { timeUnit: \"minute\", count: 1 },\r\n\t * { timeUnit: \"minute\", count: 5 },\r\n\t * { timeUnit: \"minute\", count: 10 },\r\n\t * { timeUnit: \"minute\", count: 30 },\r\n\t * { timeUnit: \"hour\", count: 1 },\r\n\t * { timeUnit: \"hour\", count: 3 },\r\n\t * { timeUnit: \"hour\", count: 6 },\r\n\t * { timeUnit: \"hour\", count: 12 },\r\n\t * { timeUnit: \"day\", count: 1 },\r\n\t * { timeUnit: \"day\", count: 2 },\r\n\t * { timeUnit: \"day\", count: 3 },\r\n\t * { timeUnit: \"day\", count: 4 },\r\n\t * { timeUnit: \"day\", count: 5 },\r\n\t * { timeUnit: \"week\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 2 },\r\n\t * { timeUnit: \"month\", count: 3 },\r\n\t * { timeUnit: \"month\", count: 6 },\r\n\t * { timeUnit: \"year\", count: 1 },\r\n\t * { timeUnit: \"year\", count: 2 },\r\n\t * { timeUnit: \"year\", count: 5 },\r\n\t * { timeUnit: \"year\", count: 10 },\r\n\t * { timeUnit: \"year\", count: 50 },\r\n\t * { timeUnit: \"year\", count: 100 }\r\n\t * ]\r\n\t * ```\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tpublic gridIntervals: List = new List();\r\n\r\n\t/**\r\n\t * A collection of date formats to use when formatting different time units\r\n\t * on Date/time axis.\r\n\t *\r\n\t * Actual defaults will depend on the language locale set for the chart.\r\n\t *\r\n\t * To override format for a specific time unit, say days, you need to set\r\n\t * the appropriate key to a format string. E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * \"xAxes\": [{\r\n\t * \"type\": \"DateAxis\",\r\n\t * \"dateFormats\": {\r\n\t * \"day\": \"MMMM d, yyyy\"\r\n\t * }\r\n\t * }]\r\n\t * ```\r\n\t *\r\n\t * @see {@link DateFormatter}\r\n\t * @type {Dictionary}\r\n\t */\r\n\tpublic dateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * These formats are applied to labels that are first in a larger unit.\r\n\t *\r\n\t * For example, if we have a DateAxis with days on it, the first day of month\r\n\t * indicates a break in month - a start of the bigger period.\r\n\t *\r\n\t * For those labels, `periodChangeDateFormats` are applied instead of\r\n\t * `dateFormats`.\r\n\t *\r\n\t * This allows us implement convenient structures, like instead of:\r\n\t *\r\n\t * `Jan 1 - Jan 2 - Jan 3 - ...`\r\n\t *\r\n\t * We can have:\r\n\t *\r\n\t * `Jan - 1 - 2 - 3 - ...`\r\n\t *\r\n\t * This can be disabled by setting `markUnitChange = false`.\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tpublic periodChangeDateFormats: Dictionary = new Dictionary();\r\n\r\n\t/**\r\n\t * At which intervals grid elements are displayed.\r\n\t *\r\n\t * @type {ITimeInterval}\r\n\t */\r\n\tprotected _gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [_intervalDuration description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _intervalDuration: number;\r\n\r\n\t/**\r\n\t * [_gridDate description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {Date}\r\n\t */\r\n\tprotected _gridDate: Date;\r\n\r\n\t/**\r\n\t * [_nextGridUnit description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {TimeUnit}\r\n\t */\r\n\tprotected _nextGridUnit: TimeUnit;\r\n\r\n\t/**\r\n\t * User-defined granularity of data.\r\n\t *\r\n\t * @type {ITimeInterval}\r\n\t */\r\n\tprotected _baseInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * Actual interval (granularity) derived from the actual data.\r\n\t *\r\n\t * @type {ITimeInterval}\r\n\t */\r\n\tprotected _baseIntervalReal: ITimeInterval = { timeUnit: \"day\", count: 1 };\r\n\r\n\t/**\r\n\t * @type {number}\r\n\t */\r\n\tprotected _prevSeriesTime: number;\r\n\r\n\t/**\r\n\t * [_minDifference description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _minDifference: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * A function which applies fills to axis cells.\r\n\t *\r\n\t * Default function fills every second fill. You can set this to a function\r\n\t * that follows some other logic.\r\n\t *\r\n\t * Function should accept a [[DateAxisDataItem]] and modify its `axisFill`\r\n\t * property accordingly.\r\n\t *\r\n\t * @todo type\r\n\t */\r\n\tpublic fillRule(dataItem: this[\"_dataItem\"]) {\r\n\t\tlet value = dataItem.value;\r\n\t\tlet axis = dataItem.component;\r\n\t\tlet gridInterval = axis._gridInterval;\r\n\t\tlet gridDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tif (Math.round((value - axis.min) / gridDuration) / 2 == Math.round(Math.round((value - axis.min) / gridDuration) / 2)) {\r\n\t\t\tdataItem.axisFill.__disabled = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.axisFill.__disabled = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"markUnitChange\", true);\r\n\t\tthis.snapTooltip = true;\r\n\r\n\t\t// Translatable defaults are applied in `applyInternalDefaults()`\r\n\t\t// ...\r\n\r\n\t\t// Define default intervals\r\n\t\tthis.gridIntervals.pushAll([\r\n\t\t\t{ timeUnit: \"millisecond\", count: 1 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 5 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 10 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 50 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 100 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 500 },\r\n\t\t\t{ timeUnit: \"second\", count: 1 },\r\n\t\t\t{ timeUnit: \"second\", count: 5 },\r\n\t\t\t{ timeUnit: \"second\", count: 10 },\r\n\t\t\t{ timeUnit: \"second\", count: 30 },\r\n\t\t\t{ timeUnit: \"minute\", count: 1 },\r\n\t\t\t{ timeUnit: \"minute\", count: 5 },\r\n\t\t\t{ timeUnit: \"minute\", count: 10 },\r\n\t\t\t{ timeUnit: \"minute\", count: 15 },\r\n\t\t\t{ timeUnit: \"minute\", count: 30 },\r\n\t\t\t{ timeUnit: \"hour\", count: 1 },\r\n\t\t\t{ timeUnit: \"hour\", count: 3 },\r\n\t\t\t{ timeUnit: \"hour\", count: 6 },\r\n\t\t\t{ timeUnit: \"hour\", count: 12 },\r\n\t\t\t{ timeUnit: \"day\", count: 1 },\r\n\t\t\t{ timeUnit: \"day\", count: 2 },\r\n\t\t\t{ timeUnit: \"day\", count: 3 },\r\n\t\t\t{ timeUnit: \"day\", count: 4 },\r\n\t\t\t{ timeUnit: \"day\", count: 5 },\r\n\t\t\t{ timeUnit: \"week\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 2 },\r\n\t\t\t{ timeUnit: \"month\", count: 3 },\r\n\t\t\t{ timeUnit: \"month\", count: 6 },\r\n\t\t\t{ timeUnit: \"year\", count: 1 },\r\n\t\t\t{ timeUnit: \"year\", count: 2 },\r\n\t\t\t{ timeUnit: \"year\", count: 5 },\r\n\t\t\t{ timeUnit: \"year\", count: 10 },\r\n\t\t\t{ timeUnit: \"year\", count: 50 },\r\n\t\t\t{ timeUnit: \"year\", count: 100 },\r\n\t\t\t{ timeUnit: \"year\", count: 200 },\r\n\t\t\t{ timeUnit: \"year\", count: 500 },\r\n\t\t\t{ timeUnit: \"year\", count: 1000 },\r\n\t\t\t{ timeUnit: \"year\", count: 2000 },\r\n\t\t\t{ timeUnit: \"year\", count: 5000 },\r\n\t\t\t{ timeUnit: \"year\", count: 10000 },\r\n\t\t\t{ timeUnit: \"year\", count: 100000 }\r\n\t\t]);\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"date\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Set default date formats\r\n\t\tif (!this.dateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.dateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.dateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.dateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.dateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.dateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.dateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\t // not a mistake\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.dateFormats.setKey(\"month\", this.language.translate(\"_date_month\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"year\")) {\r\n\t\t\tthis.dateFormats.setKey(\"year\", this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"month\", this.language.translate(\"_date_month\") + \" \" + this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {DateAxisDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new DateAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return {DateAxisBreak} Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new DateAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis' data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems(): void {\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet start: number = this.start;\r\n\t\tlet end: number = this.end;\r\n\t\tlet periodCount: number = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.maxZoomFactor = (this.max - this.min) / this.baseDuration;\r\n\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet newPeriodCount: number = (this.max - this.min) / this.baseDuration;\r\n\t\tstart = start + (end - start) * (1 - periodCount / newPeriodCount);\r\n\t\tthis.zoom({ start: start, end: end }, false, true); // added instantlyto solve zoomout problem when we have axes gaps. @todo: check how this affects maxZoomFactor\r\n\t}\r\n\r\n\t/**\r\n\t * Handles process after zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Does nothing?\r\n\t */\r\n\tpublic handleSelectionExtremesChange(): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates all positions, related to axis as per current zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic calculateZoom(): void {\r\n\t\tsuper.calculateZoom();\r\n\r\n\t\tlet gridInterval: ITimeInterval = this.chooseInterval(0, this.adjustDifference(this._minZoomed, this._maxZoomed), this._gridCount);\r\n\r\n\t\tif ($time.getDuration(gridInterval.timeUnit, gridInterval.count) < this.baseDuration) {\r\n\t\t\tgridInterval = { ...this.baseInterval };\r\n\t\t}\r\n\r\n\t\tthis._gridInterval = gridInterval;\r\n\r\n\t\tthis._gridDate = $time.round(new Date(this.min), gridInterval.timeUnit, gridInterval.count);\r\n\t\tthis._nextGridUnit = $time.getNextUnit(gridInterval.timeUnit);\r\n\r\n\t\t// the following is needed to avoid grid flickering while scrolling\r\n\t\tthis._intervalDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\t\tlet count: number = Math.ceil(this._difference / this._intervalDuration);\r\n\t\tcount = Math.floor(this.start * count) - 3; // some extra is needed\r\n\r\n\t\t$time.add(this._gridDate, gridInterval.timeUnit, count * gridInterval.count);\r\n\r\n\t\t// tell series start/end\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\tlet field = series.getAxisField(this);\r\n\r\n\t\t\t\t// TODO use $type.castNumber ?\r\n\t\t\t\tlet startIndex: number = series.dataItems.findClosestIndex(this._minZoomed, (x) => x[field], \"left\");\r\n\t\t\t\t// 1 millisecond is removed so that if only first item is selected, it would not count in the second.\r\n\t\t\t\tlet endIndex: number = series.dataItems.findClosestIndex(this._maxZoomed - 1, (x) => x[field], \"right\") + 1;\r\n\r\n\t\t\t\tseries.startIndex = startIndex;\r\n\t\t\t\tseries.endIndex = endIndex;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tsuper.validateData();\r\n\t\tif (!$type.isNumber(this.baseInterval.count)) {\r\n\t\t\tthis.baseInterval.count = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get minDifference(): number {\r\n\t\tvar minDifference = Number.MAX_VALUE;\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (minDifference > this._minDifference[series.uid]) {\r\n\t\t\t\tminDifference = this._minDifference[series.uid];\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (minDifference == Number.MAX_VALUE || minDifference == 0) {\r\n\t\t\tminDifference = $time.getDuration(\"day\");\r\n\t\t}\r\n\r\n\t\treturn minDifference;\r\n\t}\r\n\r\n\t/**\r\n\t * [dataChangeUpdate description]\r\n\t *\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic seriesDataChangeUpdate(series: XYSeries): void {\r\n\t\tthis._minDifference[series.uid] = Number.MAX_VALUE;\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItems description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic postProcessSeriesDataItems(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t$iter.each(series.dataItems.iterator(), (dataItem) => {\r\n\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.addEmptyUnitsBreaks();\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItem description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic postProcessSeriesDataItem(dataItem: XYSeriesDataItem): void {\r\n\t\t// we need to do this for all series data items not only added recently, as baseInterval might change\r\n\t\tlet baseInterval: ITimeInterval = this.baseInterval;\r\n\r\n\t\t$object.each(dataItem.dates, (key) => {\r\n\t\t\tlet date: Date = dataItem.getDate(key);\r\n\t\t\tlet startDate: Date = $time.round($time.copy(date), baseInterval.timeUnit, baseInterval.count);\r\n\t\t\tlet endDate: Date = $time.add($time.copy(startDate), baseInterval.timeUnit, baseInterval.count);\r\n\r\n\t\t\tdataItem.setCalculatedValue(key, startDate.getTime(), \"open\");\r\n\t\t\tdataItem.setCalculatedValue(key, endDate.getTime(), \"close\");\r\n\r\n\t\t\tlet series: XYSeries = dataItem.component;\r\n\t\t\tseries.dataItemsByAxis.getKey(this.uid).setKey(startDate.getTime().toString(), dataItem);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Collapses empty stretches of date/time scale by creating [[AxisBreak]]\r\n\t * elements for them.\r\n\t *\r\n\t * Can be used to automatically remove strethes without data, like weekends.\r\n\t *\r\n\t * No, need to call this manually. It will automatically be done if\r\n\t * `skipEmptyPeriods = true`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected addEmptyUnitsBreaks(): void {\r\n\r\n\t\tif (this.skipEmptyPeriods && $type.isNumber(this.min) && $type.isNumber(this.max)) {\r\n\t\t\tlet timeUnit: TimeUnit = this.baseInterval.timeUnit;\r\n\t\t\tlet count: number = this.baseInterval.count;\r\n\r\n\t\t\tthis.axisBreaks.clear(); // TODO: what about breaks added by user?\r\n\r\n\t\t\tlet date: Date = $time.round(new Date(this.min), timeUnit, count);\r\n\t\t\tlet axisBreak: DateAxisBreak;\r\n\r\n\t\t\twhile (date.getTime() < this.max - this.baseDuration) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\t\t\tlet startTime: number = date.getTime();\r\n\t\t\t\tlet startTimeStr: string = startTime.toString();\r\n\r\n\t\t\t\tlet hasData = $iter.contains(this.series.iterator(), (series) => {\r\n\t\t\t\t\treturn !!series.dataItemsByAxis.getKey(this.uid).getKey(startTimeStr);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// open break if not yet opened\r\n\t\t\t\tif (!hasData) {\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\taxisBreak = this.axisBreaks.create();\r\n\t\t\t\t\t\taxisBreak.startDate = new Date(startTime);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// close if already opened\r\n\t\t\t\t\tif (axisBreak) {\r\n\t\t\t\t\t\t// close at end time minus one millisecond\r\n\t\t\t\t\t\taxisBreak.endDate = new Date(startTime - 1);\r\n\t\t\t\t\t\taxisBreak = undefined;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates positioning of Axis breaks after something changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fixAxisBreaks(): void {\r\n\t\tsuper.fixAxisBreaks();\r\n\t\tlet axisBreaks = this._axisBreaks;\r\n\t\t$iter.each(axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\tlet breakGridCount: number = Math.ceil(this._gridCount * (Math.min(this.end, axisBreak.endPosition) - Math.max(this.start, axisBreak.startPosition)) / (this.end - this.start));\r\n\t\t\taxisBreak.gridInterval = this.chooseInterval(0, axisBreak.adjustedEndValue - axisBreak.adjustedStartValue, breakGridCount);\r\n\t\t\tlet gridDate = $time.round(new Date(axisBreak.adjustedStartValue), axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\tif (gridDate.getTime() > axisBreak.startDate.getTime()) {\r\n\t\t\t\t$time.add(gridDate, axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count);\r\n\t\t\t}\r\n\r\n\t\t\taxisBreak.gridDate = gridDate;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [getGridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {Date} date [description]\r\n\t * @param {number} intervalCount [description]\r\n\t * @return {Date} [description]\r\n\t */\r\n\tpublic getGridDate(date: Date, intervalCount: number): Date {\r\n\t\tlet timeUnit: TimeUnit = this._gridInterval.timeUnit;\r\n\t\tlet realIntervalCount: number = this._gridInterval.count;\r\n\t\t// round date\r\n\t\t$time.round(date, timeUnit);\r\n\r\n\t\tlet prevTimestamp: number = date.getTime();\r\n\r\n\t\tlet newDate: Date = $time.copy(date);\r\n\t\t// modify date by adding intervalcount\r\n\t\tlet timestamp: number = $time.add(newDate, timeUnit, intervalCount).getTime();\r\n\r\n\t\t// if it's axis break, get first rounded date which is not in a break\r\n\t\tlet axisBreak: DateAxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\tnewDate = new Date(axisBreak.endDate.getTime());\r\n\t\t\t$time.round(newDate, timeUnit, realIntervalCount);\r\n\t\t\tif (newDate.getTime() < axisBreak.endDate.getTime()) {\r\n\t\t\t\t$time.add(newDate, timeUnit, realIntervalCount);\r\n\t\t\t}\r\n\t\t\ttimestamp = newDate.getTime();\r\n\t\t}\r\n\r\n\t\t// get duration between grid lines with break duration removed\r\n\t\tlet durationBreaksRemoved: number = this.adjustDifference(prevTimestamp, timestamp);\r\n\t\t// calculate how many time units fit to this duration\r\n\t\tlet countBreaksRemoved: number = Math.round(durationBreaksRemoved / $time.getDuration(timeUnit));\r\n\r\n\t\t// if less units fit, add one and repeat\r\n\t\tif (countBreaksRemoved < realIntervalCount) {\r\n\t\t\treturn this.getGridDate(date, intervalCount + realIntervalCount);\r\n\t\t}\r\n\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * [getBreaklessDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {DateAxisBreak} axisBreak [description]\r\n\t * @param {TimeUnit} timeUnit [description]\r\n\t * @param {number} count [description]\r\n\t * @return {Date} [description]\r\n\t */\r\n\tpublic getBreaklessDate(axisBreak: DateAxisBreak, timeUnit: TimeUnit, count: number): Date {\r\n\t\tlet date = new Date(axisBreak.endValue);\r\n\t\t$time.round(date, timeUnit, count);\r\n\t\t$time.add(date, timeUnit, count);\r\n\r\n\t\tlet timestamp = date.getTime();\r\n\r\n\t\taxisBreak = this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\treturn this.getBreaklessDate(axisBreak, timeUnit, count);\r\n\t\t}\r\n\t\treturn date;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates all Axis elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateAxisElements(): void {\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\r\n\t\t\tthis.calculateZoom();\r\n\r\n\t\t\t// first regular items\r\n\t\t\tlet timestamp = this._gridDate.getTime();\r\n\t\t\tlet timeUnit = this._gridInterval.timeUnit;\r\n\t\t\tlet intervalCount = this._gridInterval.count;\r\n\t\t\tlet prevGridDate = $time.copy(this._gridDate);\r\n\r\n\t\t\tlet dataItemsIterator = this._dataItemsIterator;\r\n\t\t\tthis.resetIterators();\r\n\r\n\t\t\twhile (timestamp <= this._maxZoomed) {\r\n\t\t\t\tlet date = this.getGridDate(new Date(prevGridDate), intervalCount);\r\n\r\n\t\t\t\ttimestamp = date.getTime();\r\n\r\n\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount);\r\n\r\n\t\t\t\tlet format = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit)) {\r\n\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet text = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\tlet dataItem = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\tthis.appendDataItem(dataItem);\r\n\r\n\t\t\t\tdataItem.axisBreak = undefined;\r\n\t\t\t\tdataItem.date = date;\r\n\t\t\t\tdataItem.endDate = endDate;\r\n\r\n\t\t\t\tdataItem.text = text;\r\n\r\n\t\t\t\tprevGridDate = date;\r\n\r\n\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t}\r\n\r\n\t\t\t// breaks later\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\t$iter.each(this.axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\t\tif (axisBreak.breakSize > 0) {\r\n\t\t\t\t\tlet timeUnit: TimeUnit = axisBreak.gridInterval.timeUnit;\r\n\t\t\t\t\tlet intervalCount: number = axisBreak.gridInterval.count;\r\n\r\n\t\t\t\t\t// only add grid if gap is bigger then minGridDistance\r\n\t\t\t\t\tif ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer.minGridDistance * 4) {\r\n\t\t\t\t\t\tlet timestamp: number = axisBreak.gridDate.getTime();\r\n\r\n\t\t\t\t\t\tlet prevGridDate;\r\n\t\t\t\t\t\tlet count: number = 0;\r\n\t\t\t\t\t\twhile (timestamp <= axisBreak.adjustedMax) {\r\n\t\t\t\t\t\t\tlet date: Date = $time.copy(axisBreak.gridDate);\r\n\t\t\t\t\t\t\ttimestamp = $time.add(date, timeUnit, intervalCount * count).getTime();\r\n\t\t\t\t\t\t\tcount++;\r\n\t\t\t\t\t\t\tif (timestamp > axisBreak.adjustedStartValue && timestamp < axisBreak.adjustedEndValue) {\r\n\t\t\t\t\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\t\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount);\r\n\r\n\t\t\t\t\t\t\t\tlet format: string = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\t\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit)) {\r\n\t\t\t\t\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tlet text: string = this.dateFormatter.format(date, format);\r\n\r\n\t\t\t\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\t\t\t\t\t//this.processDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\t\t\tdataItem.axisBreak = axisBreak;\r\n\t\t\t\t\t\t\t\taxisBreak.dataItems.moveValue(dataItem);\r\n\r\n\t\t\t\t\t\t\t\tdataItem.date = date;\r\n\t\t\t\t\t\t\t\tdataItem.endDate = endDate;\r\n\t\t\t\t\t\t\t\tdataItem.text = text;\r\n\t\t\t\t\t\t\t\tprevGridDate = date;\r\n\t\t\t\t\t\t\t\tthis.validateDataElement(dataItem);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {DateAxisDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//super.validateDataElement(dataItem);\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\tlet timestamp = dataItem.value;\r\n\t\t\tlet endTimestamp = dataItem.endValue;\r\n\r\n\t\t\tif (!$type.isNumber(endTimestamp)) {\r\n\t\t\t\tendTimestamp = timestamp;\r\n\t\t\t}\r\n\r\n\t\t\tlet position: number = this.valueToPosition(timestamp);\r\n\t\t\tlet endPosition: number = this.valueToPosition(endTimestamp);\r\n\t\t\tlet fillEndPosition = endPosition;\r\n\r\n\t\t\tif (!dataItem.isRange && this._gridInterval.count > 1) {\r\n\t\t\t\tendPosition = position + (endPosition - position) / this._gridInterval.count;\r\n\t\t\t}\r\n\r\n\t\t\tdataItem.position = position;\r\n\r\n\t\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\t\tif (tick && !tick.disabled) {\r\n\t\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet grid: Grid = dataItem.grid;\r\n\t\t\tif (grid && !grid.disabled) {\r\n\t\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\t\tif (fill && !fill.disabled) {\r\n\t\t\t\trenderer.updateFillElement(fill, position, fillEndPosition);\r\n\t\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\t\tthis.fillRule(dataItem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\t\tif (mask) {\r\n\t\t\t\trenderer.updateFillElement(mask, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet label: AxisLabel = dataItem.label;\r\n\t\t\tif (label && !label.disabled) {\r\n\t\t\t\tlet location = label.location;\r\n\r\n\t\t\t\tif (location == 0) {\r\n\t\t\t\t\tif (this._gridInterval.count == 1 && this._gridInterval.timeUnit != \"week\" && !dataItem.isRange) {\r\n\t\t\t\t\t\tlocation = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlocation = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trenderer.updateLabelElement(label, position, endPosition, location);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A duration in milliseconds of the `baseInterval`.\r\n\t *\r\n\t * @return {number} Duration (ms)\r\n\t */\r\n\tpublic get baseDuration(): number {\r\n\t\treturn $time.getDuration(this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts min/max values.\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description (review)\r\n\t * @param {number} min Min timestamp\r\n\t * @param {number} max Max timestamp\r\n\t * @return {IMinMaxStep} Adjusted min/max step\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number): IMinMaxStep {\r\n\t\treturn { min: min, max: max, step: this.baseDuration };\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the minimum timestamp as per cell start location.\r\n\t *\r\n\t * @param {number} value Value\r\n\t * @return {number} Adjusted value\r\n\t */\r\n\tprotected fixMin(value: number) {\r\n\t\treturn $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count).getTime() + this.baseDuration * this.startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the maximum timestamp as per cell start location.\r\n\t *\r\n\t * @param {number} value Value\r\n\t * @return {number} Adjusted value\r\n\t */\r\n\tprotected fixMax(value: number) {\r\n\t\treturn $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count).getTime() + this.baseDuration * this.endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [chooseInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description\r\n\t * @param {number} index [description]\r\n\t * @param {number} duration [description]\r\n\t * @param {number} gridCount [description]\r\n\t * @return {ITimeInterval} [description]\r\n\t */\r\n\tpublic chooseInterval(index: number, duration: number, gridCount: number): ITimeInterval {\r\n\t\tlet gridIntervals: List = this.gridIntervals;\r\n\r\n\t\tlet gridInterval: ITimeInterval = gridIntervals.getIndex(index);\r\n\r\n\t\tlet intervalDuration: number = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tlet lastIndex: number = gridIntervals.length - 1;\r\n\t\tif (index >= lastIndex) {\r\n\t\t\treturn { ...gridIntervals.getIndex(lastIndex) };\r\n\t\t}\r\n\r\n\t\tlet count: number = Math.ceil(duration / intervalDuration);\r\n\r\n\t\tif (duration < intervalDuration && index > 0) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index - 1) };\r\n\t\t}\r\n\r\n\t\tif (count <= gridCount) {\r\n\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t} else {\r\n\t\t\tif (index + 1 < gridIntervals.length) {\r\n\t\t\t\treturn this.chooseInterval(index + 1, duration, gridCount);\r\n\t\t\t} else {\r\n\t\t\t\treturn { ...gridIntervals.getIndex(index) };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DateFormatter]].\r\n\t *\r\n\t * @param {number} value Source value\r\n\t * @return {string} Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number): string {\r\n\t\treturn this.dateFormatter.format(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a Date to an asbolute pixel position within Axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t * @return {number} Position (px)\r\n\t */\r\n\tpublic dateToPosition(date: Date): number {\r\n\t\treturn this.valueToPosition(date.getTime());\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a numeric timestamp or a `Date` to a relative position on axis.\r\n\t *\r\n\t * @param {Date | number} date Date or a timestamp\r\n\t * @return {number} Relative position\r\n\t */\r\n\tpublic anyToPosition(date: Date | number): number {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPosition(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPosition(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts date to orientation point (x, y, angle) on axis\r\n\t *\r\n\t * @param {Date} date Date\r\n\t * @return {IOrientationPoint} IOrientationPoint\r\n\t */\r\n\tpublic dateToPoint(date: Date): IOrientationPoint {\r\n\t\tlet position = this.dateToPosition(date);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a numeric value to orientation (x, y, angle) point on axis\r\n\t *\r\n\t * @param {number} value Value\r\n\t * @return {IOrientationPoint} Orientation point\r\n\t */\r\n\tpublic anyToPoint(date: Date | number): IOrientationPoint {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPoint(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPoint(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts pixel position within Axis to a corresponding Date.\r\n\t *\r\n\t * @param {number} position Position (px)\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic positionToDate(position: number): Date {\r\n\t\treturn new Date(this.positionToValue(position));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the X coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} X coordinate (px)\r\n\t */\r\n\tpublic getX(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\t//let stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value)).x;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the Y coordinate for series' data item's value.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @return {number} Y coordinate (px)\r\n\t */\r\n\tpublic getY(dataItem: XYSeriesDataItem, key: string, location?: number): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.renderer.positionToPoint(this.valueToPosition(value + stack)).y;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {string} key Data field to get value from\r\n\t * @param {number} location Location (0-1)\r\n\t * @param {string} stackKey Stack ID\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(stackKey, \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(this.valueToPosition(value + stack));\r\n\t}\r\n\r\n\t/**\r\n\t * [getTimeByLocation description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {XYSeriesDataItem} dataItem [description]\r\n\t * @param {string} key [description]\r\n\t * @param {number} location [description]\r\n\t * @return {number} [description]\r\n\t */\r\n\tprotected getTimeByLocation(dataItem: XYSeriesDataItem, key: string, location: number): number {\r\n\t\tif (!$type.hasValue(key)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = dataItem.workingLocations[key];\r\n\r\n\t\t\tif (!$type.isNumber(location)) {\r\n\t\t\t\tlocation = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet startTime: number = dataItem.values[key][\"open\"];\r\n\t\tlet endTime: number = dataItem.values[key][\"close\"];\r\n\r\n\t\tif ($type.isNumber(startTime) && $type.isNumber(endTime)) {\r\n\t\t\treturn startTime + (endTime - startTime) * location;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes a related series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic processSeriesDataItem(dataItem: XYSeriesDataItem, axisLetter?: string): void {\r\n\r\n\t\tlet series = dataItem.component;\r\n\t\tlet time: number;\r\n\r\n\t\tlet date: Date = (dataItem)[\"date\" + axisLetter];\r\n\t\tif (date) {\r\n\t\t\ttime = date.getTime();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet openDate: Date = (dataItem)[\"openDate\" + axisLetter];\r\n\t\tlet prevSeriesTime: number = this._prevSeriesTime;\r\n\r\n\r\n\t\tlet openTime: number;\r\n\t\tif (openDate) {\r\n\t\t\topenTime = openDate.getTime();\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(openTime)) {\r\n\t\t\tlet difference = Math.abs(time - openTime);\r\n\r\n\t\t\tif (this._minDifference[series.uid] > difference) {\r\n\t\t\t\tthis._minDifference[series.uid] = difference;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet differece: number = time - prevSeriesTime;\r\n\r\n\t\tif (differece > 0) {\r\n\t\t\tif (this._minDifference[series.uid] > differece) {\r\n\t\t\t\tthis._minDifference[series.uid] = differece;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._prevSeriesTime = time;\r\n\t}\r\n\r\n\t/**\r\n\t * [updateAxisBySeries description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic updateAxisBySeries() {\r\n\t\tsuper.updateAxisBySeries();\r\n\r\n\t\tlet baseInterval: ITimeInterval = this.chooseInterval(0, this.minDifference, 1);\r\n\t\t// handle short months\r\n\t\tif (this.minDifference >= $time.getDuration(\"day\", 27) && baseInterval.timeUnit == \"week\") {\r\n\t\t\tbaseInterval.timeUnit = \"month\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\t\t// handle daylight saving\r\n\t\tif (this.minDifference >= $time.getDuration(\"hour\", 23) && baseInterval.timeUnit == \"hour\") {\r\n\t\t\tbaseInterval.timeUnit = \"day\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\t//baseInterval.count = 1; // good\r\n\t\tthis._baseIntervalReal = baseInterval;\r\n\t\t// no need to invalidate\r\n\t}\r\n\r\n\t/**\r\n\t * A base interval (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * For example, if you have a data set that has a data point every 5 minutes,\r\n\t * you may want to set this to `{ timeUnit: \"minute\", count: 5 }`.\r\n\t *\r\n\t * If not set, the Axis will try to determine the setting by its own, looking\r\n\t * at actual data.\r\n\t *\r\n\t * @param {ITimeInterval} timeInterval base interval\r\n\t */\r\n\tpublic set baseInterval(timeInterval: ITimeInterval) {\r\n\t\tthis._baseInterval = timeInterval;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {ITimeInterval} Base interval\r\n\t */\r\n\tpublic get baseInterval(): ITimeInterval {\r\n\t\tif (this._baseInterval) {\r\n\t\t\treturn this._baseInterval;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._baseIntervalReal;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * An \"empty\" period is considered a stretch of time in the length of current\r\n\t * `baseInterval` without a single data point in it.\r\n\t *\r\n\t * For each such empty period, axis will automatically create an\r\n\t * [[AxisBreak]]. By default they will be invisible. You can still configure\r\n\t * them by accessing `axis.breaks.template`.\r\n\t *\r\n\t * [More info about breaks](https://www.amcharts.com/docs/v4/concepts/axes/#Breaks).\r\n\t *\r\n\t * Important notes:\r\n\t * * If you set this property to `true`, you can not add your custom axis breaks to this axis anymore.\r\n\t * * Using this feature affects performance. Use only if you need it.\r\n\t * * Setting this to `true` will reset appearance of breaks. If you want to modify appearance, do it *after* you set `skipEmptyPeriods`.\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value Remove empty stretches of time?\r\n\t */\r\n\tpublic set skipEmptyPeriods(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"skipEmptyPeriods\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\r\n\t\tif (value) {\r\n\t\t\tlet breakTemplate = this.axisBreaks.template;\r\n\t\t\tbreakTemplate.startLine.disabled = true;\r\n\t\t\tbreakTemplate.endLine.disabled = true;\r\n\t\t\tbreakTemplate.fillShape.disabled = true;\r\n\t\t\tbreakTemplate.breakSize = 0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Remove empty stretches of time?\r\n\t */\r\n\tpublic get skipEmptyPeriods(): boolean {\r\n\t\treturn this.getPropertyValue(\"skipEmptyPeriods\");\r\n\t}\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @param {string} value Date format\r\n\t */\r\n\tpublic set tooltipDateFormat(value: string) {\r\n\t\tthis.setPropertyValue(\"tooltipDateFormat\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Date format\r\n\t */\r\n\tpublic get tooltipDateFormat(): string {\r\n\t\treturn this.getPropertyValue(\"tooltipDateFormat\");\r\n\t}\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Use different format for period beginning?\r\n\t */\r\n\tpublic set markUnitChange(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"markUnitChange\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Use different format for period beginning?\r\n\t */\r\n\tpublic get markUnitChange(): boolean {\r\n\t\treturn this.getPropertyValue(\"markUnitChange\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a tooltip, based on specific relative position\r\n\t * within axis.\r\n\t *\r\n\t * The label will be formatted as per [[DateFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Position\r\n\t * @return {string} Label (formatted date)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet text: string;\r\n\t\tlet date = this.positionToDate(position);\r\n\t\tdate = $time.round(date, this.baseInterval.timeUnit, this.baseInterval.count);\r\n\r\n\t\tif ($type.hasValue(this.tooltipDateFormat)) {\r\n\t\t\ttext = this.dateFormatter.format(date, this.tooltipDateFormat);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet dateFormat = this.dateFormats.getKey(this.baseInterval.timeUnit);\r\n\t\t\tif (dateFormat) {\r\n\t\t\t\ttext = this.dateFormatter.format(date, dateFormat);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttext = this.getPositionLabel(position);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.adapter.apply(\"getTooltipText\", text);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position within axis and adjust it to a specific position within base interval. (cell)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Source position\r\n\t * @param {AxisItemLocation} location Location in the cell\r\n\t * @return {number} Adjusted position\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation): number {\r\n\t\tlet baseInterval = this.baseInterval;\r\n\t\tlet timeUnit = baseInterval.timeUnit;\r\n\t\tlet count = baseInterval.count;\r\n\r\n\t\tlet date: Date = this.positionToDate(position);\r\n\r\n\t\t$time.round(date, timeUnit, count);\r\n\r\n\t\tif (location > 0) {\r\n\t\t\t$time.add(date, timeUnit, location * count);\r\n\t\t}\r\n\r\n\t\tif (this.isInBreak(date.getTime())) {\r\n\t\t\twhile (date.getTime() < this.max) {\r\n\t\t\t\t$time.add(date, timeUnit, count);\r\n\t\t\t\tif (!this.isInBreak(date.getTime())) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.dateToPosition(date);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the start of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} position Relative position\r\n\t * @return {number} Cell start relative position\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the end of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} position Relative position\r\n\t * @return {number} Cell end relative position\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t\t//return this.dateToPosition($time.add(this.positionToDate(this.roundPosition(position, 1)), this.baseInterval.timeUnit, this.baseInterval.count));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Series data item that corresponds to the specific pixel position\r\n\t * of the Axis.\r\n\t *\r\n\t * If `findNearest` (third parameter) is set to `true`, the method will try\r\n\t * to locate nearest available data item if none is found directly under\r\n\t * `position`.\r\n\t *\r\n\t * @param {XYSeries} series Series\r\n\t * @param {number} position Position (px)\r\n\t * @param {boolean} findNearest Should axis try to find nearest tooltip if there is no data item at exact position\r\n\t * @return {XYSeriesDataItem} Data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, findNearest?: boolean): XYSeriesDataItem {\r\n\t\tlet value: number = this.positionToValue(position);\r\n\t\tlet date: Date = $time.round(new Date(value), this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\tlet dataItem = series.dataItemsByAxis.getKey(this.uid).getKey(date.getTime().toString());\r\n\r\n\t\t// todo: alternatively we can find closiest here\r\n\t\tif (!dataItem && findNearest) {\r\n\t\t\t// to the left\r\n\t\t\tlet leftCount = 0;\r\n\t\t\tlet leftDataItem: XYSeriesDataItem;\r\n\t\t\tlet leftDate = new Date(date.getTime());\r\n\r\n\t\t\twhile (leftDate.getTime() > this.minZoomed) {\r\n\t\t\t\tleftDate = $time.add(leftDate, this.baseInterval.timeUnit, -this.baseInterval.count);\r\n\t\t\t\tleftDataItem = series.dataItemsByAxis.getKey(this.uid).getKey(leftDate.getTime().toString());\r\n\t\t\t\tif (leftDataItem) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tleftCount++;\r\n\t\t\t\tif (leftCount > 5000) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet rightCount = 0;\r\n\t\t\tlet rightDataItem: XYSeriesDataItem;\r\n\t\t\tlet rightDate = new Date(date.getTime());\r\n\t\t\twhile (rightDate.getTime() < this.maxZoomed) {\r\n\t\t\t\trightDate = $time.add(rightDate, this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\t\t\trightDataItem = series.dataItemsByAxis.getKey(this.uid).getKey(rightDate.getTime().toString());\r\n\t\t\t\tif (rightDataItem) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\trightCount++;\r\n\t\t\t\tif (rightCount > 5000) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (leftDataItem && !rightDataItem) {\r\n\t\t\t\treturn leftDataItem;\r\n\t\t\t}\r\n\t\t\telse if (!leftDataItem && rightDataItem) {\r\n\t\t\t\treturn rightDataItem;\r\n\t\t\t}\r\n\t\t\telse if (leftDataItem && rightDataItem) {\r\n\t\t\t\tif (leftCount < rightCount) {\r\n\t\t\t\t\treturn leftDataItem;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn rightDataItem;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn dataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a formatted date based on position in axis scale.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param {number} position Relative position on axis (0-1)\r\n\t * @return {string} Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\t// @todo Better format recognition\r\n\t\tlet date = this.positionToDate(position);\r\n\t\treturn this.dateFormatter.format(date, this.getCurrentLabelFormat());\r\n\t}\r\n\r\n\t/**\r\n\t * Returns label date format based on currently used time units\r\n\t *\r\n\t * @return {string} Format\r\n\t */\r\n\tprotected getCurrentLabelFormat(): string {\r\n\t\treturn this.dateFormats.getKey(this._gridInterval ? this._gridInterval.timeUnit : \"day\");\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes an Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\t\tlet renderer = this.renderer;\r\n\t\tif (renderer) {\r\n\t\t\t// Set defaults\r\n\t\t\trenderer.ticks.template.location = 0;\r\n\t\t\trenderer.grid.template.location = 0;\r\n\t\t\trenderer.labels.template.location = 0;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {IPoint} Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\treturn { x: 0, y: 0 };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Zooms axis to specific Dates.\r\n\t *\r\n\t * @param {Date} startDate Start date\r\n\t * @param {Date} endValue End date\r\n\t * @param {boolean} skipRangeEvent Do not invoke events\r\n\t * @param {boolean} instantly Do not play zoom animations\r\n\t */\r\n\tpublic zoomToDates(startDate: Date, endDate: Date, skipRangeEvent?: boolean, instantly?: boolean): void {\r\n\t\tstartDate = this.dateFormatter.parse(startDate);\r\n\t\tendDate = this.dateFormatter.parse(endDate);\r\n\t\tthis.zoomToValues(startDate.getTime(), endDate.getTime(), skipRangeEvent, instantly);\r\n\t}\r\n\r\n\t/**\r\n\t * Adds `baseInterval` to \"as is\" fields.\r\n\t *\r\n\t * @param {string} field Field name\r\n\t * @return {boolean} Assign as is?\r\n\t */\r\n\tprotected asIs(field: string): boolean {\r\n\t\treturn field == \"baseInterval\" || super.asIs(field);\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param {this} source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.dateFormats = source.dateFormats;\r\n\t\tthis.periodChangeDateFormats = source.periodChangeDateFormats;\r\n\t\tif (source[\"_baseInterval\"]) {\r\n\t\t\tthis.baseInterval = source.baseInterval;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @param {boolean} local or global position\r\n\t */\r\n\tpublic showTooltipAtPosition(position: number, local?: boolean) {\r\n\r\n\t\tif (!local) {\r\n\t\t\tposition = this.toAxisPosition(position);\r\n\t\t}\r\n\t\tif (this.snapTooltip) {\r\n\t\t\tlet actualDate = $time.round(this.positionToDate(position), this.baseInterval.timeUnit, 1);\r\n\r\n\t\t\tlet actualTime = actualDate.getTime();\r\n\t\t\tlet closestDate: Date;\r\n\r\n\t\t\tthis.series.each((series) => {\r\n\r\n\t\t\t\tlet dataItem = this.getSeriesDataItem(series, position, true);\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet date: Date;\r\n\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\tdate = dataItem.dateX;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\tdate = dataItem.dateY;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!closestDate) {\r\n\t\t\t\t\t\tclosestDate = date;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tif (Math.abs(closestDate.getTime() - actualTime) > Math.abs(date.getTime() - actualTime)) {\r\n\t\t\t\t\t\t\tclosestDate = date;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tif (closestDate) {\r\n\t\t\t\tclosestDate = $time.round(new Date(closestDate.getTime()), this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t\t\t\tclosestDate = new Date(closestDate.getTime() + this.baseDuration / 2);\r\n\t\t\t\tposition = this.dateToPosition(closestDate);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.showTooltipAtPosition(position, true);\r\n\r\n\t\tlet globalPosition = this.toGlobalPosition(position);\r\n\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (series.xAxis == this) {\r\n\t\t\t\tseries.showTooltipAtPosition(globalPosition, undefined);\r\n\t\t\t}\r\n\t\t\tif (series.yAxis == this) {\r\n\t\t\t\tseries.showTooltipAtPosition(undefined, globalPosition);\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"DateAxis\"] = DateAxis;\r\nregistry.registeredClasses[\"DateAxisDataItem\"] = DateAxisDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/DateAxis.ts","/**\r\n * XY series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Series, SeriesDataItem, ISeriesProperties, ISeriesDataFields, ISeriesAdapters, ISeriesEvents } from \"./Series\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { CalculatedValue } from \"../../core/Component\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYSeriesDataItem extends SeriesDataItem {\r\n\r\n\t/**\r\n\t * [_minX description]\r\n\t *\r\n\t * @todo Descripion\r\n\t * @type {number}\r\n\t */\r\n\tprotected _minX: number;\r\n\r\n\t/**\r\n\t * [_maxX description]\r\n\t *\r\n\t * @todo Descripion\r\n\t * @type {number}\r\n\t */\r\n\tprotected _maxX: number;\r\n\r\n\t/**\r\n\t * [_minY description]\r\n\t *\r\n\t * @todo Descripion\r\n\t * @type {number}\r\n\t */\r\n\tprotected _minY: number;\r\n\r\n\t/**\r\n\t * [_maxY description]\r\n\t *\r\n\t * @todo Descripion\r\n\t * @type {number}\r\n\t */\r\n\tprotected _maxY: number;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {XYSeries}\r\n\t */\r\n\tpublic _component!: XYSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYSeriesDataItem\";\r\n\r\n\t\tthis.values.valueX = { stack: 0 };\r\n\t\tthis.values.valueY = { stack: 0 };\r\n\t\tthis.values.openValueX = {};\r\n\t\tthis.values.openValueY = {};\r\n\r\n\t\tthis.values.dateX = {};\r\n\t\tthis.values.dateY = {};\r\n\t\tthis.values.openDateX = {};\r\n\t\tthis.values.openDateY = {};\r\n\r\n\t\tthis.setLocation(\"dateX\", 0.5, 0);\r\n\t\tthis.setLocation(\"dateY\", 0.5, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0.5, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0.5, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value on X value axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set valueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get valueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value on Y value axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set valueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get valueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's date value on X date-based axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set dateX(date: Date) {\r\n\t\tthis.setDate(\"dateX\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get dateX(): Date {\r\n\t\treturn this.getDate(\"dateX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's date value on Y date-based axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set dateY(date: Date) {\r\n\t\tthis.setDate(\"dateY\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get dateY(): Date {\r\n\t\treturn this.getDate(\"dateY\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's category on X category axis.\r\n\t *\r\n\t * @param {string} category Category\r\n\t */\r\n\tpublic set categoryX(category: string) {\r\n\t\tthis.setCategory(\"categoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get categoryX(): string {\r\n\t\treturn this.categories.categoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's category on Y category axis.\r\n\t *\r\n\t * @param {string} category Category\r\n\t */\r\n\tpublic set categoryY(category: string) {\r\n\t\tthis.setCategory(\"categoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get categoryY(): string {\r\n\t\treturn this.categories.categoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open numeric value on X value axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set openValueX(value: number) {\r\n\t\tthis.setValue(\"openValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get openValueX(): number {\r\n\t\treturn this.values.openValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open numeric value on Y value axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set openValueY(value: number) {\r\n\t\tthis.setValue(\"openValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get openValueY(): number {\r\n\t\treturn this.values.openValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open date value on X date-based axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set openDateX(date: Date) {\r\n\t\tthis.setDate(\"openDateX\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get openDateX(): Date {\r\n\t\treturn this.getDate(\"openDateX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open date value on Y date-based axis.\r\n\t *\r\n\t * @param {Date} date Date\r\n\t */\r\n\tpublic set openDateY(date: Date) {\r\n\t\tthis.setDate(\"openDateY\", date);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Date} Date\r\n\t */\r\n\tpublic get openDateY(): Date {\r\n\t\treturn this.getDate(\"openDateY\");\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on X category axis.\r\n\t *\r\n\t * @param {string} category Category\r\n\t */\r\n\tpublic set openCategoryX(category: string) {\r\n\t\tthis.setProperty(\"openCategoryX\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get openCategoryX(): string {\r\n\t\treturn this.categories.openCategoryX;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's open category on Y category axis.\r\n\t *\r\n\t * @param {string} category Category\r\n\t */\r\n\tpublic set openCategoryY(category: string) {\r\n\t\tthis.setProperty(\"openCategoryY\", category);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Category\r\n\t */\r\n\tpublic get openCategoryY(): string {\r\n\t\treturn this.categories.openCategoryY;\r\n\t}\r\n\r\n\t/**\r\n\t * Return smallest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {string[]} fields Fields to check in\r\n\t * @param {boolean} working Include working (temporary) values\r\n\t * @param {number} stackValue If item is in a stack, the value item starts as\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic getMin(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet min: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value < min || !$type.isNumber(min)) {\r\n\t\t\t\tmin = value;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn min;\r\n\t\t//}\r\n\t}\r\n\r\n\t/**\r\n\t * Return biggest value out of all item's value fields.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {string[]} fields Fields to check in\r\n\t * @param {boolean} working Include working (temporary) values\r\n\t * @param {number} stackValue If item is in a stack, the value item starts as\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic getMax(fields: string[], working?: boolean, stackValue?: number): number {\r\n\t\t//if (this.visible) { // dumped because of non smooth zooming\r\n\t\tlet max: number;\r\n\r\n\t\tif (!$type.isNumber(stackValue)) {\r\n\t\t\tstackValue = 0;\r\n\t\t}\r\n\r\n\t\t$array.each(fields, (field) => {\r\n\t\t\tlet value: number;\r\n\r\n\t\t\tif (working) {\r\n\t\t\t\tvalue = this.getWorkingValue(field);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = this.getValue(field);\r\n\t\t\t}\r\n\r\n\t\t\tvalue += stackValue;\r\n\r\n\t\t\tif (value > max || !$type.isNumber(max)) {\r\n\t\t\t\tmax = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn max;\r\n\t\t//}\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * Defines property set for a [[XYSeries]] tooltip event that contains information about dataItem\r\n *\r\n * @type {Object}\r\n */\r\nexport type XYSeriesTooltipEvent = {\r\n\r\n\t/**\r\n\t * Shift in coordinates after dragging.\r\n\t *\r\n\t * @type {XYSeriesDataItem}\r\n\t */\r\n\tdataItem: XYSeriesDataItem;\r\n};\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesDataFields extends ISeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds category for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds date for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdateY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for horizontal\r\n\t * axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenValueX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open numeric value for vertical\r\n\t * axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenValueY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenCategoryX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open category for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenCategoryY?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for horizontal axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenDateX?: string;\r\n\r\n\t/**\r\n\t * Name of the field in data that holds open date for vertical axis.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\topenDateY?: string;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis value for the\r\n\t * item.\r\n\t *\r\n\t * @type {CalculatedValue}\r\n\t */\r\n\tvalueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis value for the\r\n\t * item.\r\n\t *\r\n\t * @type {CalculatedValue}\r\n\t */\r\n\tvalueYShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a horizontal axis open value for\r\n\t * the item.\r\n\t *\r\n\t * @type {CalculatedValue}\r\n\t */\r\n\topenValueXShow?: CalculatedValue;\r\n\r\n\t/**\r\n\t * Which calculated field to use to use as a vertical axis open value for\r\n\t * the item.\r\n\t *\r\n\t * @type {CalculatedValue}\r\n\t */\r\n\topenValueYShow?: CalculatedValue;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesProperties extends ISeriesProperties {\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tstacked?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the current cursor position\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t */\r\n\tcursorTooltipEnabled?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYSeries]].\r\n */\r\nexport interface IXYSeriesEvents extends ISeriesEvents {\r\n\t/**\r\n\t * Invoked when series tooltip was shown on some particular data item\r\n\t */\r\n\ttooltipshownat: XYSeriesTooltipEvent;\r\n}\r\n\r\n/**\r\n * Defines adapters for [[XYSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYSeriesAdapters extends ISeriesAdapters, IXYSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for [[XYChart]].\r\n *\r\n * @see {@link IXYSeriesEvents} for a list of available Events\r\n * @see {@link IXYSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class XYSeries extends Series {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IXYSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IXYSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYSeriesEvents}\r\n\t */\r\n\tpublic _events!: IXYSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {XYSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: XYSeriesDataItem;\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {XYChart}\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t *\r\n\t * @type {Axis}\r\n\t */\r\n\tprotected _baseAxis: Axis;\r\n\r\n\t/**\r\n\t * Total data item count.\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tprotected _count: Dictionary;\r\n\r\n\t/**\r\n\t * Data item count in current selection.\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tprotected _scount: Dictionary;\r\n\r\n\t/**\r\n\t * [_xField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _xField: string;\r\n\r\n\t/**\r\n\t * [_yField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _yField: string;\r\n\r\n\t/**\r\n\t * [_xOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _xOpenField: string;\r\n\r\n\t/**\r\n\t * [_yOpenField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _yOpenField: string;\r\n\r\n\t/**\r\n\t * [_tooltipXField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _tooltipXField: string;\r\n\r\n\t/**\r\n\t * [_tooltipYField description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {string}\r\n\t */\r\n\tprotected _tooltipYField: string;\r\n\r\n\t/**\r\n\t * [_xValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {Array}\r\n\t */\r\n\tprotected _xValueFields: Array = [];\r\n\r\n\t/**\r\n\t * [_yValueFields description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {Array}\r\n\t */\r\n\tprotected _yValueFields: Array = [];\r\n\r\n\t/**\r\n\t * Series which is stacked on top of this series, if any.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {XYSeries}\r\n\t */\r\n\tpublic stackedSeries: XYSeries;\r\n\r\n\r\n\t/**\r\n\t * dataitem of previously shown tooltip, used to avoid multiple tooltipshownat dispatches\r\n\t * @ignore\r\n\t */\r\n\tprotected _prevTooltipDataItem: XYSeriesDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYSeries\";\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.cursorTooltipEnabled = true;\r\n\r\n\t\tthis.mainContainer.mask = new Sprite();\r\n\t\tthis.mainContainer.mask.setElement(this.paper.add(\"path\"));\r\n\r\n\t\tthis.stacked = false;\r\n\t\tthis.snapTooltip = false;\r\n\r\n\t\tthis.tooltip.pointerOrientation = \"horizontal\";\r\n\r\n\t\tthis.tooltip.events.on(\"hidden\", () => {\r\n\t\t\tthis.returnBulletDefaultState();\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {XYSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new XYSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate() {\r\n\t\tthis._tmin.clear();\r\n\t\tthis._tmax.clear();\r\n\r\n\t\tthis._smin.clear();\r\n\t\tthis._smax.clear();\r\n\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tthis.xAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tthis.yAxis.seriesDataChangeUpdate(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the series' data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tthis.defineFields();\r\n\r\n\t\tif (this.data.length > 0) {\r\n\t\t\tthis.dataChangeUpdate();\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tthis.updateItemReaderText();\r\n\r\n\t\tif (!$type.hasValue(this.dataFields[this._xField]) || !$type.hasValue(this.dataFields[this._yField])) {\r\n\t\t\tthrow Error(\"Data fields for series \\\"\" + (this.name ? this.name : this.uid) + \"\\\" are not properly defined.\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param {XYSeriesDataItem} dataItem Data item\r\n\t * @param {Object} dataContext Raw data\r\n\t * @param {number} index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\ttry {\r\n\t\t\tsuper.processDataItem(dataItem, dataContext);\r\n\r\n\t\t\tdataItem.events.disable();\r\n\t\t\tthis.xAxis.processSeriesDataItem(dataItem, \"X\");\r\n\t\t\tthis.yAxis.processSeriesDataItem(dataItem, \"Y\");\r\n\r\n\t\t\tdataItem.events.enable();\r\n\r\n\t\t\tthis.setInitialWorkingValues(dataItem);\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis._chart.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t * @param {number} index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tif (this.xAxis) {\r\n\t\t\tlet dataItemsX = this.dataItemsByAxis.getKey(this.xAxis.uid);\r\n\t\t\tif (dataItemsX) {\r\n\t\t\t\tdataItemsX.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (this.yAxis) {\r\n\t\t\tlet dataItemsY = this.dataItemsByAxis.getKey(this.yAxis.uid);\r\n\t\t\tif (dataItemsY) {\r\n\t\t\t\tdataItemsY.clear();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\tlet xAxisFieldName: string = xAxis.axisFieldName;\r\n\t\tlet xField: $type.Keyof = <$type.Keyof>(xAxisFieldName + \"X\");\r\n\t\tlet xOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(xAxisFieldName) + \"X\");\r\n\r\n\t\tlet yAxisFieldName: string = yAxis.axisFieldName;\r\n\t\tlet yField: $type.Keyof = <$type.Keyof>(yAxisFieldName + \"Y\");\r\n\t\tlet yOpenField: $type.Keyof = <$type.Keyof>(\"open\" + $utils.capitalize(yAxisFieldName) + \"Y\");\r\n\r\n\t\tthis._xField = xField;\r\n\t\tthis._yField = yField;\r\n\r\n\t\tif (this.dataFields[xOpenField]) {\r\n\t\t\tthis._xOpenField = xOpenField;\r\n\t\t}\r\n\r\n\t\tif (this.dataFields[yOpenField]) {\r\n\t\t\tthis._yOpenField = yOpenField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[yOpenField] && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif (!this.dataFields[xOpenField] && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.xAxis) {\r\n\t\t\tthis._xOpenField = xField;\r\n\t\t}\r\n\r\n\t\tif (this.stacked && this.baseAxis == this.yAxis) {\r\n\t\t\tthis._yOpenField = yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\t\t\tif (!this._yOpenField) {\r\n\t\t\t\tthis._yOpenField = yField;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._xValueFields = [];\r\n\t\tthis._yValueFields = [];\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xOpenField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yOpenField);\r\n\t}\r\n\r\n\t/**\r\n\t * [axis description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {Axis} axis Axis\r\n\t * @param {Array} fields Fields (?)\r\n\t * @param {Key} field Field\r\n\t */\r\n\tprotected addValueField(axis: Axis, fields: Array, field: Key): void {\r\n\t\tif (axis instanceof ValueAxis) {\r\n\t\t\tif ($type.hasValue(this.dataFields[field]) && fields.indexOf(field) == -1) {\r\n\t\t\t\tfields.push(field);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets category field from the category axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param {Key} field Field\r\n\t * @param {CategoryAxis} axis Axis\r\n\t */\r\n\tprotected setCategoryAxisField(field: Key, axis: CategoryAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.category;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets date field from the date axis.\r\n\t *\r\n\t * User might set field for category axis only, but not for series. In such\r\n\t * case, we take field value from axis and set it for series.\r\n\t *\r\n\t * @param {Key} field Field\r\n\t * @param {DateAxis} axis Axis\r\n\t */\r\n\tprotected setDateAxisField(field: Key, axis: DateAxis): void {\r\n\t\tif (!$type.hasValue(this.dataFields[field])) {\r\n\t\t\tthis.dataFields[field] = axis.dataFields.date;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs after-draw tasks, e.g. creates masks.\r\n\t */\r\n\tprotected afterDraw(): void {\r\n\t\tsuper.afterDraw();\r\n\t\tthis.createMask();\r\n\t}\r\n\r\n\t/**\r\n\t * Create a mask for the series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic createMask(): void {\r\n\t\t// this mask from which we cut out ranges. does not work well if ranges overlap.\r\n\t\tif (this.mainContainer.mask) {\r\n\t\t\tlet path: string = this.getMaskPath();\r\n\r\n\t\t\t// @todo: this approach won't work well on circluar or other non x/y axes\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\t\tif (range.axisFill.fillPath) {\r\n\t\t\t\t\trange.axisFill.validate();\r\n\t\t\t\t\tpath += range.axisFill.fillPath;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.mainContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return {string} SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\treturn $path.rectToPath({\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\twidth: this.xAxis.axisLength,\r\n\t\t\theight: this.yAxis.axisLength\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns axis data field to use.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic getAxisField(axis: Axis): string {\r\n\t\tif (axis == this.xAxis) {\r\n\t\t\treturn this.xField;\r\n\t\t}\r\n\t\tif (axis == this.yAxis) {\r\n\t\t\treturn this.yField;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\r\n\t\t// this helps date axis to check which baseInterval we should use\r\n\t\tthis.xAxis.updateAxisBySeries();\r\n\t\tthis.yAxis.updateAxisBySeries();\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tthis.xAxis.postProcessSeriesDataItems();\r\n\t\tthis.yAxis.postProcessSeriesDataItems();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data range.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataRange() {\r\n\t\tif (this.xAxis.dataRangeInvalid) {\r\n\t\t\tthis.xAxis.validateDataRange();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis.dataRangeInvalid) {\r\n\t\t\tthis.yAxis.validateDataRange();\r\n\t\t}\r\n\r\n\t\tsuper.validateDataRange();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tif (this.xAxis.invalid) {\r\n\t\t\tthis.xAxis.validate();\r\n\t\t}\r\n\r\n\t\tif (this.yAxis.invalid) {\r\n\t\t\tthis.yAxis.validate();\r\n\t\t}\r\n\r\n\t\tthis._showBullets = true;\r\n\t\tlet minBulletDistance: number = this.minBulletDistance;\r\n\t\tif ($type.isNumber(minBulletDistance)) {\r\n\t\t\tif (this.baseAxis.axisLength / (this.endIndex - this.startIndex) < minBulletDistance) {\r\n\t\t\t\tthis._showBullets = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * X axis the series is attached to.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._xAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._xAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._xAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._xAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.xAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no X axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xAxis = axis;\r\n\t\t\t}\r\n\t\t\treturn this._xAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Y axis the series is attached to.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tlet oldAxis = this._yAxis.get();\r\n\t\tif (oldAxis != axis) {\r\n\t\t\tif (oldAxis) {\r\n\t\t\t\tthis.dataItemsByAxis.removeKey(oldAxis.uid);\r\n\t\t\t\t// TODO why is this here ?\r\n\t\t\t\tthis._yAxis.dispose();\r\n\t\t\t\t// temp @todo: why it is not disposed?\r\n\t\t\t\toldAxis.series.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._yAxis.set(axis, axis.registerSeries(this));\r\n\r\n\t\t\tthis.dataItemsByAxis.setKey(axis.uid, new Dictionary());\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\tif (this.chart) {\r\n\t\t\tif (!this._yAxis.get()) {\r\n\t\t\t\tconst axis = this.chart.yAxes.getIndex(0);\r\n\r\n\t\t\t\tif (!axis) {\r\n\t\t\t\t\tthrow Error(\"There are no Y axes on chart.\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.yAxis = axis;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._yAxis.get();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * The main (base) axis.\r\n\t *\r\n\t * This is the axis that series fills will go to, or grow animations will\r\n\t * happen from.\r\n\t *\r\n\t * @param {Axis} value Axis\r\n\t */\r\n\tpublic set baseAxis(value: Axis) {\r\n\t\tif (this._baseAxis != value) {\r\n\t\t\tthis._baseAxis = value;\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Axis\r\n\t */\r\n\tpublic get baseAxis(): Axis {\r\n\t\tif (!this._baseAxis) {\r\n\t\t\tif (this.yAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof DateAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.yAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.yAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.xAxis instanceof CategoryAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._baseAxis) {\r\n\t\t\t\tthis._baseAxis = this.xAxis;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._baseAxis;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes values after data items' were added.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {OrderedListTemplate} dataItems Data items\r\n\t */\r\n\tpublic processValues(working: boolean): void {\r\n\t\t// todo: if this is stacked, ensure that series to which this one can be stacked are processed before.\r\n\t\tsuper.processValues(working);\r\n\r\n\t\tlet dataItems = this.dataItems;\r\n\r\n\t\tlet minX = Infinity;\r\n\t\tlet maxX = - Infinity;\r\n\r\n\t\tlet minY = Infinity;\r\n\t\tlet maxY = - Infinity;\r\n\r\n\t\tlet startIndex = this.startIndex;\r\n\t\tlet endIndex = this.endIndex;\r\n\r\n\t\tfor (let i = startIndex; i < endIndex; i++) {\r\n\t\t\tlet dataItem = dataItems.getIndex(i);\r\n\r\n\t\t\tthis.getStackValue(dataItem, working);\r\n\r\n\t\t\tlet stackX = dataItem.getValue(\"valueX\", \"stack\");\r\n\t\t\tlet stackY = dataItem.getValue(\"valueY\", \"stack\");\r\n\r\n\t\t\tminX = $math.min(dataItem.getMin(this._xValueFields, working, stackX), minX);\r\n\t\t\tminY = $math.min(dataItem.getMin(this._yValueFields, working, stackY), minY);\r\n\r\n\t\t\tmaxX = $math.max(dataItem.getMax(this._xValueFields, working, stackX), maxX);\r\n\t\t\tmaxY = $math.max(dataItem.getMax(this._yValueFields, working, stackY), maxY);\r\n\r\n\t\t\t// if it's stacked, pay attention to stack value\r\n\t\t\tif (this.stacked) {\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tminY = $math.min(minY, stackY);\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tminX = $math.min(minX, stackX);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// this is mainly for value axis to calculate total and perecent.total of each series category\r\n\t\tthis.xAxis.processSeriesDataItems();\r\n\t\tthis.yAxis.processSeriesDataItems();\r\n\r\n\t\tlet xAxisId: string = this.xAxis.uid;\r\n\t\tlet yAxisId: string = this.yAxis.uid;\r\n\r\n\t\tif (!working) {\r\n\t\t\tif (this._tmin.getKey(xAxisId) != minX || this._tmax.getKey(xAxisId) != maxX || this._tmin.getKey(yAxisId) != minY || this._tmax.getKey(yAxisId) != maxY) {\r\n\t\t\t\tthis._tmin.setKey(xAxisId, minX);\r\n\t\t\t\tthis._tmax.setKey(xAxisId, maxX);\r\n\t\t\t\tthis._tmin.setKey(yAxisId, minY);\r\n\t\t\t\tthis._tmax.setKey(yAxisId, maxY);\r\n\r\n\t\t\t\tif (this.stackedSeries) {\r\n\t\t\t\t\tthis.stackedSeries.processValues(false);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchImmediately(\"extremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._smin.getKey(xAxisId) != minX || this._smax.getKey(xAxisId) != maxX || this._smin.getKey(yAxisId) != minY || this._smax.getKey(yAxisId) != maxY) {\r\n\t\t\tthis._smin.setKey(xAxisId, minX);\r\n\t\t\tthis._smax.setKey(xAxisId, maxX);\r\n\t\t\tthis._smin.setKey(yAxisId, minY);\r\n\t\t\tthis._smax.setKey(yAxisId, maxY);\r\n\r\n\t\t\tif (this.appeared) {\r\n\t\t\t\tthis.dispatchImmediately(\"selectionextremeschanged\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides element's [[Tooltip]].\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t */\r\n\tpublic hideTooltip() {\r\n\t\tsuper.hideTooltip();\r\n\t\tthis.returnBulletDefaultState();\r\n\t\tthis._prevTooltipDataItem = undefined;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows series tooltip at specific position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} xPosition X\r\n\t * @param {number} yPosition Y\r\n\t */\r\n\tpublic showTooltipAtPosition(xPosition: number, yPosition: number): IPoint {\r\n\t\tif (this.cursorTooltipEnabled) {\r\n\t\t\tlet dataItem: this[\"_dataItem\"];\r\n\r\n\t\t\tif (this.visible && !this.isHiding && !this.isShowing) {\r\n\r\n\t\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\t\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\r\n\t\t\t\tif (xAxis == this.baseAxis) {\r\n\t\t\t\t\tdataItem = xAxis.getSeriesDataItem(this, xAxis.toAxisPosition(xPosition), this.snapTooltip);\r\n\t\t\t\t}\r\n\t\t\t\tif (yAxis == this.baseAxis) {\r\n\t\t\t\t\tdataItem = yAxis.getSeriesDataItem(this, yAxis.toAxisPosition(yPosition), this.snapTooltip);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.returnBulletDefaultState(dataItem);\r\n\r\n\t\t\t\tif (dataItem && dataItem.visible) {\r\n\t\t\t\t\tthis.updateLegendValue(dataItem);\r\n\t\t\t\t\tthis.tooltipDataItem = dataItem;\r\n\r\n\t\t\t\t\t// todo: add tooltipXField and tooltipYField.\r\n\t\t\t\t\tlet tooltipXField = this.tooltipXField;\r\n\t\t\t\t\tlet tooltipYField = this.tooltipYField;\r\n\r\n\t\t\t\t\tif ($type.hasValue((dataItem)[tooltipXField]) && $type.hasValue((dataItem)[tooltipYField])) {\r\n\r\n\t\t\t\t\t\tlet tooltipPoint = this.getPoint(dataItem, tooltipXField, tooltipYField, dataItem.locations[tooltipXField], dataItem.locations[tooltipYField]);\r\n\r\n\t\t\t\t\t\tif (tooltipPoint) {\r\n\r\n\t\t\t\t\t\t\tthis.tooltipX = tooltipPoint.x;\r\n\t\t\t\t\t\t\tthis.tooltipY = tooltipPoint.y;\r\n\r\n\t\t\t\t\t\t\tif (this._prevTooltipDataItem != dataItem) {\r\n\t\t\t\t\t\t\t\tthis.dispatchImmediately(\"tooltipshownat\", {\r\n\t\t\t\t\t\t\t\t\ttype: \"tooltipshownat\",\r\n\t\t\t\t\t\t\t\t\ttarget: this,\r\n\t\t\t\t\t\t\t\t\tdataItem: dataItem\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tthis._prevTooltipDataItem = dataItem;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tfor (let a of dataItem.bullets) {\r\n\t\t\t\t\t\t\t\tlet bullet = a[1]\r\n\t\t\t\t\t\t\t\tbullet.isHover = true;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif (this.showTooltip()) {\r\n\t\t\t\t\t\t\t\treturn $utils.spritePointToSvg({ x: tooltipPoint.x, y: tooltipPoint.y }, this);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn;\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\t// so that if tooltip is shown on columns or bullets for it not to be hidden\r\n\t\t\t\tif (!this.tooltipText) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.hideTooltip();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * returns default state to bullets when tooltip is shown at some other data item or hidden\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected returnBulletDefaultState(dataItem?: XYSeriesDataItem) {\r\n\t\tif (this._prevTooltipDataItem && this._prevTooltipDataItem != dataItem) {\r\n\t\t\tfor (let a of this._prevTooltipDataItem.bullets) {\r\n\t\t\t\tlet bullet = a[1];\r\n\t\t\t\tif (!bullet.isDisposed()) {\r\n\t\t\t\t\tbullet.isHover = false;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._prevTooltipDataItem = undefined;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Bullet} bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet) {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: XYSeriesDataItem = bullet.dataItem;\r\n\r\n\t\t// use series xField/yField if bullet doesn't have fields set\r\n\t\tlet xField: string = bullet.xField;\r\n\t\tif (!$type.hasValue(xField)) {\r\n\t\t\txField = this.xField;\r\n\t\t}\r\n\r\n\t\tlet yField: string = bullet.yField;\r\n\t\tif (!$type.hasValue(yField)) {\r\n\t\t\tyField = this.yField;\r\n\t\t}\r\n\r\n\t\tif ((this.xAxis instanceof ValueAxis && !dataItem.hasValue([xField])) || (this.yAxis instanceof ValueAxis && !dataItem.hasValue([yField]))) {\r\n\t\t\tbullet.visible = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet bulletLocationX: number = this.getBulletLocationX(bullet, xField);\r\n\t\t\tlet bulletLocationY: number = this.getBulletLocationY(bullet, yField);\r\n\r\n\t\t\tlet point = this.getPoint(dataItem, xField, yField, bulletLocationX, bulletLocationY);\r\n\t\t\tif (point) {\r\n\t\t\t\tlet x: number = point.x;\r\n\t\t\t\tlet y: number = point.y;\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationX) && this.xOpenField != this.xField) {\r\n\t\t\t\t\tlet openX: number = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\t\tx = x - (x - openX) * bullet.locationX;\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif ($type.isNumber(bullet.locationY) && this.yOpenField != this.yField) {\r\n\t\t\t\t\tlet openY: number = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\t\ty = y - (y - openY) * bullet.locationY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbullet.moveTo({ x: x, y: y });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tbullet.visible = false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationX;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tlet bulletLocation: number = bullet.locationY;\r\n\t\tlet dataItem = bullet.dataItem;\r\n\t\tif (!$type.isNumber(bulletLocation)) {\r\n\t\t\tbulletLocation = dataItem.workingLocations[field];\r\n\t\t}\r\n\t\treturn bulletLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Can items from this series be included into stacks?\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} stacked Can be stacked?\r\n\t */\r\n\tpublic set stacked(stacked: boolean) {\r\n\t\tthis.setPropertyValue(\"stacked\", stacked, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Can be stacked?\r\n\t */\r\n\tpublic get stacked(): boolean {\r\n\t\treturn this.getPropertyValue(\"stacked\");\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position?\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows hidden series.\r\n\t *\r\n\t * @param {number} duration Duration of reveal animation (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tif (this.xAxis instanceof ValueAxis && this.xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t}\r\n\r\n\t\tif (this.yAxis instanceof ValueAxis && this.yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t}\r\n\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\t\tlet delay: number = 0;\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet anim: Animation;\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t}\r\n\t\t\tanim = dataItem.show(interpolationDuration, delay, fields);\r\n\t\t});\r\n\r\n\t\tlet animation = super.show(duration);\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param {number} duration Duration of hiding animation (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet fields: string[];\r\n\t\tlet value: number;\r\n\t\tlet xAxis: Axis = this.xAxis;\r\n\r\n\t\tif (xAxis instanceof ValueAxis && xAxis != this.baseAxis) {\r\n\t\t\tfields = this._xValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (xAxis.minZoomed < 0 && xAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = xAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet yAxis: Axis = this.yAxis;\r\n\t\tif (yAxis instanceof ValueAxis && yAxis != this.baseAxis) {\r\n\t\t\tfields = this._yValueFields;\r\n\t\t\t// animate to zero if 0 is within zoomMin/zoomMax\r\n\t\t\tif (this.stacked || (yAxis.minZoomed < 0 && yAxis.maxZoomed > 0) || this.stackedSeries) {\r\n\t\t\t\tvalue = 0;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvalue = yAxis.min;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//if ($type.hasValue(fields)) {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\tlet interpolationDuration = this.hiddenState.transitionDuration;\r\n\t\tif ($type.isNumber(duration)) {\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet delay: number = 0;\r\n\t\tlet anim: Animation;\r\n\r\n\t\t$iter.each($iter.indexed(this.dataItems.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet dataItem = a[1];\r\n\r\n\t\t\tif (interpolationDuration == 0) {\r\n\t\t\t\tdataItem.hide(0, 0, value, fields);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.sequencedInterpolation && interpolationDuration > 0) {\r\n\t\t\t\t\tdelay = this.sequencedInterpolationDelay * i + interpolationDuration * (i - startIndex) / (endIndex - startIndex);\r\n\t\t\t\t}\r\n\t\t\t\tanim = dataItem.hide(interpolationDuration, delay, value, fields);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet animation = super.hide(interpolationDuration);\r\n\t\tif (animation && !animation.isFinished()) {\r\n\t\t\tanimation.delay(delay);\r\n\t\t}\r\n\r\n\t\tif (anim && !anim.isFinished()) {\r\n\t\t\tanimation = anim;\r\n\t\t}\r\n\r\n\t\t// helps to avoid flicker. otherwise columns will show up at full size and only on next frame will animate from 0\r\n\t\tthis.validateDataElements();\r\n\t\t//}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\r\n\t\t// to calculate stack values\r\n\t\tlet axisSeries: List = >this.baseAxis.series;\r\n\r\n\t\t$iter.each(axisSeries.iterator(), (series) => {\r\n\t\t\tif (series.stacked) {\r\n\t\t\t\tseries.invalidateProcessedData();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [getStackValue description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic getStackValue(dataItem: this[\"_dataItem\"], working?: boolean): void {\r\n\t\t// todo: here wer stack x and y values only. question is - what should we do with other values, like openX, openY?\r\n\t\t// if this series is not stacked or new stack begins, return.\r\n\r\n\t\tif (!this.stacked) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// it might seem that it's better to go through base axis series, but we do not maintain the same order as in chart.series there.\r\n\t\t\tlet chart: XYChart = this.chart;\r\n\t\t\tlet index: number = chart.series.indexOf(this);\r\n\r\n\t\t\tlet field: string;\r\n\r\n\t\t\tif (this.xAxis != this.baseAxis && this.xAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.xField;\r\n\t\t\t}\r\n\t\t\tif (this.yAxis != this.baseAxis && this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tfield = this.yField;\r\n\t\t\t}\r\n\r\n\t\t\t//this is good for removing series, otherwise stack values will remain the same and chart won't pay atention when adding/removing series\r\n\t\t\tdataItem.setCalculatedValue(field, 0, \"stack\");\r\n\r\n\t\t\t$iter.eachContinue(chart.series.range(0, index).backwards().iterator(), (prevSeries) => {\r\n\t\t\t\t// stacking is only possible if both axes are the same\r\n\t\t\t\tif (prevSeries.xAxis == this.xAxis && prevSeries.yAxis == this.yAxis) {\r\n\t\t\t\t\t// saving value\r\n\t\t\t\t\tprevSeries.stackedSeries = this;\r\n\r\n\t\t\t\t\tlet prevDataItem = prevSeries.dataItems.getIndex(dataItem.index); // indexes should match\r\n\r\n\t\t\t\t\tif (prevDataItem && prevDataItem.hasValue(this._xValueFields) && prevDataItem.hasValue(this._yValueFields)) {\r\n\r\n\t\t\t\t\t\tlet value = dataItem.getValue(field);\r\n\t\t\t\t\t\tlet prevValue: number;\r\n\r\n\t\t\t\t\t\tif (working) {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getWorkingValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tprevValue = prevDataItem.getValue(field) + prevDataItem.getValue(field, \"stack\");\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif ((value >= 0 && prevValue >= 0) || (value < 0 && prevValue < 0)) {\r\n\t\t\t\t\t\t\t//dataItem.events.disable();\r\n\t\t\t\t\t\t\tdataItem.setCalculatedValue(field, prevValue, \"stack\");\r\n\t\t\t\t\t\t\t//dataItem.events.enable();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (!prevSeries.stacked) {\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [xField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get xField(): string {\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get yField(): string {\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * [xOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get xOpenField(): string {\r\n\t\treturn this._xOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [yOpenField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get yOpenField(): string {\r\n\t\treturn this._yOpenField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipXField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {string} value [description]\r\n\t */\r\n\tpublic set tooltipXField(value: string) {\r\n\t\tthis._tooltipXField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get tooltipXField(): string {\r\n\t\tif (this._tooltipXField) {\r\n\t\t\treturn this._tooltipXField;\r\n\t\t}\r\n\t\treturn this._xField;\r\n\t}\r\n\r\n\t/**\r\n\t * [tooltipYField description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {string} value [description]\r\n\t */\r\n\tpublic set tooltipYField(value: string) {\r\n\t\tthis._tooltipYField = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @return {string} [description]\r\n\t */\r\n\tpublic get tooltipYField(): string {\r\n\t\tif (this._tooltipYField) {\r\n\t\t\treturn this._tooltipYField;\r\n\t\t}\r\n\t\treturn this._yField;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ValueAxis} axis Axis\r\n\t * @return {number} value\r\n\t */\r\n\tpublic min(axis: ValueAxis): number {\r\n\t\treturn this._tmin.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ValueAxis} axis Axis\r\n\t * @return {number} value\r\n\t */\r\n\tpublic max(axis: ValueAxis): number {\r\n\t\treturn this._tmax.getKey(axis.uid);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns lowest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ValueAxis} axis Axis\r\n\t * @return {number} value\r\n\t */\r\n\tpublic selectionMin(axis: ValueAxis): number {\r\n\t\tlet value = this._smin.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.min(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns highest value in the series for the specific axis within current\r\n\t * selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ValueAxis} axis Axis\r\n\t * @return {number} value\r\n\t */\r\n\tpublic selectionMax(axis: ValueAxis): number {\r\n\t\tlet value = this._smax.getKey(axis.uid);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.max(axis);\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.xAxis +\"\\\" found for `xAxis`.\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYSeries (\" + (this.name || \"unnamed\") + \")] No axis with id \\\"\" + config.yAxis +\"\\\" found for `yAxis`.\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axis ranges\r\n\t\t\tif ($type.hasValue(config.axisRanges) && $type.isArray(config.axisRanges)) {\r\n\t\t\t\tfor (let i = 0, len = config.axisRanges.length; i < len; i++) {\r\n\t\t\t\t\tlet range = config.axisRanges[i];\r\n\t\t\t\t\tif (!$type.hasValue(range.type)) {\r\n\t\t\t\t\t\trange.type = \"AxisDataItem\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ($type.hasValue(range.axis) && $type.isString(range.axis) && this.map.hasKey(range.axis)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.axis);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(range.component) && $type.isString(range.component) && this.map.hasKey(range.component)) {\r\n\t\t\t\t\t\trange.component = this.map.getKey(range.component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Parse date fields based on the series fields\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tthis.processingErrors.push(\"`dataFields` is not set for series [\" + (this.name || \"unnamed\") + \"]\");\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {XYSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: XYSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tlet x: number = this.xAxis.getX(dataItem, xKey, locationX);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY);\r\n\r\n\t\tx = $math.fitToRange(x, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty = $math.fitToRange(y, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\treturn { x: x, y: y };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates item reader text based on the type and set up of axis.\r\n\t */\r\n\tprotected updateItemReaderText(): void {\r\n\t\tlet text = \"\"\r\n\t\t$object.each(this.dataFields, (key, val) => {\r\n\t\t\ttext += \"{\" + key + \"} \";\r\n\t\t});\r\n\t\tthis.itemReaderText = text;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if series should display a tooltip for chart's cursor.\r\n\t *\r\n\t * If set to `true` (default), the tooltips set for all series item's\r\n\t * elements like columns and bullets will be automatically shown\r\n\t * when [[XYCursor]] passes over category/date, even if its not hovered\r\n\t * directly over the item.\r\n\t *\r\n\t * Set this to `false` to disable such behavior and display item-specific\r\n\t * tooltips only when hovered directly over them\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Display tooltip?\r\n\t */\r\n\tpublic set cursorTooltipEnabled(value: boolean) {\r\n\t\tthis.setPropertyValue(\"cursorTooltipEnabled\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Display tooltip?\r\n\t */\r\n\tpublic get cursorTooltipEnabled(): boolean {\r\n\t\treturn this.getPropertyValue(\"cursorTooltipEnabled\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYSeries\"] = XYSeries;\r\nregistry.registeredClasses[\"XYSeriesDataItem\"] = XYSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/XYSeries.ts","/**\r\n * Cursor module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { getInteraction, IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IInteractionObjectEvents } from \"../../core/interaction/InteractionObjectEvents\";\r\nimport { IPoint, } from \"../../core/defs/IPoint\";\r\nimport { Chart } from \"../Chart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Cursor]].\r\n */\r\nexport interface ICursorProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[Cursor]].\r\n */\r\nexport interface ICursorEvents extends IContainerEvents {\r\n\r\n\t/**\r\n\t * Invoked when position of cursor changes.\r\n\t */\r\n\tcursorpositionchanged: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts selecting a range with a cursor, e.g. presses\r\n\t * down mouse button and drags the cursor.\r\n\t */\r\n\tselectstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when selection has ended, e.g. user releases mouse button.\r\n\t */\r\n\tselectended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts zooming using cursor.\r\n\t */\r\n\tzoomstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user clicked to start zooming/panning/selecting but haven't\r\n\t * finished the operation.\r\n\t */\r\n\tbehaviorcanceled: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done zooming using cursor.\r\n\t */\r\n\tzoomended: {};\r\n\r\n\t/**\r\n\t * Invoked when user starts panning using cursor.\r\n\t */\r\n\tpanstarted: {};\r\n\r\n\t/**\r\n\t * Invoked when user is done panning using cursor.\r\n\t */\r\n\tpanended: {};\r\n\r\n\t/**\r\n\t * Invoked when user is panning using cursor.\r\n\t */\r\n\tpanning: {};\r\n}\r\n\r\n/**\r\n * Defines adapters for [[Cursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICursorAdapters extends IContainerAdapters, ICursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Main Cursor class with common cursor functionality.\r\n *\r\n * Chart-specific cursors must extend this class.\r\n *\r\n * @see {@link ICursorEvents} for a list of available events\r\n * @see {@link ICursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class Cursor extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICursorProperties}\r\n\t */\r\n\tpublic _properties!: ICursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICursorAdapters}\r\n\t */\r\n\tpublic _adapter!: ICursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICursorEvents}\r\n\t */\r\n\tpublic _events!: ICursorEvents;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection started.\r\n\t *\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic downPoint: IPoint;\r\n\r\n\t/**\r\n\t * Point coordinates of where selection ended.\r\n\t *\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic upPoint: IPoint;\r\n\r\n\t/**\r\n\t * Current cursor position during selection.\r\n\t *\r\n\t * @type {IPoint}\r\n\t * @todo Better description\r\n\t */\r\n\tpublic point: IPoint = { x: 0, y: 0 };\r\n\r\n\t/**\r\n\t * Relative horizontal position.\r\n\t *\r\n\t * @type {number}\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic xPosition: number;\r\n\r\n\t/**\r\n\t * Relative vertical position.\r\n\t *\r\n\t * @type {number}\r\n\t * @todo: maybe we should make getter only? it is used from outside by axes or series to show tooltips at some position\r\n\t */\r\n\tpublic yPosition: number;\r\n\r\n\t/**\r\n\t * [_usesSelection description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {boolean}\r\n\t */\r\n\tprotected _usesSelection: boolean;\r\n\r\n\t/**\r\n\t * What to do when user pressed down and drags cursor: zoom or select.\r\n\t *\r\n\t * @type {\"zoom\" | \"select\"}\r\n\t */\r\n\tprotected _generalBehavior: \"zoom\" | \"select\" | \"pan\"; // todo: draw\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t *\r\n\t * @type {Chart}\r\n\t */\r\n\tpublic _chart: Chart;\r\n\r\n\t/**\r\n\t * Specifies the rules when cursor needs to be moved or hidden.\r\n\t */\r\n\tprotected _stick: \"hard\" | \"soft\" | \"none\" = \"none\";\r\n\r\n\t/**\r\n\t * A screen point that cursor is \"stuck\" to.\r\n\t *\r\n\t * @type {IPoint}\r\n\t */\r\n\tprotected _stickPoint: IPoint;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"Cursor\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\t\tthis.shouldClone = false;\r\n\r\n\t\tthis.hide(0);\r\n\r\n\t\tthis.trackable = true;\r\n\t\tthis.clickable = true;\r\n\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\t// Add events on body to trigger down and up events (to start zooming or\r\n\t\t// selection)\r\n\t\tconst interaction = getInteraction();\r\n\t\tthis._disposers.push(interaction.body.events.on(\"down\", this.handleCursorDown, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"up\", this.handleCursorUp, this));\r\n\t\tthis._disposers.push(interaction.body.events.on(\"track\", this.handleCursorMove, this));\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Handle pointer movement in document and update cursor position as needed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IInteractionObjectEvents[\"track\"]} event Event\r\n\t */\r\n\tpublic handleCursorMove(event: IInteractionObjectEvents[\"track\"]): IPoint {\r\n\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\t// We want to let zoom/pan continue even if cursor is outside chart area\r\n\t\t\tif (!this.isHidden || !this.isHiding) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\tif (this._stick == \"hard\" && this._stickPoint) {\r\n\t\t\tlocal = this._stickPoint;\r\n\t\t}\r\n\r\n\t\tif (this._stick == \"soft\" && this._stickPoint) {\r\n\t\t\tif (!this.fitsToBounds(local)) {\r\n\t\t\t\tlocal = this._stickPoint;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.triggerMove(local);\r\n\t\treturn local;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Hides actual SVG elements and handles hiding animations.\r\n\t *\r\n\t * @param {number} duration Fade out duration (ms)\r\n\t * @return {Animation} Fade out duration (ms)\r\n\t * @ignore\r\n\t */\r\n\tprotected hideReal(duration?: number): $type.Optional {\r\n\t\tif ((this._stick == \"hard\" || this._stick == \"soft\") && this._stickPoint) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\treturn super.hideReal(duration);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * The second parameter has following options:\r\n\t *\r\n\t * `\"none\"` - placed cursor will only be there until mouse/touch moves, then\r\n\t * it either moves to a new place (if pointer over plot area) or is hidden.\r\n\t *\r\n\t * `\"soft\"` - cursor will stay in the place if mouse/touch is happening\r\n\t * outside chart, but will move to a new place whe plot area is hovered or\r\n\t * touched.\r\n\t *\r\n\t * `\"hard\"` - cursor will stay in place no matter what, until it is moved by\r\n\t * another `triggerMove()` call.\r\n\t *\r\n\t * @param {IPoint} point Point to place cursor at\r\n\t * @param {\"hard\" | \"soft\" | \"none\"} stick Level of cursor stickiness to the place\r\n\t */\r\n\tpublic triggerMove(point: IPoint, stick?: \"hard\" | \"soft\" | \"none\"): void {\r\n\r\n\t\tpoint.x = $math.round(point.x, 1);\r\n\t\tpoint.y = $math.round(point.y, 1);\r\n\r\n\t\tif (stick) {\r\n\t\t\tthis._stick = stick;\r\n\t\t}\r\n\r\n\t\tif (stick == \"hard\" || stick == \"soft\") {\r\n\t\t\tthis._stickPoint = point;\r\n\t\t}\r\n\r\n\t\tthis.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param {IPoint} point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tif (this.point.x != point.x || this.point.y != point.y) {\r\n\t\t\t\r\n\t\t\tthis.point = point;\r\n\t\t\tthis.invalidatePosition();\r\n\t\t\t// hide cursor if it's out of bounds\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.show(0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// unless we are selecting (mouse is down)\r\n\t\t\t\tif (!this.downPoint) {\r\n\t\t\t\t\tthis.hide(0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif (this.visible) {\r\n\t\t\t\tthis.getPositions();\r\n\r\n\t\t\t\tthis.dispatch(\"cursorpositionchanged\"); // not good to dispatch later (check step count example)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param {IPoint} point Point of action\r\n\t */\r\n\tpublic triggerDown(point: IPoint) {\r\n\t\tthis.triggerDownReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates pressing down (click/touch) action by a cursor.\r\n\t *\r\n\t * @param {IPoint} point Point of action\r\n\t */\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tswitch (this._generalBehavior) {\r\n\t\t\tcase \"zoom\":\r\n\t\t\t\tthis.dispatchImmediately(\"zoomstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"select\":\r\n\t\t\t\tthis.dispatchImmediately(\"selectstarted\");\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"pan\":\r\n\t\t\t\tthis.dispatchImmediately(\"panstarted\");\r\n\t\t\t\tgetInteraction().setGlobalStyle(MouseCursorStyle.grabbing);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param {IPoint} point Point of action\r\n\t */\r\n\tpublic triggerUp(point: IPoint) {\r\n\t\tthis.triggerUpReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * Simulates the action of release of the mouse down / touch.\r\n\t *\r\n\t * @param {IPoint} point Point of action\r\n\t */\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\r\n\t\tthis.updatePoint(this.upPoint);\r\n\t\tlet interaction = getInteraction();\r\n\t\tif ($math.getDistance(this.upPoint, this.downPoint) > interaction.getHitOption(this.interactions, \"hitTolerance\")) {\r\n\t\t\tswitch (this._generalBehavior) {\r\n\t\t\t\tcase \"zoom\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"zoomended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"select\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"selectended\");\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"pan\":\r\n\t\t\t\t\tthis.dispatchImmediately(\"panended\");\r\n\t\t\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.dispatchImmediately(\"behaviorcanceled\");\r\n\t\t\tinteraction.setGlobalStyle(MouseCursorStyle.default);\r\n\t\t}\r\n\r\n\t\tthis.downPoint = undefined;\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions(): void {\r\n\t\t// positions are used by axes or series\r\n\t\tthis.xPosition = this.point.x / this.innerWidth;\r\n\t\tthis.yPosition = 1 - this.point.y / this.innerHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer down event so we can start zoom or selection.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IInteractionEvents[\"down\"]} event Original event\r\n\t */\r\n\tpublic handleCursorDown(event: IInteractionEvents[\"down\"]): void {\r\n\t\tif (!this.interactionsEnabled || !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// Get local point\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\r\n\t\t// We need to cancel the event to prevent gestures on touch devices\r\n\t\tif (event.event.cancelable && this.fitsToBounds(local)) {\r\n\t\t\tevent.event.preventDefault();\r\n\t\t}\r\n\r\n\t\t// Make this happen\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerDown(local);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t}\r\n\r\n\t/**\r\n\t * Handles pointer up event - finishes zoom or selection action.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IInteractionEvents[\"up\"]} event Original event\r\n\t */\r\n\tpublic handleCursorUp(event: IInteractionEvents[\"up\"]): void {\r\n\t\tif (!this.interactionsEnabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (((this._generalBehavior != \"zoom\" && this._generalBehavior != \"pan\") || !this.downPoint) && !getInteraction().isLocalElement(event.pointer, this.paper.svg, this.uid)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet local: IPoint = $utils.documentPointToSprite(event.pointer.point, this);\r\n\t\tthis.triggerMove(local);\r\n\t\tthis.triggerUp(local);\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to a [[Chart]] the cursor belongs to.\r\n\t *\r\n\t * @param {Chart} value Chart\r\n\t */\r\n\tpublic set chart(value: this[\"_chart\"]) {\r\n\t\tthis._chart = value;\r\n\t\tif ($type.hasValue((this._chart).plotContainer)) {\r\n\t\t\tgetInteraction().lockElement((this._chart).plotContainer.interactions);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Chart} Chart\r\n\t */\r\n\tpublic get chart(): this[\"_chart\"] {\r\n\t\treturn this._chart;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Cursor\"] = Cursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/Cursor.ts","/**\r\n * Cursor for XY chart\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Cursor, ICursorProperties, ICursorAdapters, ICursorEvents } from \"./Cursor\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { MutableValueDisposer, MultiDisposer, IDisposer } from \"../../core/utils/Disposer\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { XYSeries, IXYSeriesEvents } from \"../series/XYSeries\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { color } from \"../../core/utils/Color\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYCursor]].\r\n */\r\nexport interface IXYCursorProperties extends ICursorProperties {\r\n\r\n\t/**\r\n\t * Cursor's behavior when moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally; (default)\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * @default \"zoomX\"\r\n\t */\r\n\tbehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tfullWidthLineX?: boolean;\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tfullWidthLineY?: boolean;\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tmaxPanOut?: number;\r\n\r\n\t/**\r\n\t *\r\n\t * @type {XYSeries}\r\n\t */\r\n\tsnapToSeries: XYSeries;\r\n}\r\n\r\n/**\r\n * Defines events for [[XYCursor]].\r\n */\r\nexport interface IXYCursorEvents extends ICursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYCursorAdapters extends ICursorAdapters, IXYCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A cursor used on [[XYChart]].\r\n *\r\n * @see {@link IXYCursorEvents} for a list of available events\r\n * @see {@link IXYCursorAdapters} for a list of available Adapters\r\n * @todo Add description, examples\r\n * @todo Should we allow changing `_generalBehavior`?\r\n */\r\nexport class XYCursor extends Cursor {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYCursorProperties}\r\n\t */\r\n\tpublic _properties!: IXYCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t *\r\n\t * @type {IXYCursorAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYCursorEvents}\r\n\t */\r\n\tpublic _events!: IXYCursorEvents;\r\n\r\n\t/**\r\n\t * Vertical cursor line element.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _lineX = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Horizontal cursor line element.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _lineY = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Element which highlights selected area.\r\n\t *\r\n\t * @type {Sprite}\r\n\t */\r\n\tprotected _selection: Sprite;\r\n\r\n\t/**\r\n\t * A range of current horizontal selection.\r\n\t *\r\n\t * @type {IRange}\r\n\t */\r\n\tpublic xRange: IRange;\r\n\r\n\t/**\r\n\t * A range of current vertical selection.\r\n\t *\r\n\t * @type {IRange}\r\n\t */\r\n\tpublic yRange: IRange;\r\n\r\n\t/**\r\n\t * Horizontal [[Axis]].\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _xAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * Vertical [[Axis]].\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _yAxis = new MutableValueDisposer>();\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t *\r\n\t * @type {Chart}\r\n\t */\r\n\tpublic _chart: XYChart;\r\n\r\n\tprotected _snapToDisposer: IDisposer;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYCursor\";\r\n\r\n\t\t// Defaults\r\n\t\tthis.behavior = \"zoomX\";\r\n\r\n\t\tthis.maxPanOut = 0.1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\t// Create selection element\r\n\t\tlet selection: Sprite = this.createChild(Sprite);\r\n\t\tselection.shouldClone = false;\r\n\t\tselection.fillOpacity = 0.2;\r\n\t\tselection.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tselection.isMeasured = false;\r\n\t\tselection.interactionsEnabled = false;\r\n\t\tthis.selection = selection;\r\n\t\tthis._disposers.push(this.selection);\r\n\r\n\t\t// Create cursor's vertical line\r\n\t\tlet lineX: Sprite = this.createChild(Sprite);\r\n\t\tlineX.shouldClone = false;\r\n\t\tlineX.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineX.fill = color();\r\n\t\tlineX.strokeDasharray = \"3,3\";\r\n\t\tlineX.isMeasured = false;\r\n\t\tlineX.strokeOpacity = 0.4;\r\n\t\tlineX.interactionsEnabled = false;\r\n\t\tlineX.y = 0;// important\r\n\t\tthis.lineX = lineX;\r\n\t\tthis._disposers.push(this.lineX);\r\n\r\n\t\t// Create cursor's horizontal line\r\n\t\tlet lineY: Sprite = this.createChild(Sprite);\r\n\t\tlineY.shouldClone = false;\r\n\t\tlineY.stroke = interfaceColors.getFor(\"grid\");\r\n\t\tlineY.fill = color();\r\n\t\tlineY.strokeDasharray = \"3,3\";\r\n\t\tlineY.isMeasured = false;\r\n\t\tlineY.strokeOpacity = 0.4;\r\n\t\tlineY.interactionsEnabled = false;\r\n\t\tlineY.x = 0; // important\r\n\t\tthis.lineY = lineY;\r\n\t\tthis._disposers.push(this.lineY);\r\n\r\n\t\t// Add handler for size changes\r\n\t\tthis.events.on(\"sizechanged\", this.updateSize, this, false);\r\n\r\n\t\tthis._disposers.push(this._lineX);\r\n\t\tthis._disposers.push(this._lineY);\r\n\t\tthis._disposers.push(this._xAxis);\r\n\t\tthis._disposers.push(this._yAxis);\r\n\r\n\t\tthis.mask = this;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursor element dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: 0, y: this.innerHeight });\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: this.innerWidth, y: 0 });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tif (this.lineX) {\r\n\t\t\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.lineY) {\r\n\t\t\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\r\n\t\t\t\tlet x: number = Math.min(point.x, downPoint.x);\r\n\t\t\t\tlet y: number = Math.min(point.y, downPoint.y);\r\n\r\n\t\t\t\tlet w: number = $math.round(Math.abs(downPoint.x - point.x), this._positionPrecision);\r\n\t\t\t\tlet h: number = $math.round(Math.abs(downPoint.y - point.y), this._positionPrecision);\r\n\r\n\t\t\t\tswitch (this.behavior) {\r\n\t\t\t\t\tcase \"zoomX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"zoomY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectX\":\r\n\t\t\t\t\t\ty = 0;\r\n\t\t\t\t\t\th = this.pixelHeight;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"selectY\":\r\n\t\t\t\t\t\tx = 0;\r\n\t\t\t\t\t\tw = this.pixelWidth;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tselection.x = x;\r\n\t\t\t\tselection.y = y;\r\n\r\n\t\t\t\tselection.path = $path.rectangle(w, h);\r\n\r\n\t\t\t\tselection.validatePosition(); // otherwise Edge shoes some incorrect size rectangle\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.selection.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\tpoint.x = Math.max(0, point.x);\r\n\t\tpoint.y = Math.max(0, point.y);\r\n\t\tpoint.x = Math.min(this.pixelWidth, point.x);\r\n\t\tpoint.y = Math.min(this.pixelHeight, point.y);\r\n\r\n\t\treturn point;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Places the cursor at specific point.\r\n\t *\r\n\t * @param {IPoint} point Point to place cursor at\r\n\t */\r\n\tprotected triggerMoveReal(point: IPoint): void {\r\n\t\tsuper.triggerMoveReal(point);\r\n\r\n\t\tif ((this.snapToSeries && !this.snapToSeries.isHidden)) {\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.updateLinePositions(point);\r\n\t\t}\r\n\r\n\t\tif (this.downPoint && $math.getDistance(this.downPoint, point) > 3) {\r\n\t\t\tif (this._generalBehavior == \"pan\") {\r\n\t\t\t\tthis.getPanningRanges();\r\n\t\t\t\tthis.dispatch(\"panning\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\t\tpoint = this.fixPoint(this.point);\r\n\r\n\t\tif (this.lineX && this.lineX.visible && !this.xAxis) {\r\n\t\t\tthis.lineX.x = point.x;\r\n\t\t}\r\n\t\tif (this.lineY && this.lineY.visible && !this.yAxis) {\r\n\t\t\tthis.lineY.y = point.y;\r\n\t\t}\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\r\n\tprotected triggerDownReal(point: IPoint) {\r\n\t\tif (this.visible && !this.isHiding) {\r\n\r\n\t\t\tif (this.fitsToBounds(point)) {\r\n\t\t\t\tthis.downPoint = { x: point.x, y: point.y };\r\n\r\n\t\t\t\tthis.updatePoint(point);\r\n\r\n\t\t\t\t//this.updateLinePositions(point); // otherwise lines won't be in correct position and touch won't work fine\r\n\r\n\t\t\t\tthis.point.x = this.downPoint.x;\r\n\t\t\t\tthis.point.y = this.downPoint.y;\r\n\r\n\t\t\t\tlet selection: Sprite = this.selection;\r\n\t\t\t\tlet selectionX: number = this.downPoint.x;\r\n\t\t\t\tlet selectionY: number = this.downPoint.y;\r\n\r\n\t\t\t\tif (this._usesSelection) {\r\n\t\t\t\t\tselection.x = selectionX;\r\n\t\t\t\t\tselection.y = selectionY;\r\n\t\t\t\t\tselection.path = \"\";\r\n\t\t\t\t\tselection.show();\r\n\t\t\t\t}\r\n\t\t\t\tsuper.triggerDownReal(point);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.downPoint = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.downPoint = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the coordinates of where pointer down event occurred\r\n\t * (was pressed).\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\t\tif (this.lineX) {\r\n\t\t\tpoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tpoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprotected triggerUpReal(point: IPoint) {\r\n\t\tif (this.downPoint) {\r\n\t\t\tthis.upPoint = point;\r\n\r\n\t\t\tthis.updatePoint(this.upPoint);\r\n\r\n\t\t\tthis.getRanges();\r\n\r\n\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.selection.hide();\r\n\t\t\t}\r\n\r\n\t\t\tsuper.triggerUpReal(point);\r\n\t\t}\r\n\r\n\t\tthis.downPoint = undefined;\r\n\t\tthis.updateSelection();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getPanningRanges() {\r\n\r\n\t\tlet startX = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet startY = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\r\n\t\tlet currentX = $math.round(this.point.x / this.innerWidth, 5);\r\n\t\tlet currentY = $math.round(this.point.y / this.innerHeight, 5);\r\n\r\n\t\tlet deltaX = startX - currentX;\r\n\t\tlet deltaY = -startY + currentY;\r\n\r\n\t\tthis.xRange = { start: deltaX, end: 1 + deltaX };\r\n\t\tthis.yRange = { start: deltaY, end: 1 + deltaY };\r\n\r\n\t\tif (this.behavior == \"panX\") {\r\n\t\t\tthis.yRange.start = 0;\r\n\t\t\tthis.yRange.end = 1;\r\n\t\t}\r\n\t\tif (this.behavior == \"panY\") {\r\n\t\t\tthis.xRange.start = 0;\r\n\t\t\tthis.xRange.end = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges() {\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.upPoint.x = this.lineX.pixelX;\r\n\t\t}\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.upPoint.y = this.lineY.pixelY;\r\n\t\t}\r\n\r\n\t\t// @todo Is this needed?\r\n\t\tthis.selection;\r\n\r\n\t\tlet startX: number = $math.round(this.downPoint.x / this.innerWidth, 5);\r\n\t\tlet endX: number = $math.round((this.upPoint.x) / this.innerWidth, 5);\r\n\r\n\t\tlet startY: number = $math.round(this.downPoint.y / this.innerHeight, 5);\r\n\t\tlet endY: number = $math.round((this.upPoint.y) / this.innerHeight, 5);\r\n\r\n\t\tthis.xRange = { start: $math.min(startX, endX), end: $math.max(startX, endX) };\r\n\t\tthis.yRange = { start: $math.min(startY, endY), end: $math.max(startY, endY) };\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's behavior when it's moved with pointer down:\r\n\t *\r\n\t * * \"zoomX\" - zooms horizontally;\r\n\t * * \"zoomY\" - zooms vertically;\r\n\t * * \"zoomXY\" - zooms both horizontally and vertically;\r\n\t * * \"selectX\" - selects a range horizontally;\r\n\t * * \"selectY\" - selects a range vertically;\r\n\t * * \"selectXY\" - selects a range both horizontally and vertically;\r\n\t * * \"panX\" - moves (pans) current selection horizontally;\r\n\t * * \"panY\" - moves (pans) current selection vertically;\r\n\t * * \"panXY\" - moves (pans) current selection both horizontally and vertically;\r\n\t * * \"none\" - does nothing with pointer down.\r\n\t *\r\n\t * E.g. \"zoomXY\" will mean that pressing a mouse (or touching) over plot area\r\n\t * and dragging it will start zooming the chart.\r\n\t *\r\n\t * @param {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} value Bheavior\r\n\t */\r\n\tpublic set behavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\t\tthis.setPropertyValue(\"behavior\", value, true);\r\n\r\n\t\tthis._usesSelection = false;\r\n\r\n\t\tif (value.indexOf(\"zoom\") != -1) {\r\n\t\t\tthis._generalBehavior = \"zoom\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"select\") != -1) {\r\n\t\t\tthis._generalBehavior = \"select\";\r\n\t\t\tthis._usesSelection = true;\r\n\t\t}\r\n\t\tif (value.indexOf(\"pan\") != -1) {\r\n\t\t\tthis._generalBehavior = \"pan\";\r\n\t\t\tthis._usesSelection = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @type {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} Bheavior\r\n\t */\r\n\tpublic get behavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"selectX\" | \"selectY\" | \"selectXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"behavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's horizontal line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `xAxis` is set and only in case\r\n\t * `xAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param {boolean} value Full width?\r\n\t */\r\n\tpublic set fullWidthLineX(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Full width?\r\n\t */\r\n\tpublic get fullWidthLineX(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Cursor's vertical line is expanded to take full width of the related\r\n\t * Axis' cell/category.\r\n\t *\r\n\t * NOTE: this setting will work properly if `yAxis` is set and only in case\r\n\t * `yAxis` is [[CategoryAxis]] or [[DateAxis]].\r\n\t *\r\n\t * @param {boolean} value Full width?\r\n\t */\r\n\tpublic set fullWidthLineY(value: boolean) {\r\n\t\tthis.setPropertyValue(\"fullWidthLineY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Full width?\r\n\t */\r\n\tpublic get fullWidthLineY(): boolean {\r\n\t\treturn this.getPropertyValue(\"fullWidthLineY\");\r\n\t}\r\n\r\n\t/**\r\n\t * If cursor behavior is panX or panY, we allow to pan plot out of it's max bounds for a better user experience.\r\n\t * This setting specifies relative value by how much we can pan out the plot\r\n\t *\r\n\t * @param {number} value\r\n\t */\r\n\tpublic set maxPanOut(value: number) {\r\n\t\tthis.setPropertyValue(\"maxPanOut\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Full width?\r\n\t */\r\n\tpublic get maxPanOut(): number {\r\n\t\treturn this.getPropertyValue(\"maxPanOut\");\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to X [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `xAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param {Axis} axis X axis\r\n\t */\r\n\tpublic set xAxis(axis: Axis) {\r\n\t\tif (this._xAxis.get() != axis) {\r\n\t\t\tlet chart: XYChart = axis.chart;\r\n\t\t\tthis._xAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleXTooltipPosition, this, false),\r\n\t\t\t\t//axis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} X axis\r\n\t */\r\n\tpublic get xAxis(): Axis {\r\n\t\treturn this._xAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to Y [[Axis]].\r\n\t *\r\n\t * An XY cursor can live without `yAxis` set. You set xAxis for cursor when\r\n\t * you have axis tooltip enabled and you want cursor line to be at the same\r\n\t * position as tooltip.\r\n\t *\r\n\t * This works with [[CategoryAxis]] and [[DateAxis]] but not with\r\n\t * [[ValueAxis]].\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param {Axis} axis Y axis\r\n\t */\r\n\tpublic set yAxis(axis: Axis) {\r\n\t\tif (this._yAxis.get() != axis) {\r\n\t\t\tlet chart: XYChart = axis.chart;\r\n\t\t\tthis._yAxis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.tooltip.events.on(\"positionchanged\", this.handleYTooltipPosition, this, false),\r\n\t\t\t\t//axis.events.on(\"validated\", chart.handleCursorPositionChange, chart, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Y Axis\r\n\t */\r\n\tpublic get yAxis(): Axis {\r\n\t\treturn this._yAxis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ISpriteEvents[\"positionchanged\"]} event Original Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet x: number = point.x;\r\n\r\n\t\tif (this.lineX) {\r\n\t\t\tthis.lineX.x = x;\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineX.x = x;\r\n\t\t\t\tlet width: number = endPoint.x - startPoint.x;\r\n\t\t\t\tthis.lineX.path = $path.rectangle(width, this.innerHeight, -width / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when Y axis changes position or scale.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ISpriteEvents[\"positionchanged\"]} event Original Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\tlet point: IPoint = $utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this);\r\n\t\tlet y: number = point.y;\r\n\r\n\t\tif (this.lineY) {\r\n\t\t\tthis.lineY.y = y;\r\n\r\n\t\t\tif (!this.fitsToBounds(point)) {\r\n\t\t\t\tthis.hide();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\tthis.lineY.y = y;\r\n\t\t\t\tlet height: number = endPoint.y - startPoint.y;\r\n\t\t\t\tthis.lineY.path = $path.rectangle(this.innerWidth, height, 0, -height / 2);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use for X axis.\r\n\t *\r\n\t * @param {Sprite} lineX Line\r\n\t */\r\n\tpublic set lineX(lineX: Sprite) {\r\n\t\tif (lineX) {\r\n\t\t\tlineX.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineX.set(lineX, lineX.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineX.interactionsEnabled = false;\r\n\t\t\tlineX.parent = this;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineX.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Sprite} Line element\r\n\t */\r\n\tpublic get lineX(): Sprite {\r\n\t\treturn this._lineX.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A Line element to use Y axis.\r\n\t *\r\n\t * @param {Sprite} lineY Line\r\n\t */\r\n\tpublic set lineY(lineY: Sprite) {\r\n\t\tif (lineY) {\r\n\t\t\tlineY.setElement(this.paper.add(\"path\"));\r\n\t\t\tthis._lineY.set(lineY, lineY.events.on(\"positionchanged\", this.updateSelection, this, false));\r\n\t\t\tlineY.parent = this;\r\n\t\t\tlineY.interactionsEnabled = false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._lineY.reset();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Sprite} Line element\r\n\t */\r\n\tpublic get lineY(): Sprite {\r\n\t\treturn this._lineY.get();\r\n\t}\r\n\r\n\t/**\r\n\t * A selection element ([[Sprite]]).\r\n\t *\r\n\t * @param {Sprite} selection Selection rectangle\r\n\t */\r\n\tpublic set selection(selection: Sprite) {\r\n\t\tthis._selection = selection;\r\n\t\tif (selection) {\r\n\t\t\tselection.element = this.paper.add(\"path\");\r\n\t\t\tselection.parent = this;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Sprite} Selection rectangle\r\n\t */\r\n\tpublic get selection(): Sprite {\r\n\t\treturn this._selection;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * Looks if `xAxis` and `yAxis` is set via ID in JSON config, and replaces\r\n\t * with real references.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxis) && $type.isString(config.xAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.xAxis)) {\r\n\t\t\t\t\tconfig.xAxis = this.map.getKey(config.xAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.xAxis +\"\\\" found for `xAxis`\");\r\n\t\t\t\t\tdelete config.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxis) && $type.isString(config.yAxis)) {\r\n\t\t\t\tif (this.map.hasKey(config.yAxis)) {\r\n\t\t\t\t\tconfig.yAxis = this.map.getKey(config.yAxis);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.processingErrors.push(\"[XYCursor] No axis with id \\\"\" + config.yAxis +\"\\\" found for `yAxis`\");\r\n\t\t\t\t\tdelete config.yAxis;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies to which series cursor lines should be snapped. Works when one\r\n\t * of the axis is `DateAxis` or `CategoryAxis`. Won't work if both axes are\r\n\t * `ValueAxis`.\r\n\t * \r\n\t * @param {XYSeries}\r\n\t */\r\n\tpublic set snapToSeries(series: XYSeries) {\r\n\t\tif (this.setPropertyValue(\"snapToSeries\", series)) {\r\n\t\t\tif (this._snapToDisposer) {\r\n\t\t\t\tthis._snapToDisposer.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (series) {\r\n\t\t\t\tthis._snapToDisposer = series.events.on(\"tooltipshownat\", this.handleSnap, this, false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {XYSeries}\r\n\t */\r\n\tpublic get snapToSeries(): XYSeries {\r\n\t\treturn this.getPropertyValue(\"snapToSeries\");\r\n\t}\r\n\r\n\t/**\r\n\t * [handleSnap description]\r\n\t * \r\n\t * @ignore\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleSnap() {\r\n\r\n\t\tlet series = this.snapToSeries;\r\n\t\tlet y = series.tooltipY;\r\n\t\tlet x = series.tooltipX;// - this.pixelWidth;\r\n\r\n\t\tif (this.xAxis) {\r\n\t\t\tif (this.xAxis.renderer.opposite) {\r\n\t\t\t\ty -= this.pixelHeight;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.point = { x: x, y: y };\r\n\t\tthis.getPositions();\r\n\r\n\t\tx -= this.pixelWidth;\r\n\r\n\t\tif (this.yAxis) {\r\n\t\t\tif (this.yAxis.renderer.opposite) {\r\n\t\t\t\tx += this.pixelWidth;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet tooltip = series.tooltip;\r\n\t\tlet duration = tooltip.animationDuration;\r\n\t\tlet easing = tooltip.animationEasing;\r\n\r\n\t\tif (series.baseAxis == series.xAxis) {\r\n\t\t\tseries.yAxis.showTooltipAtPosition(this.yPosition);\r\n\t\t}\r\n\r\n\t\tif (series.baseAxis == series.yAxis) {\r\n\t\t\tseries.xAxis.showTooltipAtPosition(this.xPosition);\r\n\t\t}\r\n\r\n\t\tthis.lineX.animate([{ property: \"y\", to: y }], duration, easing);\r\n\t\tthis.lineY.animate([{ property: \"x\", to: x }], duration, easing);\r\n\r\n\t\tif (!this.xAxis) {\r\n\t\t\tthis.lineX.animate([{ property: \"x\", to: x }], duration, easing);\r\n\t\t}\r\n\t\tif (!this.yAxis) {\r\n\t\t\tthis.lineY.animate([{ property: \"y\", to: y }], duration, easing);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYCursor\"] = XYCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/XYCursor.ts","/**\r\n * A module with functionality for buildin a scrollbar with an XY graph in it.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Scrollbar, IScrollbarProperties, IScrollbarAdapters, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { XYChart } from \"../types/XYChart\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DesaturateFilter } from \"../../core/rendering/filters/DesaturateFilter\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarProperties extends IScrollbarProperties { }\r\n\r\n/**\r\n * Defines events for [[XYChartScrollbar]].\r\n */\r\nexport interface IXYChartScrollbarEvents extends IScrollbarEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChartScrollbar]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartScrollbarAdapters extends IScrollbarAdapters, IXYChartScrollbarProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A special version of the Scrollbar that has an XY chart in it.\r\n *\r\n * Used mainly as an advanced scrollbar with a preview for other XY charts.\r\n *\r\n * However, can be used as standalone element.\r\n *\r\n * @see {@link IXYChartScrollbarEvents} for a list of available events\r\n * @see {@link IXYChartScrollbarAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class XYChartScrollbar extends Scrollbar {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYChartScrollbarProperties}\r\n\t */\r\n\tpublic _properties!: IXYChartScrollbarProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChartScrollbarAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChartScrollbarAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChartScrollbarEvents}\r\n\t */\r\n\tpublic _events!: IXYChartScrollbarEvents;\r\n\r\n\t/**\r\n\t * An [[XYSeries]] used to draw a graph on the Scrollbar.\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tprotected _series: List;\r\n\r\n\t/**\r\n\t * A chart element Scrollbar is for.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A chart instance that shows mini-chart within Scrollbar.\r\n\t *\r\n\t * @type {XYChart}\r\n\t */\r\n\tprotected _scrollbarChart: XYChart;\r\n\r\n\t/**\r\n\t * [_unselectedOverlay description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {Sprite}\r\n\t */\r\n\tprotected _unselectedOverlay: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartScrollbar\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tthis.padding(0, 0, 0, 0);\r\n\r\n\t\tlet scrollbarChart: XYChart = this.createChild(XYChart);\r\n\t\tscrollbarChart.shouldClone = false;\r\n\t\tscrollbarChart.margin(0, 0, 0, 0);\r\n\t\tscrollbarChart.padding(0, 0, 0, 0);\r\n\t\tscrollbarChart.interactionsEnabled = false;\r\n\r\n\t\tthis._scrollbarChart = scrollbarChart;\r\n\t\tthis._disposers.push(this._scrollbarChart);\r\n\r\n\t\tthis.minHeight = 60;\r\n\t\tthis.minWidth = 60;\r\n\r\n\t\tlet unselectedOverlay: Sprite = this.createChild(Sprite);\r\n\t\tunselectedOverlay.shouldClone = false;\r\n\t\tunselectedOverlay.setElement(this.paper.add(\"path\"));\r\n\t\tunselectedOverlay.fill = interfaceColors.getFor(\"background\");\r\n\t\tunselectedOverlay.fillOpacity = 0.8;\r\n\t\tunselectedOverlay.interactionsEnabled = false;\r\n\t\tunselectedOverlay.isMeasured = false;\r\n\t\tunselectedOverlay.toBack();\r\n\t\tthis._unselectedOverlay = unselectedOverlay;\r\n\t\tthis._disposers.push(this._unselectedOverlay);\r\n\r\n\t\tscrollbarChart.toBack();\r\n\r\n\t\tthis.background.cornerRadius(0, 0, 0, 0);\r\n\r\n\t\tlet thumbBackground = this.thumb.background;\r\n\t\tthumbBackground.cornerRadius(0, 0, 0, 0);\r\n\t\tthumbBackground.fillOpacity = 0;\r\n\t\tthumbBackground.fill = interfaceColors.getFor(\"background\");\r\n\r\n\t\tlet hoverState = thumbBackground.states.getKey(\"hover\");\r\n\t\tif (hoverState) {\r\n\t\t\thoverState.properties.fillOpacity = 0.2;\r\n\t\t}\r\n\r\n\t\tlet downState = thumbBackground.states.getKey(\"down\");\r\n\t\tif (downState) {\r\n\t\t\tdownState.properties.fillOpacity = 0.4;\r\n\t\t}\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A list of series that are used to draw graph(s) on the scrollbar.\r\n\t *\r\n\t * @readonly\r\n\t * @return {List} Series\r\n\t */\r\n\tpublic get series(): List {\r\n\t\tif (!this._series) {\r\n\t\t\tthis._series = new List();\r\n\t\t\tthis._disposers.push(this._series.events.on(\"inserted\", this.handleSeriesAdded, this, false));\r\n\t\t\tthis._disposers.push(this._series.events.on(\"removed\", this.handleSeriesRemoved, this, false));\r\n\t\t}\r\n\t\treturn this._series;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new series when they are pushed into a `series` list.\r\n\t *\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tprotected handleSeriesAdded(event: IListEvents[\"inserted\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.newValue;\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\tscrollbarChart.zoomOutButton.disabled = true;\r\n\r\n\t\tthis.chart = sourceSeries.chart;\r\n\r\n\t\tlet addXAxis: boolean = true;\r\n\t\tlet addYAxis: boolean = true;\r\n\r\n\t\t// check if we haven't added clone of x or y axis before\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series != sourceSeries) {\r\n\t\t\t\tif (series.xAxis == sourceSeries.xAxis) {\r\n\t\t\t\t\taddXAxis = false;\r\n\t\t\t\t}\r\n\t\t\t\tif (series.yAxis == sourceSeries.yAxis) {\r\n\t\t\t\t\taddYAxis = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tlet series: XYSeries = sourceSeries.clone();\r\n\r\n\t\tif (addXAxis) {\r\n\r\n\t\t\tlet xAxis = sourceSeries.xAxis.clone();\r\n\t\t\tscrollbarChart.xAxes.moveValue(xAxis);\r\n\t\t\txAxis.title.disabled = true;\r\n\t\t\txAxis.rangeChangeDuration = 0;\r\n\t\t\txAxis.id = sourceSeries.uid;\r\n\t\t\txAxis.title.disabled = true;\r\n\r\n\t\t\tlet renderer = xAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.xAxis = xAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\r\n\t\tif (addYAxis) {\r\n\t\t\tlet yAxis: Axis = sourceSeries.yAxis.clone();\r\n\t\t\tscrollbarChart.yAxes.moveValue(yAxis);\r\n\t\t\tyAxis.title.disabled = true;\r\n\t\t\tyAxis.rangeChangeDuration = 0;\r\n\r\n\t\t\tlet renderer = yAxis.renderer;\r\n\t\t\trenderer.ticks.template.disabled = true;\r\n\t\t\trenderer.inside = true;\r\n\t\t\trenderer.line.strokeOpacity = 0;\r\n\t\t\trenderer.minLabelPosition = 0.02;\r\n\t\t\trenderer.maxLabelPosition = 0.98;\r\n\t\t\trenderer.line.disabled = true;\r\n\t\t\trenderer.axisFills.template.disabled = true;\r\n\t\t\trenderer.grid.template.stroke = interfaceColors.getFor(\"background\");\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t\trenderer.grid.template.strokeOpacity = 0.05;\r\n\r\n\t\t\tlet labelsTemplate = renderer.labels.template;\r\n\t\t\tlabelsTemplate.fillOpacity = 0.5;\r\n\r\n\t\t\tseries.yAxis = yAxis;\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// @todo find clone, otherwise there might be probs with multiple axes\r\n\t\t}\r\n\r\n\t\tseries.rangeChangeDuration = 0;\r\n\t\tseries.interpolationDuration = 0;\r\n\t\tseries.defaultState.transitionDuration = 0;\r\n\t\tseries.showOnInit = false;\r\n\r\n\t\tthis._disposers.push(series.events.on(\"validated\", this.zoomOutAxes, this, false));\r\n\r\n\t\t// data might be set drectly on series\r\n\t\tthis._disposers.push(sourceSeries.events.on(\"datavalidated\", () => {\r\n\t\t\tif (series.data != sourceSeries.data) { // data setter doesn't check this\r\n\t\t\t\tseries.data = sourceSeries.data;\r\n\t\t\t}\r\n\t\t}, undefined, false));\r\n\t\tseries.defaultState.properties.visible = true;\r\n\r\n\t\tseries.filters.push(new DesaturateFilter());\r\n\t\tscrollbarChart.series.push(series);\r\n\r\n\t\tthis.updateByOrientation();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateByOrientation() {\r\n\t\tif (this._scrollbarChart) {\r\n\t\t\t$iter.each(this._scrollbarChart.xAxes.iterator(), (xAxis) => {\r\n\t\t\t\tlet renderer = xAxis.renderer;\t\t\t\t\r\n\t\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\t\t\t\t\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\r\n\t\t\t\t\trenderer.minGridDistance = xAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\t$iter.each(this._scrollbarChart.yAxes.iterator(), (yAxis) => {\r\n\t\t\t\tlet renderer = yAxis.renderer;\t\t\t\t\r\n\t\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\t\trenderer.grid.template.disabled = true;\r\n\t\t\t\t\trenderer.labels.template.disabled = true;\r\n\t\t\t\t\trenderer.minGridDistance = 10;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\trenderer.grid.template.disabled = false;\r\n\t\t\t\t\trenderer.labels.template.disabled = false;\t\t\t\t\t\r\n\t\t\t\t\trenderer.minGridDistance = yAxis.clonedFrom.renderer.minGridDistance;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Cleans up after series are removed from Scrollbar.\r\n\t *\r\n\t * @param {IListEvents[\"removed\"]} event Event\r\n\t */\r\n\tprotected handleSeriesRemoved(event: IListEvents[\"removed\"]) {\r\n\t\tlet sourceSeries: XYSeries = event.oldValue;\r\n\t\tsourceSeries.events.off(\"validated\", this.zoomOutAxes, this);\r\n\t}\r\n\r\n\t/**\r\n\t * A chart element that is used to display graphs in the Scrollbar.\r\n\t *\r\n\t * This is not the same as `chart`. It's a totally independent instance of\r\n\t * [[XYChart]] with separate config, series, etc.\r\n\t *\r\n\t * It can be configured just like any other [[XYChart]].\r\n\t *\r\n\t * @readonly\r\n\t * @return {XYChart} Scrollbar's internal chart\r\n\t */\r\n\tpublic get scrollbarChart(): XYChart {\r\n\t\treturn this._scrollbarChart;\r\n\t}\r\n\r\n\t/**\r\n\t * A chart that Scrollbar belongs to.\r\n\t *\r\n\t * @param {XYChart} chart Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart) {\r\n\t\tif (this._chart.get() !== chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"datavalidated\", this.handleDataChanged, this, false));\r\n\t\t\tthis.handleDataChanged();\r\n\t\t\tthis._scrollbarChart.dataProvider = chart; // this makes scrollbar chart do not validate data untill charts' data is validated\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {XYChart} Chart\r\n\t */\r\n\tpublic get chart(): XYChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Scrollbar's internal chart's data when the main chart's data\r\n\t * changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataChanged() {\r\n\t\t//@todo: what if raw data changed?\r\n\t\tif (this.chart.data != this.scrollbarChart.data) {\r\n\t\t\tthis.scrollbarChart.data = this.chart.data;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms out all axes on the internal chart.\r\n\t */\r\n\tprotected zoomOutAxes() {\r\n\t\tlet scrollbarChart: XYChart = this.scrollbarChart;\r\n\t\t$iter.each(scrollbarChart.xAxes.iterator(), (x) => {\r\n\t\t\tx.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t\t$iter.each(scrollbarChart.yAxes.iterator(), (y) => {\r\n\t\t\ty.zoom({ start: 0, end: 1 }, true, true);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates scrollbar thumb.\r\n\t */\r\n\tprotected updateThumb() {\r\n\t\tsuper.updateThumb();\r\n\t\tif (this._unselectedOverlay) {\r\n\t\t\tlet thumb = this.thumb;\r\n\t\t\tlet x: number = thumb.pixelX || 0;\r\n\t\t\tlet y: number = thumb.pixelY || 0;\r\n\t\t\tlet w: number = thumb.pixelWidth || 0;\r\n\t\t\tlet h: number = thumb.pixelHeight || 0;\r\n\r\n\t\t\tlet path: string = \"\";\r\n\r\n\t\t\tif (this.orientation == \"horizontal\") {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: -1,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: x,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: x + w,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: (this.pixelWidth || 0) - x - w,\r\n\t\t\t\t\theight: h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: 0,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: y\r\n\t\t\t\t});\r\n\r\n\t\t\t\tpath += $path.rectToPath({\r\n\t\t\t\t\tx: 0,\r\n\t\t\t\t\ty: y + h,\r\n\t\t\t\t\twidth: w,\r\n\t\t\t\t\theight: (this.pixelHeight || 0) - y - h\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._unselectedOverlay.path = path;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tlet series = config.series[i];\r\n\t\t\t\t\tif ($type.hasValue(series) && $type.isString(series)) {\r\n\t\t\t\t\t\tif (this.map.hasKey(series)) {\r\n\t\t\t\t\t\t\tconfig.series[i] = this.map.getKey(series);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthrow Error(\"XYChartScrollbar error: Series with id `\" + series + \"` does not exist.\");\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChartScrollbar\"] = XYChartScrollbar;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/XYChartScrollbar.ts","/**\r\n * XY Chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IComponentEvents } from \"../../core/Component\";\r\nimport { List, IListEvents } from \"../../core/utils/List\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { Optional } from \"../../core/utils/Type\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererX } from \"../axes/AxisRendererX\";\r\nimport { AxisRendererY } from \"../axes/AxisRendererY\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { XYSeries } from \"../series/XYSeries\";\r\nimport { Scrollbar, IScrollbarEvents } from \"../../core/elements/Scrollbar\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { XYCursor, IXYCursorEvents } from \"../cursors/XYCursor\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IDisposer, MultiDisposer, MutableValueDisposer, Disposer } from \"../../core/utils/Disposer\";\r\nimport { Button } from \"../../core/elements/Button\";\r\nimport { ZoomOutButton } from \"../../core/elements/ZoomOutButton\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport { Ordering } from \"../../core/utils/Order\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { XYChartScrollbar } from \"../elements/XYChartScrollbar\";\r\n\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChartDataItem extends SerialChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {XYChart}\r\n\t */\r\n\tpublic _component!: XYChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart]].\r\n */\r\nexport interface IXYChartDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[XYChart]].\r\n */\r\nexport interface IXYChartProperties extends ISerialChartProperties {\r\n\r\n\t/**\r\n\t * A container that is used as a maske for bullets so that they can't\r\n\t * \"spill\" outside of the plot area.\r\n\t *\r\n\t * @type {[type]}\r\n\t */\r\n\tmaskBullets?: boolean;\r\n\r\n\t/**\r\n\t * Specifies what should chart do if when mouse wheel is rotated.\r\n\t *\r\n\t * @default \"none\"\r\n\t */\r\n\tmouseWheelBehavior?: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\";\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart]].\r\n */\r\nexport interface IXYChartEvents extends ISerialChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChartAdapters extends ISerialChartAdapters, IXYChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates an XY chart, and any derivative chart, like Serial, Date-based, etc.\r\n *\r\n * Basically this is a chart type, that is used to display any chart\r\n * information in a square plot area.\r\n *\r\n * The horizontal and vertical scale is determined by the type of Axis.\r\n *\r\n * The plot types are determined by type of Series.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * let categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * let series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"XYChart\");\r\n *\r\n * // Add Data\r\n * chart.data = [{\r\n * \"country\": \"USA\",\r\n * \"visits\": 3025\r\n * }, {\r\n * \t\"country\": \"China\",\r\n * \t\"visits\": 1882\r\n * }, {\r\n * \t\"country\": \"Japan\",\r\n * \t\"visits\": 1809\r\n * }];\r\n *\r\n * // Add category axis\r\n * var categoryAxis = chart.xAxes.push(new am4charts.CategoryAxis());\r\n * categoryAxis.dataFields.category = \"country\";\r\n *\r\n * // Add value axis\r\n * var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n *\r\n * // Add series\r\n * var series = chart.series.push(new am4charts.ColumnSeries());\r\n * series.name = \"Web Traffic\";\r\n * series.dataFields.categoryX = \"country\";\r\n * series.dataFields.valueY = \"visits\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Category axis\r\n * \t\"xAxes\": [{\r\n * \t\t\"type\": \"CategoryAxis\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Value axis\r\n * \t\"yAxes\": [{\r\n * \t\t\"type\": \"ValueAxis\"\r\n * \t}],\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"ColumnSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"categoryX\": \"country\",\r\n * \t\t\t\"valueY\": \"visits\"\r\n * \t\t},\r\n * \t\t\"name\": \"Web Traffic\"\r\n * \t}],\r\n *\r\n * \t// Cursor\r\n * \t\"cursor\": {},\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"USA\",\r\n * \t\t\"visits\": 3025\r\n * \t}, {\r\n * \t\t\"country\": \"China\",\r\n * \t\t\"visits\": 1882\r\n * \t}, {\r\n * \t\t\"country\": \"Japan\",\r\n * \t\t\"visits\": 1809\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"XYChart\");\r\n * ```\r\n *\r\n *\r\n * @see {@link IXYChartEvents} for a list of available Events\r\n * @see {@link IXYChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart extends SerialChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IXYChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYChartProperties}\r\n\t */\r\n\tpublic _properties!: IXYChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChartAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChartEvents}\r\n\t */\r\n\tpublic _events!: IXYChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {XYSeries}\r\n\t */\r\n\tpublic _seriesType: XYSeries;\r\n\r\n\t/**\r\n\t * A list of horizontal axes.\r\n\t *\r\n\t * @type {List>}\r\n\t */\r\n\tprotected _xAxes: List>;\r\n\r\n\t/**\r\n\t * A list of vertical axes.\r\n\t *\r\n\t * @type {List>}\r\n\t */\r\n\tprotected _yAxes: List>;\r\n\r\n\t/**\r\n\t * A container that holds vertical axes and plot area.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic yAxesAndPlotContainer: Container\r\n\r\n\t/**\r\n\t * A container that holds top axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic topAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds bottom axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic bottomAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds left axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic leftAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container that holds right axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic rightAxesContainer: Container;\r\n\r\n\t/**\r\n\t * A container for plot area.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic plotContainer: Container;\r\n\r\n\t/**\r\n\t * A reference to horizontal [[Scrollbar]].\r\n\t *\r\n\t * @type {Scrollbar}\r\n\t */\r\n\tprotected _scrollbarX: Scrollbar;\r\n\r\n\t/**\r\n\t * A reference to vertical [[Scrollbar]].\r\n\t *\r\n\t * @type {Scrollbar}\r\n\t */\r\n\tprotected _scrollbarY: Scrollbar;\r\n\r\n\t/**\r\n\t * A reference to chart's cursor.\r\n\t *\r\n\t * @type {XYCursor}\r\n\t */\r\n\tpublic _cursor: XYCursor;\r\n\r\n\t/**\r\n\t * A container that chart's cursor is placed in.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tprotected _cursorContainer: Container;\r\n\r\n\t/**\r\n\t * Defines the type of horizontal axis rederer.\r\n\t *\r\n\t * @type {typeof AxisRendererX}\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX = AxisRendererX;\r\n\r\n\t/**\r\n\t * Defines the type of vertical axis rederer.\r\n\t *\r\n\t * @type {typeof AxisRendererY}\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY = AxisRendererY;\r\n\r\n\t/**\r\n\t * Defines the type horizontal axis renderer.\r\n\t *\r\n\t * @type {AxisRendererX}\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererX;\r\n\r\n\t/**\r\n\t * Defines the type of vertical axis renderer.\r\n\t *\r\n\t * @type {AxisRendererY}\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererY;\r\n\r\n\t/**\r\n\t * A button which is used to zoom out the chart.\r\n\t *\r\n\t * @type {Button}\r\n\t */\r\n\tprotected _zoomOutButton: Button;\r\n\r\n\t/**\r\n\t * An element that is used as a mask to contain bullets from spilling out of\r\n\t * the plot area.\r\n\t *\r\n\t * @type {Sprite}\r\n\t */\r\n\tprotected _bulletMask: Sprite;\r\n\r\n\r\n\tprotected _panStartXRange: IRange;\r\n\r\n\tprotected _panStartYRange: IRange;\r\n\r\n\tprotected _panEndXRange: IRange;\r\n\r\n\tprotected _panEndYRange: IRange;\r\n\r\n\tprotected _mouseWheelDisposer: IDisposer;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"XYChart\";\r\n\r\n\t\t// Set defaults\r\n\t\t//this.margin(10, 10, 10, 10);\r\n\t\tthis.maskBullets = true;\r\n\r\n\t\t// Create main chart container\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tchartContainer.layout = \"vertical\";\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Create top axes container\r\n\t\tlet topAxesCont = chartContainer.createChild(Container);\r\n\t\ttopAxesCont.shouldClone = false;\r\n\t\ttopAxesCont.layout = \"vertical\";\r\n\t\ttopAxesCont.width = percent(100);\r\n\t\ttopAxesCont.zIndex = 1;\r\n\t\tthis.topAxesContainer = topAxesCont;\r\n\r\n\t\t// Create vertical axes and plot area container\r\n\t\t// Plot area and vertical axes share the whole width of the chart,\r\n\t\t// so we need to put then into a separate container so that layouting\r\n\t\t// engine takes care of the positioning\r\n\t\tlet yAxesAndPlotCont = chartContainer.createChild(Container);\r\n\t\tyAxesAndPlotCont.shouldClone = false;\r\n\t\tyAxesAndPlotCont.layout = \"horizontal\";\r\n\t\tyAxesAndPlotCont.width = percent(100);\r\n\t\tyAxesAndPlotCont.height = percent(100);\r\n\t\tyAxesAndPlotCont.zIndex = 0;\r\n\t\tthis.yAxesAndPlotContainer = yAxesAndPlotCont;\r\n\r\n\t\t// Create a container for bottom axes\r\n\t\tlet bottomAxesCont = chartContainer.createChild(Container);\r\n\t\tbottomAxesCont.shouldClone = false;\r\n\t\tbottomAxesCont.width = percent(100);\r\n\t\tbottomAxesCont.layout = \"vertical\";\r\n\t\tbottomAxesCont.zIndex = 1;\r\n\t\tthis.bottomAxesContainer = bottomAxesCont;\r\n\r\n\t\t// Create a container for left-side axes\r\n\t\tlet leftAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tleftAxesCont.shouldClone = false;\r\n\t\tleftAxesCont.layout = \"horizontal\";\r\n\t\tleftAxesCont.height = percent(100);\r\n\t\tleftAxesCont.contentAlign = \"right\";\r\n\t\tleftAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tleftAxesCont.zIndex = 1;\r\n\t\tthis.leftAxesContainer = leftAxesCont;\r\n\r\n\t\t// Create a container for plot area\r\n\t\tlet plotCont = yAxesAndPlotCont.createChild(Container);\r\n\t\tplotCont.shouldClone = false;\r\n\t\tplotCont.height = percent(100);\r\n\t\tplotCont.width = percent(100);\r\n\t\t// Create transparend background for plot container so that hover works\r\n\t\t// on all of it\r\n\t\tplotCont.background.fillOpacity = 0;\r\n\t\tthis.plotContainer = plotCont;\r\n\r\n\t\t// must go below plot container\r\n\t\tthis.mouseWheelBehavior = \"none\";\r\n\r\n\t\tthis._cursorContainer = plotCont;\r\n\r\n\t\t// Create a container for right-side axes\r\n\t\tlet rightAxesCont = yAxesAndPlotCont.createChild(Container);\r\n\t\trightAxesCont.shouldClone = false;\r\n\t\trightAxesCont.layout = \"horizontal\";\r\n\t\trightAxesCont.height = percent(100);\r\n\t\trightAxesCont.zIndex = 1;\r\n\t\trightAxesCont.events.on(\"transformed\", this.updateXAxesMargins, this, false);\r\n\t\tthis.rightAxesContainer = rightAxesCont;\r\n\r\n\t\tthis.seriesContainer.parent = plotCont;\r\n\t\tthis.bulletsContainer.parent = plotCont;\r\n\r\n\t\tlet zoomOutButton = plotCont.createChild(ZoomOutButton);\r\n\t\tzoomOutButton.shouldClone = false;\r\n\t\tzoomOutButton.align = \"right\";\r\n\t\tzoomOutButton.valign = \"top\";\r\n\t\tzoomOutButton.zIndex = Number.MAX_SAFE_INTEGER;\r\n\t\tzoomOutButton.marginTop = 5;\r\n\t\tzoomOutButton.marginRight = 5;\r\n\r\n\t\tzoomOutButton.hide(0);\r\n\t\tthis.zoomOutButton = zoomOutButton;\r\n\r\n\t\tthis._bulletMask = this.plotContainer;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tthis.zoomOutButton.exportable = false;\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"X/Y chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tthis.seriesContainer.toFront();\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tif (this.maskBullets) {\r\n\t\t\tthis.bulletsContainer.mask = this._bulletMask;\r\n\t\t}\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers a redrawing of all chart's series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updatePlotElements(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers data (re)validation which in turn can cause a redraw of the\r\n\t * whole chart or just aprticular series / elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\t// tell axes that data changed\r\n\t\tif (this._parseDataFrom == 0) {\r\n\t\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\t\taxis.dataChangeUpdate();\r\n\t\t\t});\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tseries.dataChangeUpdate();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tsuper.validateData();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates margins for horizontal axes based on settings and available space.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateXAxesMargins(): void {\r\n\r\n\t\tlet leftAxesWidth = this.leftAxesContainer.measuredWidth;\r\n\t\tlet rightAxesWidth = this.rightAxesContainer.measuredWidth;\r\n\t\tlet bottomAxesCont = this.bottomAxesContainer;\r\n\r\n\t\tif (bottomAxesCont.paddingLeft != leftAxesWidth || bottomAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\tbottomAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\tbottomAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\r\n\t\tlet topAxesCont = this.topAxesContainer;\r\n\r\n\t\tif (topAxesCont.paddingLeft != leftAxesWidth || topAxesCont.paddingRight != rightAxesWidth) {\r\n\t\t\ttopAxesCont.paddingLeft = leftAxesWidth;\r\n\t\t\ttopAxesCont.paddingRight = rightAxesWidth;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the horizontal axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"propertychanged\"]} event An event object\r\n\t */\r\n\tpublic handleXAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateXAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers an update on the vertical axis when one of its properties\r\n\t * change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"propertychanged\"]} event An event object\r\n\t */\r\n\tpublic handleYAxisChange(event: AMEvent[\"propertychanged\"]) {\r\n\t\tthis.updateYAxis(event.target);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new horizontal (X) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IListEvents[\"inserted\"]} event Axis insert event\r\n\t */\r\n\tpublic processXAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererX();\r\n\t\taxis.axisLetter = \"X\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleXAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleXAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleXAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateXAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up a new vertical (Y) axis when it is added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IListEvents[\"inserted\"]} event Axis insert event\r\n\t */\r\n\tpublic processYAxis(event: IListEvents[\"inserted\"]): void {\r\n\r\n\t\tlet axis: Axis = event.newValue;\r\n\t\taxis.chart = this;\r\n\r\n\t\taxis.renderer = new this._axisRendererY();\r\n\t\taxis.axisLetter = \"Y\";\r\n\r\n\t\taxis.renderer.observe([\"opposite\", \"inside\", \"inversed\", \"minGridDistance\"], this.handleYAxisChange, this);\r\n\t\taxis.events.on(\"startchanged\", this.handleYAxisRangeChange, this, false);\r\n\t\taxis.events.on(\"endchanged\", this.handleYAxisRangeChange, this, false);\r\n\r\n\t\t// Although axis does not use data directly, we set dataProvider here\r\n\t\t// (but not add to chart data users) to hold up rendering before data\r\n\t\t// is parsed (system handles this)\r\n\t\taxis.dataProvider = this;\r\n\r\n\t\tthis.updateYAxis(axis.renderer);\r\n\t\tthis.processAxis(axis);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates horizontal (X) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.zoomAxes(this.xAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarX, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Shows or hides the Zoom Out button depending on whether the chart is fully\r\n\t * zoomed out or not.\r\n\t */\r\n\tprotected toggleZoomOutButton() {\r\n\t\tif (this.zoomOutButton) {\r\n\t\t\tlet show = false;\r\n\r\n\t\t\t$iter.eachContinue(this.xAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\t\t\t$iter.eachContinue(this.yAxes.iterator(), (axis): boolean => {\r\n\t\t\t\tif ($math.round(axis.start, 3) != 0 || $math.round(axis.end, 3) != 1) {\r\n\t\t\t\t\tshow = true;\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t\treturn true;\r\n\t\t\t});\r\n\r\n\t\t\tif (!this.seriesAppeared) {\r\n\t\t\t\tshow = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (show) {\r\n\t\t\t\tthis.zoomOutButton.show();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.zoomOutButton.hide();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * moved this check to a separate method so that we could override it in TreeMapSeries\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\tlet appeared: boolean = false;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (!series.appeared) {\r\n\t\t\t\tappeared = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t})\r\n\t\treturn appeared;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates vertical (Y) scrollbar and other horizontal axis whenever axis'\r\n\t * value range changes.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tlet range: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.zoomAxes(this.yAxes, range, true);\r\n\t\t}\r\n\t\tthis.toggleZoomOutButton();\r\n\t\tthis.updateScrollbar(this.scrollbarY, range);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a relative scrollbar whenever data range of the axis changes.\r\n\t *\r\n\t * @param {Scrollbar} scrollbar Scrollbar instance\r\n\t * @param {IRange} range New data (values) range of the axis\r\n\t */\r\n\tprotected updateScrollbar(scrollbar: Scrollbar, range: IRange): void {\r\n\t\tif (scrollbar) {\r\n\t\t\tscrollbar.skipRangeEvents();\r\n\t\t\tscrollbar.start = range.start;\r\n\t\t\tscrollbar.end = range.end;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a common range of values between a list of axes.\r\n\t *\r\n\t * This is used to synchronize the zoom between multiple axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {List} axes A list of axes\r\n\t * @return {IRange} Common value range\r\n\t */\r\n\tpublic getCommonAxisRange(axes: List): IRange {\r\n\t\tlet start: Optional;\r\n\t\tlet end: Optional;\r\n\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tlet axisStart = axis.start;\r\n\t\t\tlet axisEnd = axis.end;\r\n\r\n\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\taxisStart = 1 - axis.end;\r\n\t\t\t\taxisEnd = 1 - axis.start;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNumber(start) || (axisStart < start)) {\r\n\t\t\t\tstart = axisStart;\r\n\t\t\t}\r\n\t\t\tif (!$type.isNumber(end) || (axisEnd > end)) {\r\n\t\t\t\tend = axisEnd;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn { start: start, end: end };\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.topAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.bottomAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\tlet axis = renderer.axis;\r\n\t\tif (renderer.opposite) {\r\n\t\t\taxis.parent = this.rightAxesContainer;\r\n\t\t\taxis.toBack();\r\n\t\t}\r\n\t\telse {\r\n\t\t\taxis.parent = this.leftAxesContainer;\r\n\t\t\taxis.toFront();\r\n\t\t}\r\n\t\tif (axis.renderer) {\r\n\t\t\taxis.renderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates an Axis for use with this chart, e.g. sets proper renderer\r\n\t * and containers for placement.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\t// Value axis does not use data directly, only category axis does\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\tthis._dataUsers.moveValue(axis);\r\n\t\t}\r\n\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\r\n\t\trenderer.gridContainer.parent = this.plotContainer;\r\n\t\trenderer.gridContainer.toBack();\r\n\r\n\t\trenderer.breakContainer.parent = this.plotContainer;\r\n\t\trenderer.breakContainer.toFront();\r\n\t\trenderer.breakContainer.zIndex = 10;\r\n\r\n\t\taxis.addDisposer(new Disposer(() => {\r\n\t\t\tthis.dataUsers.removeValue(axis);\r\n\t\t}))\r\n\r\n\t\tthis.plotContainer.events.on(\"maxsizechanged\", () => {\r\n\t\t\tif (this.inited) {\r\n\t\t\t\taxis.invalidateDataItems();\r\n\t\t\t}\r\n\t\t}, axis, false);\r\n\t}\r\n\r\n\t/**\r\n\t * A list of horizontal (X) axes.\r\n\t *\r\n\t * @return {List} List of axes\r\n\t */\r\n\tpublic get xAxes(): List> {\r\n\t\tif (!this._xAxes) {\r\n\t\t\tthis._xAxes = new List>();\r\n\t\t\tthis._xAxes.events.on(\"inserted\", this.processXAxis, this, false);\r\n\t\t\tthis._xAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._xAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected handleAxisRemoval(event: IListEvents[\"removed\"]) {\r\n\t\tlet axis = event.oldValue;\r\n\t\tthis.dataUsers.removeValue(axis); // need to remove, as it might not be disposed\r\n\t\tif (axis.autoDispose) {\r\n\t\t\taxis.dispose();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of vertical (Y) axes.\r\n\t *\r\n\t * @return {List} List of axes\r\n\t */\r\n\tpublic get yAxes(): List> {\r\n\t\tif (!this._yAxes) {\r\n\t\t\tthis._yAxes = new List>();\r\n\t\t\tthis._yAxes.events.on(\"inserted\", this.processYAxis, this, false);\r\n\t\t\tthis._yAxes.events.on(\"removed\", this.handleAxisRemoval, this, false);\r\n\t\t}\r\n\r\n\t\treturn this._yAxes;\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new [[XYSeries]] object with required parameters when it is\r\n\t * added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tpublic handleSeriesAdded(event: IListEvents[\"inserted\"]): void {\r\n\t\ttry {\r\n\t\t\tsuper.handleSeriesAdded(event);\r\n\t\t\tlet series: XYSeries = event.newValue;\r\n\t\t\tseries.xAxis; // this is enough to get axis, handled in getter\r\n\t\t\tseries.yAxis; // this is enough to get axis, handled in getter\r\n\r\n\t\t\tif (series.fill == undefined) {\r\n\t\t\t\tseries.fill = this.colors.next();\r\n\t\t\t}\r\n\r\n\t\t\tif (series.stroke == undefined) {\r\n\t\t\t\tseries.stroke = series.fill;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\tthis.raiseCriticalError(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Chart's [[Cursor]].\r\n\t *\r\n\t * @param {XYCursor} cursor Cursor\r\n\t */\r\n\tpublic set cursor(cursor: this[\"_cursor\"]) {\r\n\t\tif (this._cursor != cursor) {\r\n\t\t\tif (this._cursor) {\r\n\t\t\t\tthis.removeDispose(this._cursor);\r\n\t\t\t}\r\n\r\n\t\t\tthis._cursor = cursor;\r\n\r\n\t\t\tif (cursor) {\r\n\t\t\t\t// TODO this is wrong, fix it\r\n\t\t\t\tthis._disposers.push(cursor);\r\n\t\t\t\tcursor.chart = this;\r\n\t\t\t\tcursor.parent = this._cursorContainer;\r\n\t\t\t\tcursor.events.on(\"cursorpositionchanged\", this.handleCursorPositionChange, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomstarted\", this.handleCursorZoomStart, this, false);\r\n\t\t\t\tcursor.events.on(\"zoomended\", this.handleCursorZoomEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"panstarted\", this.handleCursorPanStart, this, false);\r\n\t\t\t\tcursor.events.on(\"panning\", this.handleCursorPanning, this, false);\r\n\t\t\t\tcursor.events.on(\"panended\", this.handleCursorPanEnd, this, false);\r\n\t\t\t\tcursor.events.on(\"behaviorcanceled\", this.handleCursorCanceled, this, false);\r\n\t\t\t\tcursor.events.on(\"hidden\", this.handleHideCursor, this, false);\r\n\t\t\t\tcursor.zIndex = Number.MAX_SAFE_INTEGER - 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {XYCursor} Cursor\r\n\t */\r\n\tpublic get cursor(): this[\"_cursor\"] {\r\n\t\treturn this._cursor;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new [[Cursor]] suitable for this chart type.\r\n\t *\r\n\t * @return {this} New cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new XYCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs tasks when the cursor's position changes, e.g. shows proper\r\n\t * tooltips on axes and series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleCursorPositionChange(): void {\r\n\r\n\t\tlet cursor = this.cursor;\r\n\r\n\t\tif (cursor.visible && !cursor.isHiding) {\r\n\t\t\tlet xPosition: number = this.cursor.xPosition;\r\n\t\t\tlet yPosition: number = this.cursor.yPosition;\r\n\r\n\t\t\tthis.showSeriesTooltip({\r\n\t\t\t\tx: xPosition,\r\n\t\t\t\ty: yPosition\r\n\t\t\t});\r\n\r\n\t\t\tlet exceptAxis:Axis;\r\n\t\t\tlet snapToSeries = cursor.snapToSeries;\r\n\t\t\tif(snapToSeries){\r\n\t\t\t\tif(snapToSeries.baseAxis == snapToSeries.xAxis){\r\n\t\t\t\t\texceptAxis = snapToSeries.yAxis;\r\n\t\t\t\t}\r\n\t\t\t\tif(snapToSeries.baseAxis == snapToSeries.yAxis){\r\n\t\t\t\t\texceptAxis = snapToSeries.xAxis;\r\n\t\t\t\t}\r\n\t\t\t}\t\r\n\r\n\t\t\tthis.showAxisTooltip(this.xAxes, xPosition, exceptAxis);\r\n\t\t\tthis.showAxisTooltip(this.yAxes, yPosition, exceptAxis);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides all cursor-related tooltips when the cursor itself is hidden.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleHideCursor(): void {\r\n\t\tthis.hideObjectTooltip(this.xAxes);\r\n\t\tthis.hideObjectTooltip(this.yAxes);\r\n\t\tthis.hideObjectTooltip(this.series);\r\n\r\n\t\tthis.updateSeriesLegend();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates values for each series' legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSeriesLegend(): void {\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.updateLegendValue();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Hides a tooltip for a list of objects.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {List} sprites A list of sprites to hide tooltip for\r\n\t */\r\n\tpublic hideObjectTooltip(sprites: List): void {\r\n\t\t$iter.each(sprites.iterator(), (sprite) => {\r\n\t\t\tsprite.hideTooltip(0);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Shows a tooltip for all chart's series, using specific coordinates as a\r\n\t * reference point.\r\n\t *\r\n\t * The tooltip might be shown at different coordinates depending on the\r\n\t * actual data point's position, overlapping with other tooltips, etc.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint} position Reference point\r\n\t */\r\n\tpublic showSeriesTooltip(position?: IPoint): void {\r\n\r\n\t\tif (!position) {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tseries.hideTooltip();\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet topLeft = $utils.spritePointToSvg({ x: -0.5, y: -0.5 }, this.plotContainer);\r\n\t\tlet bottomRight = $utils.spritePointToSvg({ x: this.plotContainer.pixelWidth + 0.5, y: this.plotContainer.pixelHeight + 0.5 }, this.plotContainer);\r\n\r\n\t\tlet seriesPoints: { point: IPoint, series: XYSeries }[] = [];\r\n\t\tlet sum = 0;\r\n\t\tthis.series.each((series) => {\r\n\t\t\t//if (series.tooltipText || series.tooltipHTML) { // not good, bullets are not hovered then\r\n\t\t\t\r\n\t\t\tlet point = series.showTooltipAtPosition(position.x, position.y);\r\n\t\t\tif(point){\r\n\t\t\t\tseries.tooltip.setBounds({ x: 0, y: 0, width: this.pixelWidth, height: this.pixelHeight });\t\r\n\t\t\t}\r\n\r\n\t\t\tif (point && $math.isInRectangle(point, { x: topLeft.x, y: topLeft.y, width: bottomRight.x - topLeft.x, height: bottomRight.y - topLeft.y })) {\r\n\t\t\t\tseriesPoints.push({ point: point, series: series });\r\n\t\t\t\tsum += point.y;\r\n\t\t\t}\r\n\t\t\t//}\r\n\t\t});\r\n\r\n\t\tseriesPoints.sort((a, b) => {\r\n\t\t\tif (a.point.y > b.point.y) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\telse if (a.point.y < b.point.y) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tlet averageY = sum / seriesPoints.length;\r\n\t\tlet maxY = $utils.svgPointToDocument({ x: 0, y: 0 }, this.svgContainer.SVGContainer).y;\r\n\r\n\t\tif (seriesPoints.length > 0) {\r\n\r\n\t\t\tlet top = topLeft.y;\r\n\t\t\tlet bottom = bottomRight.y;\r\n\r\n\t\t\tlet topPoint = $utils.spritePointToDocument({ x: 0, y: top }, this);\r\n\r\n\t\t\tlet dropped = false;\r\n\r\n\t\t\tif (averageY > top + (bottom - top) / 2) {\r\n\t\t\t\tlet nextHeight = bottom;\r\n\t\t\t\tfor (let i = seriesPoints.length - 1; i >= 0; i--) {\r\n\t\t\t\t\tlet series = seriesPoints[i].series;\r\n\t\t\t\t\tlet tooltip = series.tooltip;\r\n\t\t\t\t\tlet pointY = seriesPoints[i].point.y;\r\n\r\n\t\t\t\t\ttooltip.setBounds({ x: 0, y: -maxY, width: this.pixelWidth, height: nextHeight + maxY });\r\n\r\n\t\t\t\t\tif (tooltip.invalid) {\r\n\t\t\t\t\t\ttooltip.validate();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttooltip.toBack();\r\n\t\t\t\t\tnextHeight = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY - tooltip.pixelY + pointY - tooltip.pixelMarginTop }, tooltip).y;\r\n\r\n\t\t\t\t\tif (nextHeight < -maxY) {\r\n\t\t\t\t\t\tdropped = true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (averageY <= top + (bottom - top) / 2 || dropped) {\r\n\t\t\t\tlet nextY = top;\r\n\t\t\t\tfor (let i = 0, len = seriesPoints.length; i < len; i++) {\r\n\t\t\t\t\tlet series = seriesPoints[i].series;\r\n\t\t\t\t\tlet pointY = seriesPoints[i].point.y;\r\n\t\t\t\t\tlet tooltip = series.tooltip;\r\n\t\t\t\t\ttooltip.setBounds({ x: 0, y: nextY, width: this.pixelWidth, height: bottom });\r\n\r\n\t\t\t\t\tif (tooltip.invalid) {\r\n\t\t\t\t\t\ttooltip.validate();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttooltip.toBack();\r\n\r\n\t\t\t\t\tnextY = $utils.spritePointToSvg({ x: 0, y: tooltip.label.pixelY + tooltip.label.measuredHeight - tooltip.pixelY + pointY + tooltip.pixelMarginBottom }, tooltip).y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Shows tooltips for a list of axes at specific position.\r\n\t *\r\n\t * Position might be X coordinate for horizontal axes, and Y coordinate for\r\n\t * vertical axes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {List} axes List of axes to show tooltip on\r\n\t * @param {number} position Position (px)\r\n\t */\r\n\tpublic showAxisTooltip(axes: List, position: number, except?:Axis): void {\r\n\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\tif(axis != except){\r\n\t\t\t\tif (this.dataItems.length > 0 || axis.dataItems.length > 0) {\t\t\t\t\r\n\t\t\t\t\taxis.showTooltipAtPosition(position);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Recalculates the value range for the axis taking into account zoom level & inversed.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t * @param {IRange} range Range\r\n\t * @return {IRange} Modified range\r\n\t */\r\n\tpublic getUpdatedRange(axis: Axis, range: IRange): IRange {\r\n\r\n\t\tif (!axis) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet start: number;\r\n\t\tlet end: number;\r\n\t\tlet inversed = axis.renderer.inversed;\r\n\r\n\t\tif (axis.renderer instanceof AxisRendererY) {\r\n\t\t\trange = $math.invertRange(range);\r\n\t\t}\r\n\r\n\t\tif (inversed) {\r\n\t\t\t$math.invertRange(range);\r\n\r\n\t\t\tstart = 1 - axis.end;\r\n\t\t\tend = 1 - axis.start;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstart = axis.start;\r\n\t\t\tend = axis.end;\r\n\t\t}\r\n\r\n\t\tlet difference: number = end - start;\r\n\r\n\t\treturn {\r\n\t\t\tstart: start + range.start * difference,\r\n\t\t\tend: start + range.end * difference\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user finishes zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param {IXYCursorEvents[\"zoomended\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomEnd(event: IXYCursorEvents[\"zoomended\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tif (behavior == \"zoomX\" || behavior == \"zoomXY\") {\r\n\t\t\tlet xRange: IRange = cursor.xRange;\r\n\t\t\tif (xRange && this.xAxes.length > 0) {\r\n\t\t\t\txRange = this.getUpdatedRange(this.xAxes.getIndex(0), xRange);\r\n\t\t\t\txRange.priority = \"start\";\r\n\t\t\t\tthis.zoomAxes(this.xAxes, xRange);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (behavior == \"zoomY\" || behavior == \"zoomXY\") {\r\n\t\t\tlet yRange: IRange = cursor.yRange;\r\n\t\t\tif (yRange && this.yAxes.length > 0) {\r\n\t\t\t\tyRange = this.getUpdatedRange(this.yAxes.getIndex(0), yRange);\r\n\t\t\t\tyRange.priority = \"start\";\r\n\t\t\t\tthis.zoomAxes(this.yAxes, yRange);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param {IXYCursorEvents[\"panning\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanStart(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\tif (xAxis) {\r\n\t\t\tthis._panStartXRange = { start: xAxis.start, end: xAxis.end };\r\n\t\t}\r\n\r\n\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\tif (yAxis) {\r\n\t\t\tthis._panStartYRange = { start: yAxis.start, end: yAxis.end };\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user ends panning\r\n\t *\r\n\t * @param {IXYCursorEvents[\"panning\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanEnd(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\r\n\t\tif (this._panEndXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndXRange;\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndXRange = undefined;\r\n\t\t\tthis._panStartXRange = undefined;\r\n\t\t}\r\n\t\tif (this._panEndYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panEndRange = this._panEndYRange;\r\n\r\n\t\t\tlet delta = 0;\r\n\t\t\tif (panEndRange.start < 0) {\r\n\t\t\t\tdelta = panEndRange.start;\r\n\t\t\t}\r\n\t\t\tif (panEndRange.end > 1) {\r\n\t\t\t\tdelta = panEndRange.end - 1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: panEndRange.start - delta, end: panEndRange.end - delta }, false, true);\r\n\t\t\tthis._panEndYRange = undefined;\r\n\t\t\tthis._panStartYRange = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected handleCursorCanceled(): void {\r\n\t\tthis._panEndXRange = undefined;\r\n\t\tthis._panStartXRange = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user is panning chart plot using chart cursor.\r\n\t *\r\n\t * @param {IXYCursorEvents[\"panning\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorPanning(event: IXYCursorEvents[\"panning\"]): void {\r\n\t\tlet cursor: XYCursor = this.cursor;\r\n\t\tlet behavior = cursor.behavior;\r\n\t\tlet maxPanOut = cursor.maxPanOut;\r\n\t\tif (this._panStartXRange && (behavior == \"panX\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartXRange;\r\n\t\t\tlet range = cursor.xRange;\r\n\r\n\t\t\tlet difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start;\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(range.start + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndXRange = newRange;\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, newRange, false, false, cursor.maxPanOut);\r\n\t\t}\r\n\r\n\t\tif (this._panStartYRange && (behavior == \"panY\" || behavior == \"panXY\")) {\r\n\t\t\tlet panStartRange = this._panStartYRange;\r\n\t\t\tlet range = cursor.yRange;\r\n\r\n\t\t\tlet difference = panStartRange.end - panStartRange.start;\r\n\t\t\tlet delta = range.start;\r\n\r\n\t\t\tlet newStart = Math.max(-maxPanOut, delta + panStartRange.start);\r\n\t\t\tlet newEnd = Math.min(range.start + panStartRange.end, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStart <= 0) {\r\n\t\t\t\tnewEnd = newStart + difference;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEnd >= 1) {\r\n\t\t\t\tnewStart = newEnd - difference;\r\n\t\t\t}\r\n\r\n\t\t\tlet newRange = {\r\n\t\t\t\tstart: newStart,\r\n\t\t\t\tend: newEnd\r\n\t\t\t}\r\n\t\t\tthis._panEndYRange = newRange;\r\n\t\t\tthis.zoomAxes(this.yAxes, newRange, false, false, cursor.maxPanOut);\r\n\t\t}\r\n\r\n\t\tthis.handleHideCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Performs zoom and other operations when user starts zooming using chart\r\n\t * cursor, e.g. zooms axes.\r\n\t *\r\n\t * @param {IXYCursorEvents[\"zoomended\"]} event Cursor's event\r\n\t */\r\n\tprotected handleCursorZoomStart(event: IXYCursorEvents[\"zoomstarted\"]): void {\r\n\r\n\t\t// Nothing here\r\n\t\t// This method is here only as a \"placeholder\" for extending classes to\r\n\t\t// override if necessary\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal (X) scrollbar.\r\n\t *\r\n\t * @param {Scrollbar} scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarX(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarX) {\r\n\t\t\tthis.removeDispose(this._scrollbarX);\r\n\t\t}\r\n\t\tthis._scrollbarX = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.topAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toBack();\r\n\t\t\tscrollbar.orientation = \"horizontal\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleXScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet xAxis = this.xAxes.getIndex(0);\r\n\t\t\t\tif (xAxis) {\r\n\t\t\t\t\targ.value = xAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Scrollbar} Scrollbar\r\n\t */\r\n\tpublic get scrollbarX(): Scrollbar {\r\n\t\treturn this._scrollbarX;\r\n\t}\r\n\r\n\t/**\r\n\t * Vertical (Y) scrollbar.\r\n\t *\r\n\t * @param {Scrollbar} scrollbar Scrollbar\r\n\t */\r\n\tpublic set scrollbarY(scrollbar: Scrollbar) {\r\n\t\tif (this._scrollbarY) {\r\n\t\t\tthis.removeDispose(this._scrollbarY);\r\n\t\t}\r\n\t\tthis._scrollbarY = scrollbar;\r\n\r\n\t\tif (scrollbar) {\r\n\t\t\tthis._disposers.push(scrollbar);\r\n\t\t\tscrollbar.parent = this.rightAxesContainer;\r\n\t\t\tscrollbar.startGrip.exportable = false;\r\n\t\t\tscrollbar.endGrip.exportable = false;\r\n\t\t\tscrollbar.toFront();\r\n\t\t\tscrollbar.orientation = \"vertical\";\r\n\t\t\tscrollbar.events.on(\"rangechanged\", this.handleYScrollbarChange, this, false);\r\n\t\t\t// accessibility related\r\n\t\t\tscrollbar.adapter.add(\"positionValue\", (arg) => {\r\n\t\t\t\tlet yAxis = this.yAxes.getIndex(0);\r\n\t\t\t\tif (yAxis) {\r\n\t\t\t\t\targ.value = yAxis.getPositionLabel(arg.position);\r\n\t\t\t\t}\r\n\t\t\t\treturn arg;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Scrollbar} Scrollbar\r\n\t */\r\n\tpublic get scrollbarY(): Scrollbar {\r\n\t\treturn this._scrollbarY;\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the horizontal (X) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param {AMEvent[\"rangechanged\"]} event Scrollbar range change event\r\n\t */\r\n\tprotected handleXScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\tlet range = scrollbar.range;\r\n\t\tif(range.end == 1){\r\n\t\t\trange.priority = \"end\";\r\n\t\t}\r\n\t\tif(range.start == 0){\r\n\t\t\trange.priority = \"start\";\r\n\t\t}\t\t\r\n\t\trange = this.zoomAxes(this.xAxes, range);\r\n\t\tscrollbar.fixRange(range);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes affected by the vertical (Y) scrollbar when the selection\r\n\t * on it changes.\r\n\t *\r\n\t * @param {AMEvent[\"rangechanged\"]} event Scrollbar range change event\r\n\t */\r\n\tprotected handleYScrollbarChange(event: AMEvent[\"rangechanged\"]): void {\r\n\t\tlet scrollbar: Scrollbar = event.target;\r\n\t\tlet range: IRange = this.zoomAxes(this.yAxes, scrollbar.range);\r\n\t\tscrollbar.fixRange(range);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axes that are affected by to specific relative range.\r\n\t *\r\n\t * @param {List} axes List of axes to zoom\r\n\t * @param {IRange} range Range of values to zoom to (0-1)\r\n\t * @param {boolean} instantly If set to `true` will skip zooming animation\r\n\t * @return {IRange} Recalculated range that is common to all involved axes\r\n\t */\r\n\tprotected zoomAxes(axes: List>, range: IRange, instantly?: boolean, round?: boolean, declination?:number): IRange {\r\n\t\tlet realRange: IRange = { start: 0, end: 1 };\r\n\r\n\t\tthis.showSeriesTooltip(); // hides\r\n\r\n\t\tif (!this.dataInvalid) {\r\n\t\t\t$iter.each(axes.iterator(), (axis) => {\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\trange = $math.invertRange(range);\r\n\t\t\t\t}\r\n\r\n\t\t\t\taxis.hideTooltip(0);\r\n\r\n\t\t\t\tif (round) {\r\n\t\t\t\t\tlet diff = range.end - range.start;\r\n\t\t\t\t\trange.start = axis.roundPosition(range.start + 0.0001, 0);\r\n\t\t\t\t\trange.end = range.start + diff;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet axisRange: IRange = axis.zoom(range, instantly, instantly, declination);\r\n\r\n\t\t\t\tif (axis.renderer.inversed) {\r\n\t\t\t\t\taxisRange = $math.invertRange(axisRange);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trealRange = axisRange;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn realRange;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if bullet container is masked.\r\n\t *\r\n\t * If it is set to `true`, any bullets that do not fit into bullet container\r\n\t * will be clipped off. Settting to `false` will allow bullets to \"spill out\"\r\n\t * of the plot area so they are not cut off.\r\n\t *\r\n\t * @param {boolean} value Mask bullet container?\r\n\t */\r\n\tpublic set maskBullets(value: boolean) {\r\n\t\tthis.setPropertyValue(\"maskBullets\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Mask bullet container?\r\n\t */\r\n\tpublic get maskBullets(): boolean {\r\n\t\treturn this.getPropertyValue(\"maskBullets\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Handles mouse wheel event.\r\n\t *\r\n\t * @param {AMEvent[\"wheel\"]} event Original event\r\n\t */\r\n\tprotected handleWheel(event: AMEvent[\"wheel\"]) {\r\n\t\tlet plotContainer = this.plotContainer;\r\n\t\tlet svgPoint: IPoint = $utils.documentPointToSvg(event.point, this.htmlContainer, this.svgContainer.cssScale);\r\n\t\tlet plotPoint = $utils.svgPointToSprite(svgPoint, plotContainer);\r\n\t\tlet shift = event.shift.y;\r\n\r\n\t\tlet rangeX: IRange = this.getCommonAxisRange(this.xAxes);\r\n\t\tlet rangeY: IRange = this.getCommonAxisRange(this.yAxes);\r\n\r\n\t\tlet shiftStep = 0.05;\r\n\r\n\t\tlet maxPanOut = 0;\r\n\r\n\t\tlet mouseWheelBehavior = this.mouseWheelBehavior;\r\n\r\n\t\tif (mouseWheelBehavior == \"panX\" || mouseWheelBehavior == \"panXY\") {\r\n\r\n\t\t\tlet differenceX = rangeX.end - rangeX.start;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartX <= 0) {\r\n\t\t\t\tnewEndX = newStartX + differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndX >= 1) {\r\n\t\t\t\tnewStartX = newEndX - differenceX;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"panY\" || mouseWheelBehavior == \"panXY\") {\r\n\t\t\tshift *= -1;\r\n\t\t\tlet differenceY = rangeY.end - rangeY.start;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start + shiftStep * shift / 100);\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100, 1 + maxPanOut);\r\n\r\n\t\t\tif (newStartY <= 0) {\r\n\t\t\t\tnewEndY = newStartY + differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tif (newEndY >= 1) {\r\n\t\t\t\tnewStartY = newEndY - differenceY;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomX\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationX = plotPoint.x / plotContainer.maxWidth;\r\n\r\n\t\t\tlet newStartX = Math.max(-maxPanOut, rangeX.start - shiftStep * shift / 100 * locationX);\r\n\t\t\tnewStartX = Math.min(newStartX, locationX);\r\n\r\n\t\t\tlet newEndX = Math.min(rangeX.end + shiftStep * shift / 100 * (1 - locationX), 1 + maxPanOut);\r\n\t\t\tnewEndX = Math.max(newEndX, locationX);\r\n\r\n\t\t\tthis.zoomAxes(this.xAxes, { start: newStartX, end: newEndX });\r\n\t\t}\r\n\r\n\t\tif (mouseWheelBehavior == \"zoomY\" || mouseWheelBehavior == \"zoomXY\") {\r\n\t\t\tlet locationY = plotPoint.y / plotContainer.maxHeight;\r\n\r\n\t\t\tlet newStartY = Math.max(-maxPanOut, rangeY.start - shiftStep * shift / 100 * (1 - locationY));\r\n\t\t\tnewStartY = Math.min(newStartY, locationY);\r\n\r\n\t\t\tlet newEndY = Math.min(rangeY.end + shiftStep * shift / 100 * locationY, 1 + maxPanOut);\r\n\t\t\tnewEndY = Math.max(newEndY, locationY);\r\n\r\n\t\t\tthis.zoomAxes(this.yAxes, { start: newStartY, end: newEndY });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies action for when mouse wheel is used when over the chart.\r\n\t *\r\n\t * Options: Options: `\"zoomX\"`, `\"zoomY\"`, `\"zoomXY\"`, `\"panX\"`, `\"panY\"`, `\"panXY\"`, `\"none\"` (default).\r\n\t *\r\n\t * @default \"none\"\r\n\t * @param {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} mouse wheel behavior\r\n\t */\r\n\tpublic set mouseWheelBehavior(value: \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\") {\r\n\r\n\t\tif (this.setPropertyValue(\"mouseWheelBehavior\", value)) {\r\n\t\t\tif (value != \"none\") {\r\n\t\t\t\tthis._mouseWheelDisposer = this.plotContainer.events.on(\"wheel\", this.handleWheel, this, false);\r\n\t\t\t\tthis._disposers.push(this._mouseWheelDisposer);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this._mouseWheelDisposer) {\r\n\t\t\t\t\tthis.plotContainer.wheelable = false;\r\n\t\t\t\t\tthis.plotContainer.hoverable = false;\r\n\t\t\t\t\tthis._mouseWheelDisposer.dispose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\"} Mouse wheel behavior\r\n\t */\r\n\tpublic get mouseWheelBehavior(): \"zoomX\" | \"zoomY\" | \"zoomXY\" | \"panX\" | \"panY\" | \"panXY\" | \"none\" {\r\n\t\treturn this.getPropertyValue(\"mouseWheelBehavior\");\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `dateFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-speicifc data fields so they are parsed properly.\r\n\t *\r\n\t * @param {string[]} fields Array of date fields\r\n\t * @return {string[]} Array of date fields populated with chart's date fields\r\n\t */\r\n\tprotected dataSourceDateFields(fields: string[]): string[] {\r\n\t\t// Process parent\r\n\t\tfields = super.dataSourceDateFields(fields);\r\n\r\n\t\t// Check if we have any series with date-fields\r\n\t\t$iter.each(this.series.iterator(), (series: this[\"_seriesType\"]) => {\r\n\t\t\tfields = this.populateDataSourceFields(\r\n\t\t\t\tfields,\r\n\t\t\t\tseries.dataFields,\r\n\t\t\t\t[\"dateX\", \"dateY\", \"openDateX\", \"openDateY\"]\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn fields;\r\n\t}\r\n\r\n\t/**\r\n\t * This function is called by the [[DataSource]]'s `numberFields` adapater\r\n\t * so that particular chart types can popuplate this setting with their\r\n\t * own type-specific data fields so they are parsed properly.\r\n\t *\r\n\t * @param {string[]} value Array of number fields\r\n\t * @return {string[]} Array of number fields populated with chart's number fields\r\n\t */\r\n\tprotected dataSourceNumberFields(fields: string[]): string[] {\r\n\t\tfields = super.dataSourceDateFields(fields);\r\n\r\n\t\t// Check if we have any series with date-fields\r\n\t\t$iter.each(this.series.iterator(), (series: this[\"_seriesType\"]) => {\r\n\t\t\tfields = this.populateDataSourceFields(\r\n\t\t\t\tfields,\r\n\t\t\t\tseries.dataFields,\r\n\t\t\t\t[\"valueX\", \"valueY\", \"openValueX\", \"openValueY\"]\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\treturn fields;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Save axis ranges for later processing\r\n\t\t\tlet xAxes: any[] = [];\r\n\t\t\tlet yAxes: any[] = [];\r\n\r\n\t\t\t// Set up axes\r\n\t\t\tif ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tif (!config.xAxes[i].type) {\r\n\t\t\t\t\t\tthrow Error(\"[XYChart error] No type set for xAxes[\" + i + \"].\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(config.xAxes[i][\"axisRanges\"])) {\r\n\t\t\t\t\t\txAxes.push({\r\n\t\t\t\t\t\t\taxisRanges: config.xAxes[i][\"axisRanges\"],\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete (config.xAxes[i][\"axisRanges\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tif (!config.yAxes[i].type) {\r\n\t\t\t\t\t\tthrow Error(\"[XYChart error] No type set for yAxes[\" + i + \"].\");\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ($type.hasValue(config.yAxes[i][\"axisRanges\"])) {\r\n\t\t\t\t\t\tyAxes.push({\r\n\t\t\t\t\t\t\taxisRanges: config.yAxes[i][\"axisRanges\"],\r\n\t\t\t\t\t\t\tindex: i\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tdelete (config.yAxes[i][\"axisRanges\"]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"LineSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"XYCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up scrollbars\r\n\t\t\tif ($type.hasValue(config.scrollbarX) && !$type.hasValue(config.scrollbarX.type)) {\r\n\t\t\t\tconfig.scrollbarX.type = \"Scrollbar\";\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.hasValue(config.scrollbarY) && !$type.hasValue(config.scrollbarY.type)) {\r\n\t\t\t\tconfig.scrollbarY.type = \"Scrollbar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\r\n\t\t\t// Finish up with ranges.\r\n\t\t\t// We need to do this here because series are processed last in JSON\r\n\t\t\t// config. Therefore their respective objects are not yet are available\r\n\t\t\t// when axis (and respectively their ranges) are being processed.\r\n\t\t\tif (yAxes.length) {\r\n\t\t\t\tfor (let i = 0, len = yAxes.length; i < len; i++) {\r\n\t\t\t\t\tthis.yAxes.getIndex(yAxes[i].index).config = {\r\n\t\t\t\t\t\taxisRanges: yAxes[i].axisRanges\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (xAxes.length) {\r\n\t\t\t\tfor (let i = 0, len = xAxes.length; i < len; i++) {\r\n\t\t\t\t\tthis.xAxes.getIndex(xAxes[i].index).config = {\r\n\t\t\t\t\t\taxisRanges: xAxes[i].axisRanges\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * This function is used to sort element's JSON config properties, so that\r\n\t * some properties that absolutely need to be processed last, can be put at\r\n\t * the end.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {string} a Element 1\r\n\t * @param {string} b Element 2\r\n\t * @return {Ordering} Sorting number\r\n\t */\r\n\tprotected configOrder(a: string, b: string): Ordering {\r\n\t\tif (a == b) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t// Must come last\r\n\t\telse if (a == \"scrollbarX\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"scrollbarX\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"scrollbarY\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"scrollbarY\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse if (a == \"series\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"series\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.configOrder(a, b);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new Series of type suitable for this chart.\r\n\t *\r\n\t * @return {this} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new XYSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Button]] element that is used for zooming out the chart.\r\n\t *\r\n\t * This button appears only when chart is zoomed in, and disappears\r\n\t * autoamatically when it is zoome dout.\r\n\t *\r\n\t * @param {Button} button Zoom out button\r\n\t */\r\n\tpublic set zoomOutButton(button: Button) {\r\n\t\tthis._zoomOutButton = button;\r\n\t\tif (button) {\r\n\t\t\tbutton.events.on(\"hit\", () => {\r\n\t\t\t\tthis.zoomAxes(this.xAxes, { start: 0, end: 1 });\r\n\t\t\t\tthis.zoomAxes(this.yAxes, { start: 0, end: 1 });\r\n\t\t\t}, undefined, false);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Button} Zoom out button\r\n\t */\r\n\tpublic get zoomOutButton(): Button {\r\n\t\treturn this._zoomOutButton;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[XYChart]].\r\n\t *\r\n\t * @param {XYChart} source Source XYChart\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.xAxes.copyFrom(source.xAxes);\r\n\t\tthis.yAxes.copyFrom(source.yAxes);\r\n\r\n\t\tthis.zoomOutButton.copyFrom(source.zoomOutButton);\r\n\t\t//@todo copy all container properties\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\r\n\t\tlet scrollbarX = this.scrollbarX;\r\n\t\tif (scrollbarX && scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarX.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tlet scrollbarY = this.scrollbarY;\r\n\t\tif (scrollbarY && scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tscrollbarY.scrollbarChart.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\r\n\t\tthis.yAxes.each((axis) => {\r\n\t\t\taxis.disposeData();\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Adds one or several (array) of data items to the existing data.\r\n\t *\r\n\t * @param {Object | Object[]} rawDataItem One or many raw data item objects\r\n\t */\r\n\tpublic addData(rawDataItem: Object | Object[], removeCount?: number): void {\r\n\t\tsuper.addData(rawDataItem, removeCount);\r\n\t\tif (this.scrollbarX instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarX.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t\tif (this.scrollbarY instanceof XYChartScrollbar) {\r\n\t\t\tthis.scrollbarY.scrollbarChart.addData(rawDataItem, removeCount);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart\"] = XYChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentProperties extends IContainerProperties { }\r\n\r\n/**\r\n * Defines events for [[LineSeriesSegment]].\r\n */\r\nexport interface ILineSeriesSegmentEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesSegmentAdapters extends IContainerAdapters, ILineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link ILineSeriesSegmentEvents} for a list of available events\r\n * @see {@link ILineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class LineSeriesSegment extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ILineSeriesSegmentPropertiess}\r\n\t */\r\n\tpublic _properties!: ILineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ILineSeriesSegmentAdapters}\r\n\t */\r\n\tpublic _adapter!: ILineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ILineSeriesSegmentEvents}\r\n\t */\r\n\tpublic _events!: ILineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesSegment\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.interactionsEnabled = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\t// Create fill element\r\n\t\tlet fillSprite = this.createChild(Sprite);\r\n\t\tthis.fillSprite = fillSprite;\r\n\t\tfillSprite.shouldClone = false;\r\n\t\tfillSprite.setElement(this.paper.add(\"path\"));\r\n\t\tfillSprite.isMeasured = false;\r\n\t\tthis._disposers.push(fillSprite);\r\n\r\n\r\n\t\t// Create line element\r\n\t\tlet strokeSprite = this.createChild(Sprite);\r\n\t\tthis.strokeSprite = strokeSprite;\r\n\t\tstrokeSprite.shouldClone = false;\r\n\t\tstrokeSprite.setElement(this.paper.add(\"path\"));\r\n\t\tstrokeSprite.isMeasured = false;\r\n\t\tthis._disposers.push(strokeSprite);\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint[]} points Points to connect\r\n\t * @param {IPoint[]} closePoints ?\r\n\t * @param {number} smoothnessX Horizontal bezier setting (?)\r\n\t * @param {number} smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number): void {\r\n\t\tif (!this.disabled) {\r\n\t\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\t\t\t\t// first moveTo helps to avoid Chrome straight line in the mask bug.\r\n\t\t\t\tlet path: string = $path.moveTo({ x: points[0].x - 0.2, y: points[0].y - 0.2 }) + $path.moveTo(points[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(points);\r\n\r\n\t\t\t\tif (this.strokeOpacity == 0 || this.strokeSprite.strokeOpacity == 0) {\r\n\t\t\t\t\t// like this and not if != 0, otherwise ranges stroke won't be drawn.\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.strokeSprite.path = path;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + new $smoothing.Tension(smoothnessX, smoothnessY).smooth(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.fillSprite.path = \"\";\r\n\t\t\t\tthis.strokeSprite.path = \"\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Copies properties from a [[Sprite]] to both line and fill elements.\r\n\t *\r\n\t * @param {Sprite} source Source [[Sprite]] to copy properties from\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\r\n\t\tlet lineElement = this.strokeSprite;\r\n\t\t$object.copyProperties(source, lineElement.properties, visualProperties);\r\n\t\tlineElement.fillOpacity = 0;\r\n\r\n\t\tlet fillElement = this.fillSprite;\r\n\t\t$object.copyProperties(source, fillElement.properties, visualProperties);\r\n\t\tfillElement.strokeOpacity = 0;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeriesSegment\"] = LineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeriesSegment.ts","/**\r\n * Line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesDataFields, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { LineSeriesSegment, ILineSeriesSegmentProperties } from \"./LineSeriesSegment\";\r\nimport { Axis, AxisDataItem } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { DateAxis } from \"../axes/DateAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { Rectangle } from \"../../core/elements/Rectangle\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { LegendDataItem } from \"../Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[LineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class LineSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {LineSeries}\r\n\t */\r\n\tpublic _component!: LineSeries;\r\n\r\n\t/**\r\n\t * Point of line series data item\r\n\t * @type {IPoint}\r\n\t */\r\n\tpublic point: IPoint;\r\n\r\n\t/**\t \r\n\t * A reference to a segment object, used for getting proper colors for tooltips\r\n\t */\r\n\tpublic segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"LineSeriesDataItem\";\r\n\t}\r\n\r\n\t// @todo: minimums/maximums\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Vertical tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\ttensionY?: number;\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tconnect?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[LineSeries]].\r\n */\r\nexport interface ILineSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[LineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ILineSeriesAdapters extends IXYSeriesAdapters, ILineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a line graph.\r\n *\r\n * @see {@link ILineSeriesEvents} for a list of available Events\r\n * @see {@link ILineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class LineSeries extends XYSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {ILineSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ILineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ILineSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ILineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ILineSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ILineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ILineSeriesEvents}\r\n\t */\r\n\tpublic _events!: ILineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {LineSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: LineSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of line series segments.\r\n\t *\r\n\t * Segments are used in two cases:\r\n\t *\r\n\t * * When we want to change the appearance of a part of the line series;\r\n\t * * When we have an axis range.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tpublic segments: ListTemplate;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: LineSeriesSegment;\r\n\r\n\t/**\r\n\t * A container for segment elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic segmentsContainer: Container;\r\n\r\n\t/**\r\n\t * Minimum distance in pixels between two adjacent points.\r\n\t *\r\n\t * If the distance is less than this setting, a point is skipped.\r\n\t *\r\n\t * This allows acceptable performance with huge amounts of data points.\r\n\t *\r\n\t * @default 0.5\r\n\t * @type {number}\r\n\t */\r\n\tpublic minDistance: number = 0.5;\r\n\r\n\t/**\r\n\t * Iterator for segments.\r\n\t *\r\n\t * @type {ListIterator}\r\n\t */\r\n\tprotected _segmentsIterator: $iter.ListIterator;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.segments = new ListTemplate(this.createSegment());\r\n\t\tthis.segments.template.applyOnClones = true;\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.segments));\r\n\t\tthis._disposers.push(this.segments.template);\r\n\r\n\t\tthis._segmentsIterator = new $iter.ListIterator(this.segments, () => this.segments.create());\r\n\t\tthis._segmentsIterator.createNewItems = true;\r\n\r\n\t\tthis.className = \"LineSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.fillOpacity = 0;\r\n\r\n\t\tthis.connect = true;\r\n\r\n\t\tthis.tensionX = 1;\r\n\t\tthis.tensionY = 1;\r\n\r\n\t\tthis.segmentsContainer = this.mainContainer.createChild(Container);\r\n\t\tthis.segmentsContainer.isMeasured = false;\r\n\r\n\t\t// line series might have multiple segments and it has a separate sprite for fill and stroke for each segment. So we need to observe all the changes on series and set them on the segments\r\n\t\t// todo: we need list here, otherwise everything will be redrawn event on change of properties like tooltipX or similar.\r\n\t\t// this.addEventListener(SpriteEvent.PROPERTY_CHANGED, this.validateDataElements, false, this);\r\n\r\n\t\tthis.bulletsContainer.toFront();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Line Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new LineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {LineSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new LineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits data item's working values.\r\n\t *\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t * @param {number} index Data item's index\r\n\t */\r\n\r\n\tprotected setInitialWorkingValues(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\t// this makes data items animate when added\r\n\t\tif (this.appeared && this.visible) {\r\n\r\n\t\t\tlet yAxis: Axis = this._yAxis.get();\r\n\t\t\tlet xAxis: Axis = this._xAxis.get();\r\n\r\n\t\t\tlet previousDataItem: XYSeriesDataItem = this.dataItems.getIndex(dataItem.index - 1);\r\n\r\n\t\t\tdataItem.component = this; // as these values are set before, we don't know component yet\r\n\r\n\t\t\tif (this.baseAxis == xAxis) {\r\n\t\t\t\tif (yAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialY: number = yAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialY = previousDataItem.values[\"valueY\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this makes line animate from previous point to newly added point\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", initialY, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueY\", dataItem.values.valueY.value);\r\n\r\n\t\t\t\t\tif (xAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateX\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == yAxis) {\r\n\t\t\t\tif (xAxis instanceof ValueAxis) {\r\n\t\t\t\t\tlet initialX: number = xAxis.minZoomed;\r\n\t\t\t\t\tif (previousDataItem) {\r\n\t\t\t\t\t\tinitialX = previousDataItem.values[\"valueX\"].workingValue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", initialX, 0);\r\n\t\t\t\t\tdataItem.setWorkingValue(\"valueX\", dataItem.values.valueX.value);\r\n\r\n\t\t\t\t\tif (yAxis instanceof DateAxis) {\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", -0.5, 0); // instantly move it to previous\r\n\t\t\t\t\t\tdataItem.setWorkingLocation(\"dateY\", 0.5); // animate to it's location\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates corresponding legend data item with current values.\r\n\t * \r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\t\t//This is hack to save some methos, used to set tooltip color source only\r\n\t\tif (dataItem && dataItem.segment) {\r\n\t\t\tthis.tooltipColorSource = dataItem.segment;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tthis._segmentsIterator.reset();\r\n\r\n\t\tthis.openSegment(this._workingStartIndex);\r\n\r\n\t\t$iter.each(this.axisRanges.iterator(), (range) => {\r\n\t\t\tthis.openSegment(this._workingStartIndex, range);\r\n\t\t});\r\n\r\n\t\t$iter.each(this._segmentsIterator.iterator(), (segment) => {\r\n\t\t\tsegment.__disabled = true;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * [sliceData description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected sliceData(): void {\r\n\t\tlet startIndex: number = this.startIndex;\r\n\t\tlet endIndex: number = this.endIndex;\r\n\r\n\t\t// we need extra one item to both sides with values for line series, otherwise the line will not continue out of bounds of the chart while scrolling\r\n\t\t// find first to the left\r\n\t\t// TODO use iterator instead\r\n\t\tfor (let i = this.startIndex - 1; i >= 0; i--) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tif (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tstartIndex = i;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// find first to the right\r\n\t\t// TODO use iterator instead\r\n\t\tfor (let i = this.endIndex, len = this.dataItems.length; i < len; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tif (dataItem && dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tendIndex = i + 1;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._workingStartIndex = startIndex;\r\n\t\tthis._workingEndIndex = endIndex;\r\n\t}\r\n\r\n\t/**\r\n\t * [openSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {number} openIndex [description]\r\n\t * @param {AxisDataItem} axisRange [description]\r\n\t */\r\n\tprotected openSegment(openIndex: number, axisRange?: AxisDataItem): void {\r\n\t\tlet points: IPoint[] = [];\r\n\r\n\t\tlet endIndex: number = this._workingEndIndex;\r\n\r\n\t\tlet closeIndex: number;\r\n\t\tlet propertiesChanged: boolean = false;\r\n\r\n\t\tlet segment: LineSeriesSegment = this._segmentsIterator.getFirst();\r\n\t\tsegment.__disabled = false;\r\n\r\n\t\tif (axisRange) {\r\n\t\t\tsegment.parent = axisRange.contents;\r\n\t\t\t$object.copyProperties(axisRange.contents, segment, visualProperties);\r\n\t\t}\r\n\t\telse {\r\n\t\t\t$object.copyProperties(this, segment, visualProperties);\r\n\t\t\tsegment.filters.clear();\r\n\t\t\tsegment.parent = this.segmentsContainer;\r\n\t\t}\r\n\r\n\t\tfor (let i: number = openIndex; i < endIndex; i++) {\r\n\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\tdataItem.segment = segment;\r\n\r\n\t\t\tif (dataItem.hasProperties) {\r\n\t\t\t\t// if this is first item of segment\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tthis.updateSegmentProperties(dataItem.properties, segment);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// this time we only need to know if properties changed, so we don't pass segment\r\n\t\t\t\t\tpropertiesChanged = this.updateSegmentProperties(dataItem.properties, segment, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\tthis.addPoints(points, dataItem, this.xField, this.yField);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// if no values in first data item, go to next\r\n\t\t\t\tif (i == openIndex) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlet connect: boolean = this.connect;\r\n\t\t\t\t\t// todo: other connect conditions\r\n\r\n\t\t\t\t\t// stop cycle\r\n\t\t\t\t\tif (!connect) {\r\n\t\t\t\t\t\tcloseIndex = i;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcloseIndex = i;\r\n\r\n\t\t\tif (propertiesChanged) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.closeSegment(segment, points, openIndex, closeIndex, axisRange);\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean) {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.workingLocations[xField], dataItem.workingLocations[yField]);\r\n\t\tif (!backwards) {\r\n\t\t\tdataItem.point = point;\r\n\t\t}\r\n\t\tpoints.push(point);\r\n\t}\r\n\r\n\t/**\r\n\t * [closeSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {LineSeriesSegment} segment [description]\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {number} openIndex [description]\r\n\t * @param {number} closeIndex [description]\r\n\t * @param {AxisDataItem} axisRange [description]\r\n\t */\r\n\tprotected closeSegment(segment: LineSeriesSegment, points: IPoint[], openIndex: number, closeIndex: number, axisRange?: AxisDataItem) {\r\n\r\n\t\tlet closePoints: IPoint[] = [];\r\n\r\n\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\tthis.stacked) {\r\n\t\t\tfor (let i: number = closeIndex; i >= openIndex; i--) {\r\n\t\t\t\tlet dataItem: this[\"_dataItem\"] = this.dataItems.getIndex(i);\r\n\t\t\t\tif (dataItem.hasValue(this._xValueFields) && dataItem.hasValue(this._yValueFields)) { // not sure, this means that open point will only be added if value is also set for this point, but maybe it's ok.\r\n\t\t\t\t\tthis.addPoints(closePoints, dataItem, this.xOpenField, this.yOpenField, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet baseAxis: Axis = this.baseAxis;\r\n\t\t\tlet count: number = points.length;\r\n\t\t\tlet xAxis: Axis = this.xAxis;\r\n\t\t\tlet yAxis: Axis = this.yAxis;\r\n\r\n\t\t\tif (baseAxis == xAxis) {\r\n\t\t\t\tclosePoints.push({ x: points[count - 1].x, y: yAxis.basePoint.y }); // last x\r\n\t\t\t\tclosePoints.push({ x: points[0].x, y: yAxis.basePoint.y }); // first x\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[count - 1].y }); // last y\r\n\t\t\t\tclosePoints.push({ x: xAxis.basePoint.x, y: points[0].y }); // first y\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.drawSegment(segment, points, closePoints);\r\n\r\n\t\tif (closeIndex < this._workingEndIndex - 1) {\r\n\t\t\tthis.openSegment(closeIndex, axisRange);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param {LineSeriesSegment} segment Segment\r\n\t * @param {IPoint[]} points Segment points\r\n\t * @param {IPoint[]} closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY);\r\n\t}\r\n\r\n\t/**\r\n\t * Segement will get its colors from `this.dataItem`, as thats how\r\n\t * `getPropertyValue()` method works.\r\n\t *\r\n\t * We pass `lineSeriesDataItem.properties` as item here each time when a flag\r\n\t * `hasProperties` is set to `true` on data item (this means it can contain\r\n\t * some properties set).\r\n\t *\r\n\t * @param {object} itemProperties Item properties\r\n\t * @param {LineSeriesSegment} segment Segment\r\n\t * @return {boolean} Properties changed?\r\n\t */\r\n\tprotected updateSegmentProperties(itemProperties: { [index: string]: any }, segment: LineSeriesSegment, checkOnly?: boolean): boolean {\r\n\t\tlet changed: boolean = false;\r\n\r\n\t\t$object.each(itemProperties, (propertyName, value) => {\r\n\t\t\t// some value must be defined\r\n\t\t\tif ($type.hasValue(value)) {\r\n\t\t\t\tlet currentValue = (segment)[propertyName];\r\n\t\t\t\tlet currentValueStr: string;\r\n\t\t\t\t// current value can be Color, number, anything. So we check if it has toString, otherwise just do String().\r\n\t\t\t\t// toString() will return hex if it's color. The only problem is that it will return lowercased hex and if we have uppercase in data, it will think that it changed\r\n\t\t\t\tif (currentValue) {\r\n\t\t\t\t\tif (currentValue.toString) {\r\n\t\t\t\t\t\tcurrentValueStr = currentValue.toString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tcurrentValueStr = currentValue; // not doing String(currentValue) as this will make all Objects the same\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t\tlet valueStr: string;\r\n\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tif (value.toString) {\r\n\t\t\t\t\t\tvalueStr = value.toString();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tvalueStr = value; // not doing String(currentValue) as this will make all Objects the same\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (currentValue == value || (currentValueStr != undefined && valueStr != undefined && currentValueStr == valueStr)) {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (!checkOnly) {\r\n\t\t\t\t\t\t(segment)[propertyName] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tchanged = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t/**\r\n\t * Connect the lines over empty data points?\r\n\t *\r\n\t * If set to `true` the line will connect two adjacent data points by a\r\n\t * straight line. Even if there are data points with missing values\r\n\t * in-between.\r\n\t *\r\n\t * If you set this to `false`, the line will break when there are missing\r\n\t * values.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/#Line_series_with_gaps} for more information about this feature\r\n\t * @default true\r\n\t * @param {boolean} value Connect?\r\n\t */\r\n\tpublic set connect(value: boolean) {\r\n\t\tif(this.setPropertyValue(\"connect\", value)){\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Connect?\r\n\t */\r\n\tpublic get connect(): boolean {\r\n\t\treturn this.getPropertyValue(\"connect\");\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Can be used to create smoothed lines. It works like this:\r\n\t *\r\n\t * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n\t * will mean that the \"tension\" is very high, so the line is maximally\r\n\t * attracted to the points it connects, hence the straight line.\r\n\t *\r\n\t * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n\t *\r\n\t * The smaller the tension setting, the more relaxed the line and the more\r\n\t * wide the curve.\r\n\t *\r\n\t * This setting is for horizontal tension, meaning the curve will bend in\r\n\t * such way that it never goes below or above connecting points. To enable\r\n\t * vertical bending as well, use `tensionY`.\r\n\t *\r\n\t * @default 1\r\n\t * @param {number} value Horizontal tension (0-1)\r\n\t */\r\n\tpublic set tensionX(value: number) {\r\n\t\tthis.setPropertyValue(\"tensionX\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Horizontal tension (0-1)\r\n\t */\r\n\tpublic get tensionX(): number {\r\n\t\treturn this.getPropertyValue(\"tensionX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Can be used to create smoothed lines. It works like this:\r\n\t *\r\n\t * Accepted values are in the range between 0 and 1. The biggest value (1)\r\n\t * will mean that the \"tension\" is very high, so the line is maximally\r\n\t * attracted to the points it connects, hence the straight line.\r\n\t *\r\n\t * Using smaller numbers will \"relax\" the tension, creating some curving.\r\n\t *\r\n\t * The smaller the tension setting, the more relaxed the line and the more\r\n\t * wide the curve.\r\n\t *\r\n\t * This setting is for vertical tension, meaning the curve might bend in\r\n\t * such way that it will go below or above connected points.\r\n\t *\r\n\t * Combine this setting with `tensionX` to create beautifully looking\r\n\t * smoothed line series.\r\n\t *\r\n\t * @default 1\r\n\t * @param {number} value Vertical tension (0-1)\r\n\t */\r\n\tpublic set tensionY(value: number) {\r\n\t\tthis.setPropertyValue(\"tensionY\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Vertical tension (0-1)\r\n\t */\r\n\tpublic get tensionY(): number {\r\n\t\treturn this.getPropertyValue(\"tensionY\");\r\n\t}\r\n\r\n\r\n\t /*\r\n\tpublic positionBullet(bullet: Bullet): void {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t\tif (dataItem.segment) {\r\n\t\t\t$object.softCopyProperties(dataItem.segment, bullet, visualProperties);\r\n\t\t}\r\n\t}*/\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.disposeChildren();\r\n\r\n\t\tlet line: Line = marker.createChild(Line);\r\n\t\tline.shouldClone = false;\r\n\t\t//line.copyFrom(this); coppies events which is not good\r\n\t\t$object.copyProperties(this, line, visualProperties);\r\n\r\n\t\tline.x2 = w;\r\n\t\tline.y = h / 2;\r\n\t\tline.visible = true;\r\n\r\n\t\tif (this.fillOpacity > 0) {\r\n\t\t\tlet fill: Rectangle = marker.createChild(Rectangle);\r\n\t\t\t//fill.copyFrom(this); coppies events which is not good\r\n\t\t\t$object.copyProperties(this, fill, visualProperties);\r\n\t\t\tfill.width = w;\r\n\t\t\tfill.height = h;\r\n\t\t\tfill.y = 0;\r\n\t\t\tfill.strokeOpacity = 0;\r\n\t\t\tfill.visible = true;\r\n\r\n\t\t\tline.y = 0;\r\n\t\t}\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.stroke;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\r\n\t\t$iter.eachContinue(this.bullets.iterator(), (bullet) => {\r\n\t\t\tif (bullet.copyToLegendMarker) {\r\n\r\n\t\t\t\t// do not copy bullets with labels\r\n\t\t\t\tlet hasLabels: boolean = false;\r\n\t\t\t\t$iter.each(bullet.children.iterator(), (child) => {\r\n\t\t\t\t\tif (child instanceof Label) {\r\n\t\t\t\t\t\thasLabels = true;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (!hasLabels) {\r\n\t\t\t\t\tlet clone: Sprite = bullet.clone();\r\n\t\t\t\t\tclone.parent = marker;\r\n\t\t\t\t\tclone.isMeasured = true;\r\n\t\t\t\t\tclone.tooltipText = undefined;\r\n\t\t\t\t\tclone.x = w / 2;\r\n\t\t\t\t\tif (this.fillOpacity > 0) {\r\n\t\t\t\t\t\tclone.y = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tclone.y = h / 2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tclone.visible = true;\r\n\r\n\t\t\t\t\t// otherwise will not transit to color after hiding\r\n\t\t\t\t\tif (!$type.hasValue(clone.fill)) {\r\n\t\t\t\t\t\tclone.fill = this.fill;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!$type.hasValue(clone.stroke)) {\r\n\t\t\t\t\t\tclone.stroke = this.stroke;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\t\tsuper.disposeData();\r\n\t\tthis.segments.clear();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"LineSeries\"] = LineSeries;\r\nregistry.registeredClasses[\"LineSeriesDataItem\"] = LineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/LineSeries.ts","/**\r\n * Radar series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {RadarSeries}\r\n\t */\r\n\tpublic _component!: RadarSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeriesDataItem\";\r\n\r\n\t\tthis.setLocation(\"dateX\", 0, 0);\r\n\t\tthis.setLocation(\"dateY\", 0, 0);\r\n\r\n\t\tthis.setLocation(\"categoryX\", 0, 0);\r\n\t\tthis.setLocation(\"categoryY\", 0, 0);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesProperties extends ILineSeriesProperties {\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tconnectEnds?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarSeries]].\r\n */\r\nexport interface IRadarSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarSeriesAdapters extends ILineSeriesAdapters, IRadarSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a radar graph.\r\n *\r\n * @see {@link IRadarSeriesEvents} for a list of available Events\r\n * @see {@link IRadarSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IRadarSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IRadarSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarSeriesEvents}\r\n\t */\r\n\tpublic _events!: IRadarSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {RadarSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: RadarSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {RadarChart}\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarSeries\";\r\n\t\tthis.connectEnds = true;\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {RadarSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new RadarSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {RadarSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\t\t\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\t//\t\tangle = $math.fitToRange(angle, startAngle, endAngle);\r\n\t\tif (angle < startAngle || angle > endAngle) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\t\tlet point = this.getPoint(dataItem, xField, yField, dataItem.locations[xField], dataItem.locations[yField]);\r\n\t\tif (point) {\r\n\t\t\tpoints.push(point);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return {string} SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [drawSegment description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {LineSeriesSegment} segment [description]\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {IPoint[]} closePoints [description]\r\n\t */\r\n\tprotected drawSegment(segment: LineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet axis: Axis = this.yAxis;\r\n\t\tlet renderer: AxisRendererRadial = axis.renderer;\r\n\r\n\t\tif (this.connectEnds && Math.abs(renderer.endAngle - renderer.startAngle) == 360) {\r\n\t\t\t// adds one point to the beginning of closePoints array, if needed\r\n\t\t\tif (this.dataFields[this._xOpenField] ||\r\n\t\t\t\tthis.dataFields[this._yOpenField] ||\r\n\t\t\t\tthis.stacked) {\r\n\t\t\t\tpoints.push(points[0]);\r\n\t\t\t\tif (closePoints.length > 0) {\r\n\t\t\t\t\tclosePoints.unshift(closePoints[closePoints.length - 1]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsuper.drawSegment(segment, points, closePoints);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the last and and first data points be connected, forming a complete\r\n\t * closed circle?\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Connect?\r\n\t */\r\n\tpublic set connectEnds(value: boolean) {\r\n\t\tthis.setPropertyValue(\"connectEnds\", value, true);\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Connect?\r\n\t */\r\n\tpublic get connectEnds(): boolean {\r\n\t\treturn this.getPropertyValue(\"connectEnds\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarSeries\"] = RadarSeries;\r\nregistry.registeredClasses[\"RadarSeriesDataItem\"] = RadarSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarSeries.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { XYCursor, IXYCursorAdapters, IXYCursorEvents, IXYCursorProperties } from \"./XYCursor\";\r\nimport { IInteractionEvents } from \"../../core/interaction/Interaction\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Tooltip } from \"../../core/elements/Tooltip\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorProperties extends IXYCursorProperties {\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle: number;\r\n\r\n\t/**\r\n\t * Ending angle of the cursor's radial line.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tendAngle: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarCursor]].\r\n */\r\nexport interface IRadarCursorEvents extends IXYCursorEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarCursor]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarCursorAdapters extends IXYCursorAdapters, IRadarCursorProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Cursor for [[RadarChart]].\r\n *\r\n * @see {@link IRadarCursorEvents} for a list of available events\r\n * @see {@link IRadarCursorAdapters} for a list of available Adapters\r\n */\r\nexport class RadarCursor extends XYCursor {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t * @type {IRadarCursorProperties}\r\n\t */\r\n\tpublic _properties!: IRadarCursorProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t * @type {IRadarCursorAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarCursorAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarCursorEvents}\r\n\t */\r\n\tpublic _events!: IRadarCursorEvents;\r\n\r\n\t/**\r\n\t * A reference to chart cursor belongs to.\r\n\t *\r\n\t * @type {Chart}\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\r\n\tprotected _prevAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarCursor\";\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\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 {IPoint} point Point to check\r\n\t * @return {boolean} Fits within container?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\tlet radius = $math.getDistance(point);\r\n\t\tlet angle = $math.getAngle(point);\r\n\r\n\t\t//if(!$math.isAngleInRange(angle, this.startAngle, this.endAngle)){\r\n\t\t\t//return false;\r\n\t\t//}\r\n\t\tif (radius < this.truePixelRadius + 1 && radius > this.pixelInnerRadius - 1) { // ok to add/remove some\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the cursor's radial line.\r\n\t *\r\n\t * @param {number} value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the cursor's radial line.\r\n\t *\r\n\t * @param {number} value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\tprotected triggerMoveReal(point:IPoint) {\r\n\r\n\t\tif (!this.xAxis || (this.xAxis && (!this.xAxis.cursorTooltipEnabled || this.xAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineX(this.point);\r\n\t\t}\r\n\t\tif (!this.yAxis || (this.yAxis && (!this.yAxis.cursorTooltipEnabled || this.yAxis.tooltip.disabled))) {\r\n\t\t\tthis.updateLineY(this.point);\r\n\t\t}\r\n\r\n\t\tthis.updateSelection();\r\n\t\tsuper.triggerMoveReal(point);\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the horizontal (circular) cursor's line.\r\n\t *\r\n\t * @param {IPoint} point New target point\r\n\t */\r\n\tprotected updateLineX(point: IPoint) {\r\n\r\n\t\tlet radius: number = this.pixelRadius;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\tif (radius > 0 && $type.isNumber(startAngle) && $type.isNumber(endAngle) && $type.isNumber(innerRadius)) {\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\t\t\tlet path: string;\r\n\r\n\t\t\tif (this.lineX && this.lineX.visible) {\r\n\r\n\t\t\t\tthis.lineX.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t// fill\r\n\t\t\t\tif (this.xAxis && this.fullWidthLineX) {\r\n\r\n\t\t\t\t\tlet startPoint: IPoint = this.xAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.xAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet fillStartAngle: number = $math.fitAngleToRange($math.getAngle(startPoint), startAngle, endAngle);\r\n\t\t\t\t\t\tlet fillEndAngle: number = $math.fitAngleToRange($math.getAngle(endPoint), startAngle, endAngle);\r\n\r\n\t\t\t\t\t\tlet arc: number = fillEndAngle - fillStartAngle;\r\n\r\n\t\t\t\t\t\t// clockwise\r\n\t\t\t\t\t\t// this is needed, normalizeAngle doesn't solve it\r\n\t\t\t\t\t\tif (startAngle < endAngle) {\r\n\t\t\t\t\t\t\tif (arc < 0) {\r\n\t\t\t\t\t\t\t\tarc += 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t// ccw\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\t\t\t\tarc -= 360;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tangle -= arc / 2;\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle, arc, radius)\r\n\t\t\t\t\t\t\t+ $path.lineTo({ x: innerRadius * $math.cos(angle + arc), y: innerRadius * $math.sin(angle + arc) })\r\n\t\t\t\t\t\t\t+ $path.arcTo(angle + arc, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// line\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) }) + $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineX.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)draws the vertical (radial) cursor's line.\r\n\t *\r\n\t * @param {IPoint} point New target point\r\n\t */\r\n\tprotected updateLineY(point: IPoint) {\r\n\t\tif (this.lineY && this.lineY.visible) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\t\t\tlet truePixelRadius = this.truePixelRadius;\r\n\t\t\tlet radius = $math.fitToRange($math.getDistance(point), 0, this.truePixelRadius);\r\n\t\t\tif ($type.isNumber(radius) && $type.isNumber(startAngle)) {\r\n\t\t\t\tthis.lineY.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\tlet path: string;\r\n\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\t\t\tif (this.yAxis && this.fullWidthLineY) {\r\n\t\t\t\t\t// fill\r\n\t\t\t\t\tlet startPoint: IPoint = this.yAxis.currentItemStartPoint;\r\n\t\t\t\t\tlet endPoint: IPoint = this.yAxis.currentItemEndPoint;\r\n\r\n\t\t\t\t\tif (startPoint && endPoint) {\r\n\t\t\t\t\t\tlet innerRadius: number = $math.fitToRange($math.getDistance(startPoint), 0, truePixelRadius);\r\n\t\t\t\t\t\tradius = $math.fitToRange($math.getDistance(endPoint), 0, truePixelRadius);\r\n\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(endAngle), y: innerRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, -arc, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!path) {\r\n\t\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.lineY.path = path;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates selection dimensions on size change.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSelection(): void {\r\n\t\tif (this._usesSelection) {\r\n\t\t\tlet downPoint: IPoint = this.downPoint;\r\n\r\n\t\t\tif (downPoint) {\r\n\r\n\t\t\t\tlet point: IPoint = this.point;\r\n\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet truePixelRadius: number = this.truePixelRadius;\r\n\t\t\t\tlet innerRadius: number = this.pixelInnerRadius;\r\n\r\n\t\t\t\tlet startAngle: number = Math.min(this.startAngle, this.endAngle);\r\n\t\t\t\tlet endAngle: number = Math.max(this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), startAngle, endAngle);\r\n\t\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(point), startAngle, endAngle);\r\n\r\n\t\t\t\tlet downRadius: number = $math.getDistance(downPoint);\r\n\t\t\t\tif (downRadius < truePixelRadius) {\r\n\r\n\t\t\t\t\tlet currentRadius = $math.fitToRange($math.getDistance(point), 0, truePixelRadius);\r\n\r\n\t\t\t\t\tthis._prevAngle = angle;\r\n\r\n\t\t\t\t\tlet path: string = $path.moveTo({ x: 0, y: 0 });\r\n\r\n\t\t\t\t\tlet downSin: number = $math.sin(downAngle);\r\n\t\t\t\t\tlet downCos: number = $math.cos(downAngle);\r\n\r\n\t\t\t\t\tlet sin: number = $math.sin(angle);\r\n\t\t\t\t\tlet cos: number = $math.cos(angle);\r\n\r\n\t\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\") {\r\n\t\t\t\t\t\tpath += $path.lineTo({ x: radius * downCos, y: radius * downSin }) + $path.arcTo(downAngle, angle - downAngle, radius) + $path.lineTo({ x: innerRadius * cos, y: innerRadius * sin }) + $path.arcTo(angle, downAngle - angle, innerRadius);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomY\" || behavior == \"selectY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(startAngle), y: currentRadius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(endAngle), y: downRadius * $math.sin(endAngle) }) + $path.arcTo(endAngle, startAngle - endAngle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (behavior == \"zoomXY\") {\r\n\t\t\t\t\t\tpath = $path.moveTo({ x: currentRadius * $math.cos(downAngle), y: currentRadius * $math.sin(downAngle) }) + $path.arcTo(downAngle, angle - downAngle, currentRadius) + $path.lineTo({ x: downRadius * $math.cos(angle), y: downRadius * $math.sin(angle) }) + $path.arcTo(angle, downAngle - angle, downRadius) + $path.closePath();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.selection.path = path;\r\n\t\t\t\t}\r\n\t\t\t\tthis.selection.moveTo({ x: 0, y: 0 });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates cursors current positions.\r\n\t */\r\n\tprotected getPositions() {\r\n\t\t// positions are used by axes or series\r\n\t\tlet chart: RadarChart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\tlet innerRadius = this.pixelInnerRadius;\r\n\t\t\tlet radius: number = this.truePixelRadius - innerRadius;\r\n\r\n\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\tlet angle: number = $math.fitAngleToRange($math.getAngle(this.point), startAngle, endAngle);\r\n\t\t\tlet xPosition = ((angle - startAngle) / (endAngle - startAngle));\r\n\t\t\tthis.xPosition = xPosition;\r\n\r\n\t\t\tthis.yPosition = $math.fitToRange(($math.getDistance(this.point) - innerRadius) / radius, 0, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when it's triggered.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updatePoint(point: IPoint) {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes horizontal position.\r\n\t *\r\n\t * @param {ISpriteEvents[\"positionchanged\"]} event Axis event\r\n\t */\r\n\tprotected handleXTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.xAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.xAxis.tooltip;\r\n\t\t\tthis.updateLineX($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates Cursor's position when axis tooltip changes vertical position.\r\n\t *\r\n\t * @todo Description\r\n\t * @param {ISpriteEvents[\"positionchanged\"]} event Axis event\r\n\t */\r\n\tprotected handleYTooltipPosition(event: ISpriteEvents[\"positionchanged\"]): void {\r\n\t\tif (this.yAxis.cursorTooltipEnabled) {\r\n\t\t\tlet tooltip: Tooltip = this.yAxis.tooltip;\r\n\t\t\tthis.updateLineY($utils.svgPointToSprite({ x: tooltip.pixelX, y: tooltip.pixelY }, this));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * needs to be overriden\r\n\t * @ignore\r\n\t */\r\n\tprotected updateLinePositions(point: IPoint) {\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * [getRanges description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected getRanges(): void {\r\n\t\tlet downPoint = this.downPoint;\r\n\t\tif (downPoint) {\r\n\t\t\tlet upPoint: IPoint = this.upPoint;\r\n\r\n\t\t\tlet chart: RadarChart = this.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tlet radius: number = this.pixelRadius;\r\n\t\t\t\tlet startAngle: number = this.startAngle;\r\n\t\t\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\t\t\tlet downAngle: number = $math.fitAngleToRange($math.getAngle(downPoint), this.startAngle, this.endAngle);\r\n\t\t\t\tlet upAngle: number = $math.fitAngleToRange($math.getAngle(upPoint), this.startAngle, this.endAngle);\r\n\r\n\t\t\t\tlet downRadius = $math.fitToRange($math.getDistance(downPoint), 0, radius);\r\n\t\t\t\tlet upRadius = $math.fitToRange($math.getDistance(upPoint), 0, radius);\r\n\r\n\t\t\t\tlet startX: number = 0;\r\n\t\t\t\tlet endX: number = 1;\r\n\r\n\t\t\t\tlet startY: number = 0;\r\n\t\t\t\tlet endY: number = 1;\r\n\r\n\t\t\t\tlet behavior = this.behavior;\r\n\t\t\t\tif (behavior == \"zoomX\" || behavior == \"selectX\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tlet arc: number = endAngle - startAngle;\r\n\t\t\t\t\tstartX = $math.round((downAngle - startAngle) / arc, 5);\r\n\t\t\t\t\tendX = $math.round((upAngle - startAngle) / arc, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (behavior == \"zoomY\" || behavior == \"selectY\" || behavior == \"zoomXY\" || behavior == \"selectXY\") {\r\n\t\t\t\t\tstartY = $math.round(downRadius / radius, 5);\r\n\t\t\t\t\tendY = $math.round(upRadius / radius, 5);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.xRange = { start: Math.min(startX, endX), end: Math.max(startX, endX) };\r\n\t\t\t\tthis.yRange = { start: Math.min(startY, endY), end: Math.max(startY, endY) };\r\n\r\n\t\t\t\tif (this.behavior == \"selectX\" || this.behavior == \"selectY\" || this.behavior == \"selectXY\") {\r\n\t\t\t\t\t// void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.selection.hide();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Overriding inherited method, so that nothing happens when `updateSize`\r\n\t * is triggered.\r\n\t *\r\n\t * RadarCursor is quite complicated and needs own sizing logic.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateSize(): void { }\r\n\r\n\t/**\r\n\t * Outer radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the circular line in pixels.\r\n\t *\r\n\t * @return {number} Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.truePixelRadius);\r\n\t}\r\n\r\n\t/**\r\n\t * [truePixelRadius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @return {number} Outer radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get truePixelRadius(): number {\r\n\t\treturn $utils.relativeToValue(percent(100), $math.min(this.innerWidth / 2, this.innerHeight / 2));\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the cursor's circular line.\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the circular line in pixels.\r\n\t *\r\n\t * @return {number} Inner radius (px)\r\n\t * @readonly\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRadius = percent(100 * innerRadius.value * this.chart.innerRadiusModifyer);\r\n\t\t}\r\n\r\n\t\treturn $utils.relativeRadiusToValue(innerRadius, this.truePixelRadius) || 0;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected fixPoint(point: IPoint): IPoint {\r\n\t\t// overriding xy method\r\n\t\treturn point;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarCursor\"] = RadarCursor;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/cursors/RadarCursor.ts","/**\r\n * Module, defining Axis Renderer for radial axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"./AxisRendererY\";\r\nimport { Axis } from \"./Axis\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { CategoryAxis } from \"./CategoryAxis\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { AxisBreak } from \"./AxisBreak\";\r\nimport { WavedCircle } from \"../../core/elements/WavedCircle\";\r\nimport { SortedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { PointerOrientation } from \"../../core/elements/Tooltip\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialProperties extends IAxisRendererYProperties {\r\n\r\n\t/**\r\n\t * Start angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\t/**\r\n\t * A grid type to display: \"circles\" or \"polygons\".\r\n\t *\r\n\t * @default \"circles\"\r\n\t * @type {\"circles\" | \"polygons\"}\r\n\t */\r\n\tgridType?: \"circles\" | \"polygons\"; //@todo: move it to GridRadial?\r\n\r\n\t/**\r\n\t * An angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\taxisAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * Outer radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the radial axis.\r\n\t *\r\n\t * Can either be absolute (pixels) or relative ([[Percent]]).\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[AxisRendererRadial]].\r\n */\r\nexport interface IAxisRendererRadialEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRenderer]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererRadialAdapters extends IAxisRendererYAdapters, IAxisRendererRadialProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * A renderer for radial axis.\r\n */\r\nexport class AxisRendererRadial extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {AxisRendererProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererRadialProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {AxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererRadialAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererRadialEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererRadialEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic pixelRadiusReal: number = 0;\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererRadial\";\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\t\tthis.minGridDistance = 30;\r\n\t\tthis.gridType = \"circles\";\r\n\t\tthis.axisAngle = -90;\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.radius = percent(100);\r\n\r\n\t\tthis.line.strokeOpacity = 0;\r\n\r\n\t\tthis.labels.template.horizontalCenter = \"middle\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart && this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns actual length of the Axis, in pixels.\r\n\t *\r\n\t * @return {number} Length (px)\r\n\t */\r\n\tpublic get axisLength(): number {\r\n\t\treturn this.pixelRadius - this.pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, false, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius in pixels.\r\n\t *\r\n\t * @return {number} Outer radius (px)\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.radius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the axis.\r\n\t *\r\n\t * Can be absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, false, false, 10, false)\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius in pixels.\r\n\t *\r\n\t * @return {number} Inner radius (px)\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn $utils.relativeRadiusToValue(this.innerRadius, this.pixelRadiusReal) || 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {RadarChart} value Chart\r\n\t */\r\n\tpublic set chart(chart: RadarChart) {\r\n\t\tthis._chart.set(chart, null);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {RadarChart} Chart\r\n\t */\r\n\tpublic get chart(): RadarChart {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position on axis to point coordinates.\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {IPoint} Point\r\n\t */\r\n\tpublic positionToPoint(position: number): IPoint {\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(position), 0, Infinity);\r\n\t\treturn { x: radius * $math.cos(this.axisAngle), y: radius * $math.sin(this.axisAngle) };\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the axis line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateAxisLine() {\r\n\t\tthis.line.path = $path.moveTo({ x: this.pixelInnerRadius * $math.cos(this.axisAngle), y: this.pixelInnerRadius * $math.sin(this.axisAngle) }) + $path.lineTo({ x: this.pixelRadius * $math.cos(this.axisAngle), y: this.pixelRadius * $math.sin(this.axisAngle) });\r\n\r\n\t\tlet title = this.axis.title;\r\n\t\ttitle.valign = \"none\";\r\n\t\ttitle.horizontalCenter = \"middle\";\r\n\t\ttitle.verticalCenter = \"bottom\";\r\n\t\ttitle.y = - this.axisLength / 2;\r\n\t\tlet rotation: number = 90;\r\n\t\tif (this.opposite) {\r\n\t\t\tif (!this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.inside) {\r\n\t\t\t\trotation = -90;\r\n\t\t\t}\r\n\t\t}\r\n\t\ttitle.rotation = rotation;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Grid} grid Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tlet path: string;\r\n\t\tlet radius: number = $math.getDistance(point);\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\r\n\t\tif ($type.isNumber(radius) && grid.element) {\r\n\t\t\tlet chart = this.chart;\r\n\t\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\t\tlet count = chart.dataItems.length;\r\n\t\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t\t// polygons are only possible if x axis is present\r\n\t\t\t// @todo: review this\r\n\t\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t\t}\r\n\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tpath = $path.moveTo({ x: radius * $math.cos(startAngle), y: radius * $math.sin(startAngle) }) + $path.arcTo(startAngle, endAngle - startAngle, radius, radius);\r\n\t\t\t}\r\n\t\t\tgrid.path = path;\r\n\t\t}\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a label element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisLabel} label Label element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition Ending position\r\n\t */\r\n\tpublic updateLabelElement(label: this[\"_labelType\"], position: number, endPosition: number, location?: number) {\r\n\r\n\t\tif (!$type.hasValue(location)) {\r\n\t\t\tlocation = label.location;\r\n\t\t}\r\n\r\n\t\tposition = position + (endPosition - position) * location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tthis.positionItem(label, point);\r\n\t\tthis.toggleVisibility(label, position, this.minLabelPosition, this.maxLabelPosition);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\t// @todo? zero grid for radar chart, is it needed?\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if point is within bounds of a container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint} point Point coordinates\r\n\t * @return {boolean} Fits?\r\n\t */\r\n\tpublic fitsToBounds(point: IPoint): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param {number} value Start angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\t// do not normalize 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 {number} Start angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the axis in degrees. (0-360)\r\n\t *\r\n\t * @param {number} value End angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\t// do not normalize angel here!\r\n\t\tif (this.setPropertyValue(\"endAngle\", value)) {\r\n\t\t\tthis.invalidateAxisItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the radial axis in degrees. (0-360)\r\n\t *\r\n\t * @param {number} value Axis angle\r\n\t */\r\n\tpublic set axisAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"axisAngle\", $math.normalizeAngle(value));\r\n\t\tthis.invalidateAxisItems();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Axis angle\r\n\t */\r\n\tpublic get axisAngle(): number {\r\n\t\treturn this.getPropertyValue(\"axisAngle\");\r\n\t\t//return $math.fitToRange(this.getPropertyValue(\"axisAngle\"), this.startAngle, this.endAngle); // no good, as less flexible\r\n\t}\r\n\r\n\t// polygons grid type is only possible under these conditions: xAxis is available and it is CategoryAxis, also at least one series should be added to a chart\r\n\r\n\t/**\r\n\t * Grid type for radial axis.\r\n\t *\r\n\t * A grid on radia axis can either be perfect circles (\"circles\"), or\r\n\t * straight lines (\"polygons\").\r\n\t *\r\n\t * @default \"circles\"\r\n\t * @param {\"circles\" | \"polygons\"} value Grid type\r\n\t */\r\n\tpublic set gridType(value: \"circles\" | \"polygons\") {\r\n\t\tthis.setPropertyValue(\"gridType\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @type {\"circles\" | \"polygons\"} Grid type\r\n\t */\r\n\tpublic get gridType(): \"circles\" | \"polygons\" {\r\n\t\tlet axis: Axis = this.chart.xAxes.getIndex(0);\r\n\t\tif (axis instanceof CategoryAxis) {\r\n\t\t\treturn this.getPropertyValue(\"gridType\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn \"circles\";\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * [getPositionRangePath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param {number} startPosition Starting position\r\n\t * @param {number} endPosition End position\r\n\t * @return {string} SVG path\r\n\t */\r\n\tpublic getPositionRangePath(startPosition: number, endPosition: number): string {\r\n\t\tlet pixelInnerRadius = this.pixelInnerRadius;\r\n\t\tlet pixelRadius = this.axisLength + pixelInnerRadius;\r\n\t\tlet innerRadius: number = $math.fitToRange(this.positionToCoordinate(startPosition), pixelInnerRadius, pixelRadius);\r\n\t\tlet radius: number = $math.fitToRange(this.positionToCoordinate(endPosition), pixelInnerRadius, pixelRadius);\r\n\r\n\t\t//let angleCount: number = this.angleCount;\r\n\t\tlet startAngle: number = this.startAngle;\r\n\t\tlet endAngle: number = this.endAngle;\r\n\t\tlet arc: number = endAngle - startAngle;\r\n\r\n\t\tlet path: string;\r\n\r\n\t\tlet chart = this.chart;\r\n\t\tlet xAxis = chart.xAxes.getIndex(0);\r\n\t\tlet count = chart.dataItems.length;\r\n\t\tlet series = chart.series.getIndex(0);\r\n\r\n\t\t// polygons are only possible if x axis is present\r\n\t\t// @todo: review this\r\n\t\tif (this.gridType == \"polygons\" && count > 0 && series && xAxis && xAxis instanceof CategoryAxis) {\r\n\t\t\tlet gridLocation = xAxis.renderer.grid.template.location;\r\n\r\n\t\t\tlet angle: number = xAxis.getAngle(series.dataItems.getIndex(0), \"categoryX\", gridLocation);\r\n\t\t\tpath = $path.moveTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\tlet count: number = chart.dataItems.length;\r\n\r\n\t\t\tfor (let i = 1; i < count; i++) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\t\t\t}\r\n\r\n\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(count - 1), \"categoryX\", xAxis.renderer.cellEndLocation);\r\n\t\t\tpath += $path.lineTo({ x: radius * $math.cos(angle), y: radius * $math.sin(angle) });\r\n\r\n\t\t\tpath += $path.moveTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) })\r\n\r\n\t\t\tfor (let i = count - 1; i >= 0; i--) {\r\n\t\t\t\tangle = xAxis.getAngle(series.dataItems.getIndex(i), \"categoryX\", gridLocation);\r\n\t\t\t\tpath += $path.lineTo({ x: innerRadius * $math.cos(angle), y: innerRadius * $math.sin(angle) });\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpath = $path.arc(startAngle, arc, radius, innerRadius);\r\n\t\t}\r\n\t\treturn path;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions an axis break element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisBreak} axisBreak Break element\r\n\t */\r\n\tpublic updateBreakElement(axisBreak: AxisBreak) {\r\n\t\t// @todo: someday we might need axis break when gridType is polygons\r\n\r\n\t\tlet startLine: WavedCircle = axisBreak.startLine;\r\n\t\tlet endLine: WavedCircle = axisBreak.endLine;\r\n\t\tlet fillShape: WavedCircle = axisBreak.fillShape;\r\n\r\n\t\tlet startPoint: IPoint = axisBreak.startPoint;\r\n\t\tlet endPoint: IPoint = axisBreak.endPoint;\r\n\r\n\t\tstartLine.radius = Math.abs(startPoint.y);\r\n\t\tendLine.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.radius = Math.abs(endPoint.y);\r\n\t\tfillShape.innerRadius = Math.abs(startPoint.y);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates visual elements for and axis break.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisBreak} axisBreak Axis break\r\n\t */\r\n\tpublic createBreakSprites(axisBreak: AxisBreak): void {\r\n\t\taxisBreak.startLine = new WavedCircle();\r\n\t\taxisBreak.endLine = new WavedCircle();\r\n\t\taxisBreak.fillShape = new WavedCircle();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates some of the Axis tooltip's visual properties, related to\r\n\t * rendering of the Axis.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateTooltip(): void {\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tif (axis) {\r\n\r\n\t\t\tlet bigNum: number = 4000;\r\n\t\t\tlet bbx: number = -4000;\r\n\t\t\tlet bby: number = -4000;\r\n\t\t\tlet bbw: number = bigNum * 2;\r\n\t\t\tlet bbh: number = bigNum * 2;\r\n\t\t\tlet axisAngle: number = this.axisAngle;\r\n\t\t\tif (axisAngle < 0) {\r\n\t\t\t\taxisAngle += 360;\r\n\t\t\t}\r\n\t\t\tlet tooltipOrientation: PointerOrientation = \"vertical\";\r\n\t\t\tif ((axisAngle > 45 && axisAngle < 135) || (axisAngle > 225 && axisAngle < 315)) {\r\n\t\t\t\ttooltipOrientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\tthis.axis.updateTooltip(tooltipOrientation, { x: bbx, y: bby, width: bbw, height: bbh });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AxisTick} tick Tick element\r\n\t * @param {number} position Position\r\n\t */\r\n\tpublic updateTickElement(tick: AxisTick, position: number): void {\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (tick.element) {\r\n\t\t\tlet angle: number = $math.normalizeAngle(this.axisAngle + 90);\r\n\t\t\tif (angle / 90 != Math.round(angle / 90)) {\r\n\t\t\t\ttick.pixelPerfect = false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttick.pixelPerfect = true;\r\n\t\t\t}\r\n\t\t\tlet tickLength = -tick.length;\r\n\t\t\tif (tick.inside) {\r\n\t\t\t\ttickLength *= -1;\r\n\t\t\t}\r\n\t\t\ttick.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: tickLength * $math.cos(angle), y: tickLength * $math.sin(angle) });\r\n\t\t}\r\n\t\tthis.positionItem(tick, point);\r\n\r\n\t\tthis.toggleVisibility(tick, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a position on the axis to a coordinate in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {number} Coordinate (px)\r\n\t */\r\n\tpublic positionToCoordinate(position: number): number {\r\n\t\tlet coordinate: number;\r\n\t\tlet axis: Axis = this.axis;\r\n\t\tlet axisFullLength = axis.axisFullLength;\r\n\t\tlet innerRadius = this.pixelInnerRadius;\r\n\r\n\t\tif (axis.renderer.inversed) {\r\n\t\t\tcoordinate = (axis.end - position) * axisFullLength + innerRadius;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcoordinate = (position - axis.start) * axisFullLength + innerRadius;\r\n\t\t}\r\n\r\n\t\treturn $math.round(coordinate, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a point at specific coordinates to a relative position (0-1)\r\n\t * on the axis.\r\n\t *\r\n\t * @param {IPoint} point Point\r\n\t * @return {number} Position (0-1)\r\n\t */\r\n\tpublic pointToPosition(point: IPoint) {\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 { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { RadarSeries } from \"../series/RadarSeries\";\r\nimport { RadarColumnSeries } from \"../series/RadarColumnSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { IComponentEvents } from \"../../core/Component\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { RadarCursor } from \"../cursors/RadarCursor\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRenderer } from \"../axes/AxisRenderer\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarChartDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {RadarChart}\r\n\t */\r\n\tpublic _component!: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarChart]].\r\n */\r\nexport interface IRadarChartDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarChart]].\r\n */\r\nexport interface IRadarChartProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Radius of the Radar face. Absolute or relative.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Radar face. Percent value is relative to radius.\r\n\t *\r\n\t * @todo review desc\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[RadarChart]].\r\n */\r\nexport interface IRadarChartEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarChartAdapters extends IXYChartAdapters, IRadarChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Radar chart.\r\n *\r\n * @see {@link IRadarChartEvents} for a list of available Events\r\n * @see {@link IRadarChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/radar-chart/} for documentation\r\n * @important\r\n */\r\nexport class RadarChart extends XYChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IRadarChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarChartProperties}\r\n\t */\r\n\tpublic _properties!: IRadarChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarChartEvents}\r\n\t */\r\n\tpublic _events!: IRadarChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {RadarSeries | RadarColumnSeries}\r\n\t */\r\n\tpublic _seriesType: RadarSeries | RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t *\r\n\t * @type {AxisRendererCircular}\r\n\t */\r\n\tpublic _xAxisRendererType: AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t *\r\n\t * @type {AxisRendererRadial}\r\n\t */\r\n\tpublic _yAxisRendererType: AxisRendererRadial;\r\n\r\n\t/**\r\n\t * Defines X axis renderer type.\r\n\t *\r\n\t * @type {AxisRendererCircular}\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererCircular = AxisRendererCircular;\r\n\r\n\t/**\r\n\t * Defines Y axis renderer type.\r\n\t *\r\n\t * @type {AxisRendererRadial}\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererRadial = AxisRendererRadial;\r\n\r\n\t/**\r\n\t * [_cursor description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {RadarCursor}\r\n\t */\r\n\tpublic _cursor: RadarCursor;\r\n\r\n\t/**\r\n\t * A container that holds Radar visual elements.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic radarContainer: Container;\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _pixelInnerRadius: number;\r\n\r\n\r\n\t/**\r\n\t * used by cursor. We adjust innerradius if start and end angle are close to each other\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic innerRadiusModifyer: number = 1;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarChart\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\t\tthis.innerRadius = 0;\r\n\r\n\t\tlet radarContainer = this.plotContainer.createChild(Container);\r\n\t\tradarContainer.shouldClone = false;\r\n\t\tradarContainer.layout = \"absolute\";\r\n\t\tradarContainer.align = \"center\";\r\n\t\tradarContainer.valign = \"middle\";\r\n\r\n\t\tthis.seriesContainer.parent = radarContainer;\r\n\t\tthis.radarContainer = radarContainer;\r\n\t\tthis.bulletsContainer.parent = radarContainer;\r\n\r\n\t\tthis._cursorContainer = radarContainer;\r\n\r\n\t\tthis._bulletMask = radarContainer.createChild(Circle);\r\n\t\tthis._bulletMask.shouldClone = false;\r\n\t\tthis._bulletMask.element = this.paper.add(\"path\");\r\n\t\tthis._bulletMask.opacity = 0;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Radar chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates Axis with required properties for this chart.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tprotected processAxis(axis: Axis): void {\r\n\t\tsuper.processAxis(axis);\r\n\t\tlet renderer: AxisRenderer = axis.renderer;\r\n\t\trenderer.gridContainer.parent = renderer;\r\n\t\trenderer.breakContainer.parent = renderer;\r\n\t\taxis.parent = this.radarContainer;\r\n\t\trenderer.toBack();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all X axes after range change event.\r\n\t */\r\n\tprotected handleXAxisRangeChange() {\r\n\t\tsuper.handleXAxisRangeChange();\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates all Y axes after range change event.\r\n\t */\r\n\tprotected handleYAxisRangeChange() {\r\n\t\tsuper.handleYAxisRangeChange();\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\taxis.invalidate();\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Cursor, of type suitable for RadarChart.\r\n\t *\r\n\t * @return {RadarCursor} Cursor\r\n\t */\r\n\tprotected createCursor(): this[\"_cursor\"] {\r\n\t\treturn new RadarCursor();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up cursor\r\n\t\t\tif ($type.hasValue(config.cursor) && !$type.hasValue(config.cursor.type)) {\r\n\t\t\t\tconfig.cursor.type = \"RadarCursor\";\r\n\t\t\t}\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"RadarSeries\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Set up axes\r\n\t\t\t/*if ($type.hasValue(config.xAxes) && $type.isArray(config.xAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.xAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.xAxes[i].type = config.xAxes[i].type || \"AxisRendererCircular\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.yAxes) && $type.isArray(config.yAxes)) {\r\n\t\t\t\tfor (let i = 0, len = config.yAxes.length; i < len; i++) {\r\n\t\t\t\t\tconfig.yAxes[i].type = config.yAxes[i].type || \"AxisRendererRadial\";\r\n\t\t\t\t}\r\n\t\t\t}*/\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Does calculations before drawing the chart.\r\n\t */\r\n\tprotected beforeDraw(): void {\r\n\t\tsuper.beforeDraw();\r\n\r\n\t\tlet radarCont = this.radarContainer;\r\n\t\tlet plotContainer = this.plotContainer;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\tlet wr = plotContainer.innerWidth / rect.width;\r\n\t\tlet hr = plotContainer.innerHeight / rect.height;\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tlet value = innerRadius.value;\r\n\t\t\tlet mr = Math.min(wr, hr);\r\n\t\t\tvalue = Math.max(mr * value, mr - Math.min(plotContainer.innerHeight, plotContainer.innerWidth)) / mr;\r\n\t\t\tinnerRect = $math.getArcRect(this.startAngle, this.endAngle, value);\r\n\r\n\t\t\tthis.innerRadiusModifyer = value / innerRadius.value;\r\n\t\t\tinnerRadius = percent(value * 100);\r\n\t\t}\r\n\t\t// @todo handle this when innerRadius set in pixels (do it for pie also)\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(plotContainer.innerWidth / rect.width, plotContainer.innerHeight / rect.height);\r\n\r\n\t\tlet diameter = $utils.relativeRadiusToValue(this.radius, maxRadius) * 2 || 0;\r\n\t\tlet radius = diameter / 2;\r\n\t\tlet startAngle = this.startAngle;\r\n\t\tlet endAngle = this.endAngle;\r\n\r\n\t\tthis._pixelInnerRadius = $utils.relativeRadiusToValue(innerRadius, radius);\r\n\r\n\t\tthis._bulletMask.path = $path.arc(startAngle, endAngle - startAngle, radius, this._pixelInnerRadius);\r\n\r\n\t\t$iter.each(this.xAxes.iterator(), (axis) => {\r\n\t\t\tif(axis.renderer.useChartAngles){\r\n\t\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\t\taxis.renderer.endAngle = endAngle;\r\n\t\t\t}\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\t$iter.each(this.yAxes.iterator(), (axis) => {\r\n\t\t\taxis.renderer.startAngle = startAngle;\r\n\t\t\taxis.renderer.endAngle = endAngle;\r\n\r\n\t\t\taxis.width = diameter;\r\n\t\t\taxis.height = diameter;\r\n\t\t\t//axis.renderer.width = diameter;\r\n\t\t\t//axis.renderer.height = diameter;\r\n\t\t\taxis.renderer.pixelRadiusReal = radius;\r\n\t\t\taxis.renderer.innerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\tlet cursor = this.cursor;\r\n\t\tif (cursor) {\r\n\t\t\tcursor.width = diameter;\r\n\t\t\tcursor.height = diameter;\r\n\t\t\tcursor.startAngle = startAngle;\r\n\t\t\tcursor.endAngle = endAngle;\r\n\t\t}\r\n\r\n\t\tthis.radarContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.radarContainer.validatePosition();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series, suitable for RadarChart.\r\n\t *\r\n\t * @return {RadarSeries} New Series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new RadarSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius in pixels\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn this._pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * If set in Percent, it will be relative to `radius`. (outer radius)\r\n\t *\r\n\t * @param {number | Percent} value Inner radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the horizontal (X) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic updateXAxis(renderer: AxisRenderer) {\r\n\t\t//do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers (re)rendering of the vertical (Y) axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic updateYAxis(renderer: AxisRenderer) {\r\n\t\t// do not call super!\r\n\t\tif (renderer) {\r\n\t\t\trenderer.processRenderer();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarChart\"] = RadarChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/RadarChart.ts","/**\r\n * Functionality for drawing simple ClockHands\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Container, IContainerProperties, IContainerAdapters, IContainerEvents } from \"../../core/Container\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Circle } from \"../../core/elements/Circle\";\r\nimport { Trapezoid } from \"../../core/elements/Trapezoid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { AxisRendererCircular } from \"../axes/AxisRendererCircular\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { GaugeChart } from \"../types/GaugeChart\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ClockHand]].\r\n */\r\nexport interface IClockHandProperties extends IContainerProperties {\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(100)\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius: number | Percent;\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius: number | Percent;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's tip.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\tendWidth: number;\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's base.\r\n\t *\r\n\t * @default 5\r\n\t * @type {number}\r\n\t */\r\n\tstartWidth: number;\r\n\r\n\t/**\r\n\t * rotation direction\r\n\t * @type {\"any\" | \"clockWise\" | \"CounterClockWise\"}\r\n\t * @default \"any\"\r\n\t */\r\n\trotationDirection: \"any\" | \"clockWise\" | \"CounterClockWise\";\r\n}\r\n\r\n/**\r\n * Defines events for [[ClockHand]].\r\n */\r\nexport interface IClockHandEvents extends IContainerEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ClockHand]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IClockHandAdapters extends IContainerAdapters, IClockHandProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * ClockHand class is capable of drawing a simple pointy shape with optionally\r\n * rounderd corners and an icon.\r\n *\r\n * @see {@link IClockHandEvents} for a list of available events\r\n * @see {@link IClockHandAdapters} for a list of available Adapters\r\n * @todo Improve\r\n * @important\r\n */\r\nexport class ClockHand extends Container {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IClockHandProperties}\r\n\t */\r\n\tpublic _properties!: IClockHandProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IClockHandAdapters}\r\n\t */\r\n\tpublic _adapter!: IClockHandAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IClockHandEvents}\r\n\t */\r\n\tpublic _events!: IClockHandEvents;\r\n\r\n\t/**\r\n\t * A circle element used as hand's base.\r\n\t *\r\n\t * @type {Circle}\r\n\t */\r\n\tprotected _pin: Circle;\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t *\r\n\t * @type {Trapezoid}\r\n\t */\r\n\tprotected _hand: Trapezoid;\r\n\r\n\t/**\r\n\t * An Axis hand is related to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _axis: MutableValueDisposer = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Hand's current value.\r\n\t *\r\n\t * @type {any}\r\n\t */\r\n\tprotected _value: any;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ClockHand\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.fill = interfaceColors.getFor(\"alternativeBackground\");\r\n\t\tthis.stroke = this.fill;\r\n\r\n\t\tlet pin: Circle = new Circle();\r\n\t\tpin.radius = 5;\r\n\t\tthis.pin = pin;\r\n\t\tthis.isMeasured = false;\r\n\r\n\t\tthis.startWidth = 5;\r\n\t\tthis.endWidth = 1;\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.radius = percent(100);\r\n\t\tthis.innerRadius = percent(0);\r\n\r\n\t\tlet hand: Trapezoid = new Trapezoid();\r\n\t\tthis.hand = hand;\r\n\r\n\t\tthis._disposers.push(this._axis);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Re(validates) the clock hand, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\t\tlet hand = this.hand;\r\n\t\thand.width = this.pixelWidth;\r\n\t\tlet h: number = Math.max(this.startWidth, this.endWidth);\r\n\t\thand.height = h;\r\n\t\thand.leftSide = percent(this.startWidth / h * 100);\r\n\t\thand.rightSide = percent(this.endWidth / h * 100);\r\n\r\n\t\tif (this.axis) {\r\n\t\t\tlet renderer: AxisRendererCircular = this.axis.renderer;\r\n\r\n\t\t\tlet x0: number = $utils.relativeRadiusToValue(this.innerRadius, renderer.pixelRadius);\r\n\t\t\tlet x1: number = $utils.relativeRadiusToValue(this.radius, renderer.pixelRadius);\r\n\r\n\t\t\thand.x = x0;\r\n\t\t\thand.y = - h / 2;\r\n\r\n\t\t\thand.width = x1 - x0;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A circle element used as hand's base. (pin)\r\n\t *\r\n\t * @param {Circle} pin Pin element\r\n\t */\r\n\tpublic set pin(pin: Circle) {\r\n\t\tif (this._pin) {\r\n\t\t\tthis.removeDispose(this._pin);\r\n\t\t}\r\n\t\tif (pin) {\r\n\t\t\tthis._pin = pin;\r\n\t\t\tpin.parent = this;\r\n\t\t\tthis._disposers.push(pin);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Circle} Pin element\r\n\t */\r\n\tpublic get pin(): Circle {\r\n\t\treturn this._pin;\r\n\t}\r\n\r\n\t/**\r\n\t * A trapezoid shape used for hand itself.\r\n\t *\r\n\t * The shape of the trapezoid is controlled by ClockHand's `startWidth` and\r\n\t * `endWidth` properties.\r\n\t *\r\n\t * Set `endWidth` to 1 (px) to make it pointy.\r\n\t *\r\n\t * @param {Trapezoid} hand Hand element\r\n\t */\r\n\tpublic set hand(hand: Trapezoid) {\r\n\t\tif (this._hand) {\r\n\t\t\tthis.removeDispose(this._hand);\r\n\t\t}\r\n\t\tif (hand) {\r\n\t\t\tthis._hand = hand;\r\n\t\t\thand.parent = this;\r\n\t\t\tthis._disposers.push(hand);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Trapezoid} Hand element\r\n\t */\r\n\tpublic get hand(): Trapezoid {\r\n\t\treturn this._hand;\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's outer end. (tip)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Radius of the hand's inner end. (base)\r\n\t *\r\n\t * Absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @default Percent(0)\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's inner end. (base)\r\n\t *\r\n\t * @default 5\r\n\t * @param {number} value Width (px)\r\n\t */\r\n\tpublic set startWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"startWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Width (px)\r\n\t */\r\n\tpublic get startWidth(): number {\r\n\t\treturn this.getPropertyValue(\"startWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width, in pixels, of the clock hand's outer end. (tip)\r\n\t *\r\n\t * @default 1\r\n\t * @param {number} value Width (px)\r\n\t */\r\n\tpublic set endWidth(value: number) {\r\n\t\tthis.setPropertyValue(\"endWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Width (px)\r\n\t */\r\n\tpublic get endWidth(): number {\r\n\t\treturn this.getPropertyValue(\"endWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Rotation direction\r\n\t *\r\n\t * @default any\r\n\t * @param {\"any\" | \"clockWise\" | \"counterClockWise\"} value\r\n\t */\r\n\tpublic set rotationDirection(value: \"any\" | \"clockWise\" | \"counterClockWise\") {\r\n\t\tthis.setPropertyValue(\"rotationDirection\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"any\" | \"clockWise\" | \"counterClockWise\"} rotationDirection\r\n\t */\r\n\tpublic get rotationDirection(): \"any\" | \"clockWise\" | \"counterClockWise\" {\r\n\t\treturn this.getPropertyValue(\"rotationDirection\");\r\n\t}\r\n\r\n\t/**\r\n\t * Moves clock hand to particular value.\r\n\t *\r\n\t * If `duration` is set to a number in milliseconds, the hand will move\r\n\t * to the new position gracefully, rather than jumping rigth to it.\r\n\t *\r\n\t * Alternatively, you can also set `value` directly.\r\n\t *\r\n\t * @param {any} value New value\r\n\t * @param {number} duration Animation duration (ms)\r\n\t * @param {(value:number)=>number} easing Animation easing function\r\n\t */\r\n\tpublic showValue(value: any, duration?: number, easing?: (value: number) => number): void {\r\n\t\tthis._value = value;\r\n\t\tif (value != undefined) {\r\n\t\t\tif (!$type.isNumber(duration)) {\r\n\t\t\t\tduration = 0;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.axis) {\r\n\t\t\t\tlet renderer = this.axis.renderer;\r\n\t\t\t\tlet newAngle = renderer.positionToAngle(this.axis.anyToPosition(value));\r\n\t\t\t\tlet currentAngle = this.rotation;\r\n\r\n\t\t\t\tif (this.rotationDirection == \"clockWise\") {\r\n\t\t\t\t\tif (newAngle < currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle - 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.rotationDirection == \"counterClockWise\") {\r\n\t\t\t\t\tif (newAngle > currentAngle) {\r\n\t\t\t\t\t\tthis.rotation = currentAngle + 360;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.animate({ property: \"rotation\", to: newAngle }, duration, easing);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A current value clock hand is pointing to.\r\n\t *\r\n\t * @param {any} value Value\r\n\t */\r\n\tpublic set value(value: any) {\r\n\t\tthis.showValue(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {any} Value\r\n\t */\r\n\tpublic get value(): any {\r\n\t\treturn this._value;\r\n\t}\r\n\r\n\t/**\r\n\t * An Axis clock hand is associated with.\r\n\t *\r\n\t * Hand's `value` relates to values on the Axis.\r\n\t *\r\n\t * @param {Axis} axis Axis\r\n\t */\r\n\tpublic set axis(axis: Axis) {\r\n\t\tif (this.axis != axis) {\r\n\t\t\tthis._axis.set(axis, new MultiDisposer([\r\n\t\t\t\taxis.events.on(\"datavalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"datarangechanged\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"dataitemsvalidated\", this.updateValue, this, false),\r\n\t\t\t\taxis.events.on(\"propertychanged\", this.invalidate, this, false)\r\n\t\t\t]));\r\n\t\t}\r\n\t\tif (axis) {\r\n\t\t\tlet chart: GaugeChart = axis.chart;\r\n\t\t\tif (chart) {\r\n\t\t\t\tthis.rotation = chart.startAngle;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis.parent = axis.renderer;\r\n\t\tthis.zIndex = 5;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Axis} Axis\r\n\t */\r\n\tpublic get axis(): Axis {\r\n\t\treturn this._axis.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Triggers `value` accessor, so that Hand animates to new position, in case\r\n\t * value has changed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateValue() {\r\n\t\tthis.value = this.value;\r\n\t}\r\n\r\n\t/**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param {object} config Config\r\n */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Connect clock hands with axes\r\n\t\t\tif ($type.hasValue(config.axis) && $type.isString(config.axis) && this.map.hasKey(config.axis)) {\r\n\t\t\t\tconfig.axis = this.map.getKey(config.axis);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ClockHand\"] = ClockHand;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ClockHand.ts","/**\r\n * Module for building Gauge charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { RadarChart, IRadarChartProperties, IRadarChartDataFields, IRadarChartAdapters, IRadarChartEvents, RadarChartDataItem } from \"./RadarChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, IListEvents, ListDisposer } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Component, IComponentEvents } from \"../../core/Component\";\r\nimport { ClockHand } from \"../elements/ClockHand\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[GaugeChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class GaugeChartDataItem extends RadarChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {GaugeChart}\r\n\t */\r\n\tpublic _component!: GaugeChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartDataFields extends IRadarChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartProperties extends IRadarChartProperties { }\r\n\r\n/**\r\n * Defines events for [[GaugeChart]].\r\n */\r\nexport interface IGaugeChartEvents extends IRadarChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[GaugeChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IGaugeChartAdapters extends IRadarChartAdapters, IGaugeChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Gauge chart.\r\n *\r\n * @see {@link IGaugeChartEvents} for a list of available Events\r\n * @see {@link IGaugeChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/gauge-chart/} for documentation\r\n * @important\r\n */\r\nexport class GaugeChart extends RadarChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IGaugeChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IGaugeChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IGaugeChartProperties}\r\n\t */\r\n\tpublic _properties!: IGaugeChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IGaugeChartAdapters}\r\n\t */\r\n\tpublic _adapter!: IGaugeChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IGaugeChartEvents}\r\n\t */\r\n\tpublic _events!: IGaugeChartEvents;\r\n\r\n\t/**\r\n\t * A list of [[ClockHand]] items displayed on this Gauge chart.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tpublic hands: ListTemplate;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"GaugeChart\";\r\n\r\n\t\tthis.startAngle = 180;\r\n\t\tthis.endAngle = 360;\r\n\r\n\t\tthis.hands = new ListTemplate(new ClockHand());\r\n\t\tthis.hands.events.on(\"inserted\", this.processHand, this, false);\r\n\r\n\t\tthis._disposers.push(new ListDisposer(this.hands));\r\n\t\tthis._disposers.push(this.hands.template);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Gauge chart\");\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a [[ClockHand]] when it is added to the chart.\r\n\t *\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tprotected processHand(event: IListEvents[\"inserted\"]): void {\r\n\t\tlet hand: ClockHand = event.newValue;\r\n\t\tif (!hand.axis) {\r\n\t\t\thand.axis = this.xAxes.getIndex(0);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"GaugeChart\"] = GaugeChart;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/GaugeChart.ts","/**\r\n * Percent chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SerialChart, ISerialChartProperties, ISerialChartDataFields, ISerialChartAdapters, ISerialChartEvents, SerialChartDataItem } from \"./SerialChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { PercentSeries, PercentSeriesDataItem } from \"../series/PercentSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, IListEvents, ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PercentChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PercentChartDataItem extends SerialChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PercentChart}\r\n\t */\r\n\tpublic _component!: PercentChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PercentChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PercentChart]].\r\n */\r\nexport interface IPercentChartDataFields extends ISerialChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PercentChart]]\r\n */\r\nexport interface IPercentChartProperties extends ISerialChartProperties { }\r\n\r\n/**\r\n * Defines events for [[PercentChart]].\r\n */\r\nexport interface IPercentChartEvents extends ISerialChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PercentChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPercentChartAdapters extends ISerialChartAdapters, IPercentChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This is a base class for \"percent-based\" chart types like Pie and Funnel.\r\n *\r\n * @see {@link IPercentChartEvents} for a list of available Events\r\n * @see {@link IPercentChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for Pie chart documentation\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for Sliced chart documentation\r\n */\r\nexport class PercentChart extends SerialChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IPercentChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IPercentChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPercentChartProperties}\r\n\t */\r\n\tpublic _properties!: IPercentChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPercentChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPercentChartEvents}\r\n\t */\r\n\tpublic _events!: IPercentChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PercentSeries}\r\n\t */\r\n\tpublic _seriesType: PercentSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PercentChart\";\r\n\r\n\t\tthis.align = \"none\";\r\n\t\tthis.valign = \"none\";\r\n\r\n\t\t// so that the chart is always drawn, even the legend wants all the space\r\n\t\tthis.chartContainer.minHeight = 50;\r\n\t\tthis.chartContainer.minWidth = 50;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates chart data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tsuper.validateData();\r\n\t\tthis.feedLegend();\r\n\t}\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\r\n\t\t\tlet legendData: any[] = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\t$iter.each(series.dataItems.iterator(), (dataItem) => {\r\n\t\t\t\t\tif (!dataItem.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(dataItem);\r\n\r\n\t\t\t\t\t\tlet legendSettings = series.legendSettings;\r\n\t\t\t\t\t\tif (legendSettings) {\r\n\t\t\t\t\t\t\tif (legendSettings.labelText) {\r\n\t\t\t\t\t\t\t\tlegend.labels.template.text = legendSettings.labelText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.itemLabelText) {\r\n\t\t\t\t\t\t\t\tlegend.labels.template.text = legendSettings.itemLabelText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.valueText) {\r\n\t\t\t\t\t\t\t\tlegend.valueLabels.template.text = legendSettings.valueText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (legendSettings.itemValueText) {\r\n\t\t\t\t\t\t\t\tlegend.valueLabels.template.text = legendSettings.itemValueText;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tlegend.data = legendData;\r\n\t\t\tlegend.dataFields.name = \"category\";\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new [[PercentSeries]].\r\n\t *\r\n\t * @return {PercentSeries} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PercentSeries();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected setLegend(legend: Legend) {\r\n\t\tsuper.setLegend(legend);\r\n\t\tif (legend) {\r\n\t\t\tlegend.labels.template.text = \"{category}\";\r\n\t\t\tlegend.valueLabels.template.text = \"{value.percent.formatNumber('#.0')}%\";\r\n\r\n\t\t\tlegend.itemContainers.template.events.on(\"over\", (event) => {\r\n\t\t\t\tlet PercentSeriesDataItem: PercentSeriesDataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tif (PercentSeriesDataItem.visible && !PercentSeriesDataItem.isHiding) {\r\n\t\t\t\t\tPercentSeriesDataItem.slice.isHover = true;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tlegend.itemContainers.template.events.on(\"out\", (event) => {\r\n\t\t\t\tlet PercentSeriesDataItem: PercentSeriesDataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tPercentSeriesDataItem.slice.isHover = false;\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @hidden\r\n */\r\nregistry.registeredClasses[\"PercentChart\"] = PercentChart;\r\nregistry.registeredClasses[\"PercentChartDataItem\"] = PercentChartDataItem;\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PercentChart.ts","/**\r\n * Pie tick module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Tick, ITickProperties, ITickAdapters, ITickEvents } from \"../elements/Tick\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { MutableValueDisposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { PieSeries } from \"../series/PieSeries\"\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[PieTick]].\r\n */\r\nexport interface IPieTickProperties extends ITickProperties { }\r\n\r\n/**\r\n * Defines events for [[PieTick]].\r\n */\r\nexport interface IPieTickEvents extends ITickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieTick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieTickAdapters extends ITickAdapters, IPieTickProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws an tick line for a pie slice connecting it to a related label.\r\n *\r\n * @see {@link IPieTickEvents} for a list of available events\r\n * @see {@link IPieTickAdapters} for a list of available Adapters\r\n */\r\nexport class PieTick extends Tick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieTickProperties}\r\n\t */\r\n\tpublic _properties!: IPieTickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieTickAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieTickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieTickEvents}\r\n\t */\r\n\tpublic _events!: IPieTickEvents;\r\n\r\n\t/**\r\n\t * A label element this tick is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _label = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * A slice element this tick is attached to.\r\n\t *\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _slice = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieTick\";\r\n\t\tthis.element = this.paper.add(\"polyline\");\r\n\t\tthis._disposers.push(this._label);\r\n\t\tthis._disposers.push(this._slice);\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the tick element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\r\n\t\tlet slice: Slice = this.slice;\r\n\t\tlet label = this.label;\r\n\r\n\t\tlet series = slice.dataItem.component;\r\n\r\n\t\tif (slice && slice.radius > 0 && label && label.text) {\r\n\t\t\tlet x0 = slice.dx + slice.slice.dx + slice.pixelX + slice.ix * slice.radius * slice.scale;\r\n\t\t\tlet y0 = slice.dy + slice.slice.dy + slice.pixelY + slice.iy * slice.radius * slice.scale;\r\n\r\n\t\t\tlet x1: number;\r\n\t\t\tlet y1: number;\r\n\r\n\t\t\tlet x2: number;\r\n\t\t\tlet y2: number;\r\n\r\n\t\t\tif (series.alignLabels) {\r\n\t\t\t\tx1 = label.pixelX - this.length;\r\n\t\t\t\ty1 = label.pixelY;\r\n\r\n\t\t\t\tx2 = label.pixelX;\r\n\t\t\t\ty2 = y1;\r\n\r\n\t\t\t\tif (label.horizontalCenter == \"right\") {\r\n\t\t\t\t\tx1 += 2 * this.length;\r\n\t\t\t\t\tx2 = x1 - this.length;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tvar r = label.pixelRadius(slice.radius);\r\n\r\n\t\t\t\tx1 = x0 + r * slice.ix;\r\n\t\t\t\ty1 = y0 + r * slice.iy;\r\n\r\n\t\t\t\tx2 = x1;\r\n\t\t\t\ty2 = y1;\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.attr({ \"points\": [x0, y0, x1, y1, x2, y2] });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Slice element tick is attached to.\r\n\t *\r\n\t * @param {Slice} slice Slice\r\n\t */\r\n\tpublic set slice(slice: Slice) {\r\n\t\tthis._slice.set(slice, new MultiDisposer([\r\n\t\t\tslice.events.on(\"transformed\", this.invalidate, this),\r\n\t\t\tslice.events.on(\"validated\", this.invalidate, this)\r\n\t\t]));\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Slice} Slice\r\n\t */\r\n\tpublic get slice(): Slice {\r\n\t\treturn this._slice.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Label element tick is attached to.\r\n\t *\r\n\t * @param {AxisLabelCircular} label Label\r\n\t */\r\n\tpublic set label(label: AxisLabelCircular) {\r\n\t\tthis._label.set(label, label.events.on(\"transformed\", this.invalidate, this, false));\r\n\t}\r\n\r\n\t/**\r\n\t * @return {AxisLabelCircular} Label\r\n\t */\r\n\tpublic get label(): AxisLabelCircular {\r\n\t\treturn this._label.get();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieTick\"] = PieTick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/PieTick.ts","/**\r\n * Defines Pie Chart Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPercentSeriesAdapters, IPercentSeriesDataFields, IPercentSeriesEvents, IPercentSeriesProperties, PercentSeries, PercentSeriesDataItem } from \"./PercentSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { PieTick } from \"../elements/PieTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { PieChart } from \"../types/PieChart\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\n\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieSeriesDataItem extends PercentSeriesDataItem {\r\n\r\n\t/**\r\n\t * A type of slice used for this series.\r\n\t *\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic _slice: Slice;\r\n\r\n\t/**\r\n\t * A reference to a slice label element.\r\n\t * @ignore Exclude from docs\r\n\t * @type {AxisLabelCircular}\r\n\t */\r\n\tpublic _label: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * A reference to a slice tick element.\r\n\t * @ignore Exclude from docs\r\n\t * @type {PieTick}\r\n\t */\r\n\tpublic _tick: PieTick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieSeries}\r\n\t */\r\n\tpublic _component!: PieSeries;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeriesDataItem\";\r\n\r\n\t\tthis.values.radiusValue = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Slice's radius, if other than default.\r\n\t *\r\n\t * @param {number} value Radius\r\n\t */\r\n\tpublic set radiusValue(value: number) {\r\n\t\tthis.setValue(\"radiusValue\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t */\r\n\tpublic get radiusValue(): number {\r\n\t\treturn this.values.radiusValue.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Hide the data item (and corresponding visual elements).\r\n\t *\r\n\t * @param {number} duration Duration (ms)\r\n\t * @param {number} delay Delay hiding (ms)\r\n\t * @param {number} toValue Target value for animation\r\n\t * @param {string[]} fields Fields to animate while hiding\r\n\t */\r\n\tpublic hide(duration?: number, delay?: number, toValue?: number, fields?: string[]): Animation {\r\n\t\treturn super.hide(duration, delay, 0, [\"value\", \"radiusValue\"]);\r\n\t}\r\n\r\n\t/**\r\n\t * Show hidden data item (and corresponding cisual elements).\r\n\t *\r\n\t * @param {number} duration Duration (ms)\r\n\t * @param {number} delay Delay hiding (ms)\r\n\t * @param {string[]} fields Fields to animate while hiding\r\n\t */\r\n\tpublic show(duration?: number, delay?: number, fields?: string[]): Animation {\r\n\t\treturn super.show(duration, delay, [\"value\", \"radiusValue\"]);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieSeries]].\r\n */\r\nexport interface IPieSeriesDataFields extends IPercentSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds item's radius value.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tradiusValue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[PieSeries]].\r\n */\r\nexport interface IPieSeriesProperties extends IPercentSeriesProperties {\r\n\r\n\t/**\r\n\t * Outer radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * Start angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * End angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[PieSeries]].\r\n */\r\nexport interface IPieSeriesEvents extends IPercentSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieSeriesAdapters extends IPercentSeriesAdapters, IPieSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a slice series on a Pie chart.\r\n *\r\n * @see {@link IPieSeriesEvents} for a list of available Events\r\n * @see {@link IPieSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class PieSeries extends PercentSeries {\r\n\r\n\tpublic _slice: Slice;\r\n\r\n\tpublic _tick: PieTick;\r\n\r\n\tpublic _label: AxisLabelCircular;\r\n\r\n\tpublic _chart: PieChart;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPieSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPieSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieSeriesEvents}\r\n\t */\r\n\tpublic _events!: IPieSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PieSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: PieSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds current angle for the next slice to start on.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _currentStartAngle: number;\r\n\r\n\t/**\r\n\t * Data items that fall to the left side of the pie.\r\n\t */\r\n\tprotected _leftItems: this[\"_dataItem\"][];\r\n\r\n\t/**\r\n\t * Data items that fall to the right side of the pie.\r\n\t */\r\n\tprotected _rightItems: this[\"_dataItem\"][];\r\n\r\n\t/**\r\n\t * [_arcRect description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {IRectangle}\r\n\t */\r\n\tprotected _arcRect: IRectangle;\r\n\r\n\t/**\r\n\t * [_maxRadiusPercent description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _maxRadiusPercent: number;\r\n\r\n\t/**\r\n\t * [_pixelRadius description]\r\n\t *\r\n\t * @ignore this is set by pie chart, not by user\r\n\t * @type {number}\r\n\t */\r\n\tprotected _pixelRadius: number;\r\n\r\n\t/**\r\n\t * [_pixelInnerRadius description]\r\n\t *\r\n\t * @ignore this is set by pie chart, not by user\r\n\t * @type {number}\r\n\t */\r\n\tprotected _pixelInnerRadius: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PieSeries\";\r\n\r\n\t\tthis.alignLabels = true;\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.labels.template.radius = percent(5);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/** \r\n\t * creates slice\r\n\t */\r\n\tprotected createSlice(): this[\"_slice\"] {\r\n\t\treturn new Slice();\r\n\t}\r\n\r\n\t/** \r\n\t * creates tick\r\n\t */\r\n\tprotected createTick(): this[\"_tick\"] {\r\n\t\treturn new PieTick();\r\n\t}\r\n\r\n\t/** \r\n\t * creates label\r\n\t */\r\n\tprotected createLabel(): this[\"_label\"] {\r\n\t\treturn new AxisLabelCircular();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pie Slice Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {PieSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PieSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Inits slice.\r\n\t *\r\n\t * @param {Slice} slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tslice.isMeasured = false;\r\n\t\tslice.defaultState.properties.scale = 1;\r\n\t\tslice.observe(\"scale\", this.handleSliceScale, this);\r\n\t\tslice.observe([\"dx\", \"dy\", \"x\", \"y\", \"shiftRadius\"], this.handleSliceMove, this);\r\n\t\tslice.tooltipText = \"{category}: {value.percent.formatNumber('#.#')}% ({value.value})\";\r\n\r\n\t\tlet hoverState = slice.states.create(\"hover\");\r\n\t\thoverState.properties.scale = 1.05;\r\n\r\n\t\tlet defaultState = slice.defaultState;\r\n\t\tdefaultState.properties.shiftRadius = 0;\r\n\r\n\t\tslice.togglable = true;\r\n\r\n\t\tslice.events.on(\"toggled\", (event) => {\r\n\t\t\tevent.target.hideTooltip();\r\n\t\t});\r\n\r\n\t\tlet activeState = slice.states.create(\"active\");\r\n\t\tactiveState.properties.shiftRadius = 0.10;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tthis._leftItems = [];\r\n\t\tthis._rightItems = [];\r\n\r\n\t\tthis._currentStartAngle = this.startAngle;\r\n\t\tthis._arcRect = $math.getArcRect(this.startAngle, this.endAngle);\r\n\r\n\t\tthis._maxRadiusPercent = 0;\r\n\t\tfor (let i = this.startIndex; i < this.endIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tlet radiusValuePercent = dataItem.values.radiusValue.percent;\r\n\t\t\tif (radiusValuePercent > this._maxRadiusPercent) {\r\n\t\t\t\tthis._maxRadiusPercent = radiusValuePercent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tif (this.alignLabels) {\r\n\t\t\tif (this.startAngle > this.endAngle) {\r\n\t\t\t\tthis._rightItems.reverse();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._leftItems.reverse()\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._rightItems.sort((a, b) => {\r\n\t\t\t\tlet aAngle = (a.slice.middleAngle + 360) % 360;\r\n\t\t\t\tlet bAngle = (b.slice.middleAngle + 360) % 360;\r\n\r\n\t\t\t\tif (aAngle > 270) {\r\n\t\t\t\t\taAngle -= 360;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (bAngle > 270) {\r\n\t\t\t\t\tbAngle -= 360;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (aAngle < bAngle) {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tthis._leftItems.sort((a, b) => {\r\n\r\n\t\t\t\tlet aAngle = (a.slice.middleAngle + 360) % 360;\r\n\t\t\t\tlet bAngle = (b.slice.middleAngle + 360) % 360;\r\n\r\n\t\t\t\tif (aAngle < bAngle) {\r\n\t\t\t\t\treturn 1;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn -1;\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tthis.arrangeLabels(this._rightItems);\r\n\t\t\tthis.arrangeLabels(this._leftItems);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {PieSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\tif (this.pixelRadius > 0) {\r\n\r\n\t\t\tlet percent = dataItem.values.value.percent;\r\n\r\n\t\t\t// SLICE\r\n\t\t\tlet slice: Slice = dataItem.slice;\r\n\t\t\tslice.radius = this.pixelRadius;\r\n\r\n\t\t\tif ($type.isNumber(dataItem.radiusValue)) {\r\n\t\t\t\tslice.radius = this.pixelInnerRadius + (this.pixelRadius - this.pixelInnerRadius) * dataItem.values.radiusValue.percent / this._maxRadiusPercent;\r\n\t\t\t}\r\n\t\t\tif (!(slice.innerRadius instanceof Percent)) {\r\n\t\t\t\tslice.innerRadius = this.pixelInnerRadius;\r\n\t\t\t}\r\n\t\t\tslice.startAngle = this._currentStartAngle;\r\n\r\n\t\t\tslice.arc = dataItem.values.value.percent * (this.endAngle - this.startAngle) / 100;\r\n\r\n\t\t\t// LABEL\r\n\t\t\tlet label = dataItem.label;\r\n\r\n\t\t\tlet tick = dataItem.tick;\r\n\t\t\ttick.slice = slice;\r\n\t\t\ttick.label = label;\r\n\r\n\t\t\tlet normalizedMiddleAngle: number = (slice.middleAngle + 360) % 360; // force angle to be 0 - 360;\r\n\r\n\t\t\tlet point: IPoint;\r\n\r\n\t\t\tif (this.alignLabels) {\r\n\t\t\t\tlet labelRadius = label.pixelRadius(slice.radius);\r\n\t\t\t\tlet x: number = tick.length + labelRadius;\r\n\t\t\t\tlabel.dx = 0;\r\n\t\t\t\tlabel.dy = 0;\r\n\t\t\t\tlabel.verticalCenter = \"middle\";\r\n\t\t\t\tlet arcRect = this._arcRect;\r\n\t\t\t\t// right half\r\n\t\t\t\tif (normalizedMiddleAngle >= 270 || normalizedMiddleAngle <= 90) { // 91 makes less chances for flickering\r\n\t\t\t\t\tx += (arcRect.width + arcRect.x) * this.pixelRadius;\r\n\t\t\t\t\tlabel.horizontalCenter = \"left\";\r\n\t\t\t\t\tthis._rightItems.push(dataItem);\r\n\t\t\t\t}\r\n\t\t\t\t// left half\r\n\t\t\t\telse {\r\n\t\t\t\t\tx -= arcRect.x * this.pixelRadius;\r\n\t\t\t\t\tlabel.horizontalCenter = \"right\";\r\n\t\t\t\t\tthis._leftItems.push(dataItem);\r\n\t\t\t\t\tx *= -1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet distance = slice.radius + tick.length + labelRadius;\r\n\t\t\t\tpoint = { x: x, y: slice.iy * distance };\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.horizontalCenter = undefined;\r\n\t\t\t\tlabel.verticalCenter = undefined;\r\n\t\t\t\tlet x: number = slice.ix * slice.radius;\r\n\t\t\t\tlet y: number = slice.iy * slice.radiusY;\r\n\r\n\t\t\t\tpoint = label.fixPoint({ x: x, y: y }, slice.radius, slice.radiusY);\r\n\t\t\t}\r\n\r\n\t\t\tlabel.moveTo(point);\r\n\t\t\tthis._currentStartAngle += slice.arc;\r\n\r\n\t\t\t// do this at the end, otherwise bullets won't be positioned properly\r\n\t\t\tsuper.validateDataElement(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius for the series' slices in pixels or [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"radius\", value, true, false, 10, false)) {\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent} Radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius\r\n\t * @ignore\r\n\t */\r\n\tpublic get pixelRadius(): number {\r\n\t\treturn this._pixelRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic set pixelRadius(value: number) {\r\n\t\tif (this._pixelRadius != value) {\r\n\t\t\tthis._pixelRadius = value;\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Pixel inner radius\r\n\t * @ignore\r\n\t */\r\n\tpublic get pixelInnerRadius(): number {\r\n\t\treturn this._pixelInnerRadius;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic set pixelInnerRadius(value: number) {\r\n\t\tif (this._pixelInnerRadius != value) {\r\n\t\t\tthis._pixelInnerRadius = value;\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius for the series' slices in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number | Percent} value Radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number | Percent} Radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Start angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", $math.normalizeAngle(value), true);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle for the series' slices in degrees. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Redo so that users can set it\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Positions series bullet.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Bullet} bullet Bullet\r\n\t */\r\n\tpublic positionBullet(bullet: Bullet): void {\r\n\t\tsuper.positionBullet(bullet);\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = bullet.dataItem;\r\n\t\tlet slice: Slice = dataItem.slice;\r\n\r\n\t\tlet locationX = bullet.locationX;\r\n\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\tlocationX = 0.5;\r\n\t\t}\r\n\t\tlet locationY = bullet.locationY;\r\n\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\tlocationY = 1;\r\n\t\t}\r\n\r\n\t\tlet angle = slice.startAngle + slice.arc * locationX;\r\n\t\tlet radius = locationY * slice.radius;\r\n\r\n\t\tbullet.x = radius * $math.cos(angle);\r\n\t\tbullet.y = radius * $math.sin(angle);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Repositions bullet and labels when slice moves.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {AMEvent[\"propertychanged\"]} event Event\r\n\t */\r\n\tprotected handleSliceMove(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (!this.alignLabels) {\r\n\r\n\t\t\tlet slice = event.target;\r\n\t\t\tlet dataItem: this[\"_dataItem\"] = slice.dataItem;\r\n\t\t\t// moving textelement, as label dx and dy are already employed for aligning\r\n\t\t\t//@labeltodo\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tlet label = dataItem.label;\r\n\t\t\t\tif (label) {\r\n\t\t\t\t\tlabel.dx = label.fdx + slice.dx + slice.pixelX;\r\n\t\t\t\t\tlabel.dy = label.fdy + slice.dy + slice.pixelY;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns bounding box (square) for this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {IRectangle}\r\n\t */\r\n\tpublic get bbox(): IRectangle {\r\n\t\tif (this.definedBBox) {\r\n\t\t\treturn this.definedBBox;\r\n\t\t}\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart) {\r\n\t\t\treturn $math.getArcRect(chart.startAngle, chart.endAngle, this.pixelRadius);\r\n\t\t}\r\n\r\n\t\treturn $math.getArcRect(this.startAngle, this.endAngle, this.pixelRadius);\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieSeries\"] = PieSeries;\r\nregistry.registeredClasses[\"PieSeriesDataItem\"] = PieSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PieSeries.ts","/**\r\n * Pie chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, IPercentChartProperties, IPercentChartDataFields, IPercentChartAdapters, IPercentChartEvents, PercentChartDataItem } from \"./PercentChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { PieSeries, PieSeriesDataItem } from \"../series/PieSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, IListEvents, ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieChartDataItem extends PercentChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieChart}\r\n\t */\r\n\tpublic _component!: PieChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieChart]].\r\n */\r\nexport interface IPieChartDataFields extends IPercentChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PieChart]]\r\n */\r\nexport interface IPieChartProperties extends IPercentChartProperties {\r\n\r\n\t/**\r\n\t * Outer radius of the pie.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Relative inner radius (0-1).\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tinnerRadius?: number;\r\n\r\n\t/**\r\n\t * An angle pie starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle pie ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieChart]].\r\n */\r\nexport interface IPieChartEvents extends IPercentChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieChartAdapters extends IPercentChartAdapters, IPieChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Pie chart.\r\n *\r\n * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * let series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JavaScript\r\n * // Create chart\r\n * var chart = am4core.create(\"chartdiv\", am4charts.PieChart);\r\n *\r\n * // The following would work as well:\r\n * // var chart = am4core.create(\"chartdiv\", \"PieChart\");\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"Czechia\",\r\n * \t\"litres\": 301.9\r\n * }, {\r\n * \t\"country\": \"Ireland\",\r\n * \t\"litres\": 201.1\r\n * }];\r\n *\r\n * // Create series\r\n * var series = chart.series.push(new am4charts.PieSeries());\r\n * series.dataFields.value = \"litres\";\r\n * series.dataFields.category = \"country\";\r\n * ```\r\n * ```JSON\r\n * var chart = am4core.createFromConfig({\r\n *\r\n * \t// Series\r\n * \t\"series\": [{\r\n * \t\t\"type\": \"PieSeries\",\r\n * \t\t\"dataFields\": {\r\n * \t\t\t\"value\": \"litres\",\r\n * \t\t\t\"category\": \"country\"\r\n * \t\t}\r\n * \t}],\r\n *\r\n * \t// Data\r\n * \t\"data\": [{\r\n * \t\t\"country\": \"Lithuania\",\r\n * \t\t\"litres\": 501.9\r\n * \t}, {\r\n * \t\t\"country\": \"Czechia\",\r\n * \t\t\"litres\": 301.9\r\n * \t}, {\r\n * \t\t\"country\": \"Ireland\",\r\n * \t\t\"litres\": 201.1\r\n * \t}]\r\n *\r\n * }, \"chartdiv\", \"PieChart\");\r\n * ```\r\n *\r\n * @see {@link IPieChartEvents} for a list of available Events\r\n * @see {@link IPieChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/pie-chart/} for documentation\r\n * @important\r\n */\r\nexport class PieChart extends PercentChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IPieChartDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieChartProperties}\r\n\t */\r\n\tpublic _properties!: IPieChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieChartEvents}\r\n\t */\r\n\tpublic _events!: IPieChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PieSeries}\r\n\t */\r\n\tpublic _seriesType: PieSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.innerRadius = 0;\r\n\t\tthis.radius = percent(80);\r\n\t\tthis.align = \"none\";\r\n\t\tthis.valign = \"none\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tlet seriesContainer = this.seriesContainer;\r\n\t\tseriesContainer.isMeasured = true;\r\n\t\tseriesContainer.valign = \"middle\";\r\n\t\tseriesContainer.align = \"center\";\r\n\t\tseriesContainer.layout = \"absolute\";\r\n\t\tseriesContainer.width = undefined;\r\n\t\tseriesContainer.height = undefined;\r\n\r\n\t\t// so that the pie is always drawn, even the legend wants all the space\r\n\t\tthis.chartContainer.minHeight = 50;\r\n\t\tthis.chartContainer.minWidth = 50;\r\n\t\r\n\t\tthis.chartContainer.events.on(\"maxsizechanged\", this.updateRadius, this, false); // need this for the chart to change radius if legend is removed/disabled\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pie chart\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the chart, causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout(): void {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.updateRadius();\r\n\t}\r\n\r\n\t/**\r\n\t * Decorates a new [[Series]] object with required parameters when it is\r\n\t * added to the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IListEvents[\"inserted\"]} event Event\r\n\t */\r\n\tpublic handleSeriesAdded(event: IListEvents[\"inserted\"]): void {\r\n\t\tsuper.handleSeriesAdded(event);\r\n\t\tthis.updateSeriesAngles();\r\n\t}\t\r\n\r\n\tprotected updateSeriesAngles(){\r\n\t\tthis.series.each((series)=>{\r\n\t\t\tseries.startAngle = this.startAngle;\r\n\t\t\tseries.endAngle = this.endAngle;\r\n\t\t\tseries.defaultState.properties.startAngle = this.startAngle;\r\n\t\t\tseries.defaultState.properties.endAngle = this.endAngle;\t\t\t\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * Recalculates pie's radius, based on a number of criteria.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateRadius(): void {\r\n\r\n\t\tlet chartCont = this.chartContainer;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\tlet innerRadius = this.innerRadius;\r\n\r\n\t\tif (innerRadius instanceof Percent) {\r\n\t\t\tinnerRect = $math.getArcRect(this.startAngle, this.endAngle, innerRadius.value);\r\n\t\t}\r\n\t\t// @todo handle this when innerRadius set in pixels (do it for radar also)\r\n\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(chartCont.innerWidth / rect.width, chartCont.innerHeight / rect.height);\r\n\r\n\t\tif(!$type.isNumber(maxRadius)){\r\n\t\t\tmaxRadius = 0;\r\n\t\t}\r\n\r\n\t\tlet chartRadius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\r\n\t\tlet chartPixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, maxRadius);\r\n\r\n\t\tlet seriesRadius = (chartRadius - chartPixelInnerRadius) / this.series.length;\r\n\t\t//@todo: make it possible to set series radius in percent\r\n\t\t$iter.each($iter.indexed(this.series.iterator()), (a) => {\r\n\t\t\tlet i = a[0];\r\n\t\t\tlet series = a[1];\r\n\r\n\t\t\tlet radius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.radius, chartRadius - chartPixelInnerRadius);\r\n\t\t\tlet innerRadius = chartPixelInnerRadius + $utils.relativeRadiusToValue(series.innerRadius, chartRadius - chartPixelInnerRadius);\r\n\r\n\t\t\tif(!$type.isNumber(radius)){\r\n\t\t\t\tradius = chartPixelInnerRadius + seriesRadius * (i + 1);\r\n\t\t\t}\r\n\t\t\tif(!$type.isNumber(innerRadius)){\r\n\t\t\t\tinnerRadius = chartPixelInnerRadius + seriesRadius * i;\r\n\t\t\t}\r\n\r\n\t\t\tseries.pixelRadius = radius;\r\n\t\t\tseries.pixelInnerRadius = innerRadius;\r\n\t\t});\r\n\r\n\t\tthis.seriesContainer.definedBBox = { x: chartRadius * rect.x, y: chartRadius * rect.y, width: chartRadius * rect.width, height: chartRadius * rect.height };\r\n\t\tthis.seriesContainer.invalidateLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets radius of the pie chart.\r\n\t *\r\n\t * Setting to a number will mean a fixed pixel radius.\r\n\t *\r\n\t * Setting to an instance of [[Percent]] will mean a relative radius to\r\n\t * available space.\r\n\t *\r\n\t * E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * pieChart.radius = am4core.percent.percent(50);\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * pieChart.radius = am4core.percent.percent(50);\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // Set pie chart to be at 50% of the available space\r\n\t * \"radius\": \"50%\"\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param {number | Percent} value Radius (px or relative)\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tif(this.setPercentProperty(\"radius\", value, true, false, 10, false)){\r\n\t\t\tthis.invalidateLayout();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Radius (px or relative)\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sets relative inner radius (to create a donut chart).\r\n\t *\r\n\t * The inner radius is relative to pie's radius:\r\n\t * * 0 - solid pie (no hole inside);\r\n\t * * 0.5 - hole is half the radius of the pie;\r\n\t * * 1 - does not make sense, because the hole will take up the whole radius.\r\n\t *\r\n\t * @param {number | Percent} value Relative inner radius (0-1)\r\n\t * @todo Setting things like `innerRadius` modifies `slice.radius` and it then looks like it is not the same value as in default state\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Relative inner radius (0-1)\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new [[PieSeries]].\r\n\t *\r\n\t * @return {PieSeries} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PieSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Pie circle. (degrees)\r\n\t *\r\n\t * Normally, a pie chart begins (the left side of the first slice is drawn)\r\n\t * at the top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the first slice be drawn to the right.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set to those lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a Pie chart that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * NOTE: This setting is not supported in a 3D pie chart.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tif(this.setPropertyValue(\"startAngle\", value)){\r\n\t\t\tthis.updateRadius();\r\n\t\t\tthis.updateSeriesAngles()\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * End angle of the Pie circle. (degrees)\r\n\t *\r\n\t * Normally, a pie chart ends (the right side of the last slice is drawn)\r\n\t * at the top center. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to change this setting.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set to those lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a Pie chart that\r\n\t * looks like a quarter of a circle.\r\n\t * \r\n\t * NOTE: This setting is not supported in a 3D pie chart.\r\n\t *\r\n\t * @default 270\r\n\t * @param {number} value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tif(this.setPropertyValue(\"endAngle\", value)){\r\n\t\t\tthis.updateRadius();\r\n\t\t\tthis.updateSeriesAngles()\r\n\t\t}\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieChart\"] = PieChart;\r\nregistry.registeredClasses[\"PieChartDataItem\"] = PieChartDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PieChart.ts","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieSeries, PieSeriesDataItem, IPieSeriesDataFields, IPieSeriesProperties, IPieSeriesAdapters, IPieSeriesEvents } from \"../series/PieSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { PieChart3D } from \"../types/PieChart3D\";\r\nimport { Slice3D } from \"../../core/elements/3d/Slice3D\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { OrderedList, OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieSeries3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieSeries3DDataItem extends PieSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines type of the slice represented by this data item.\r\n\t *\r\n\t * @type {Slice3D}\r\n\t */\r\n\tpublic _slice: Slice3D;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieSeries3D}\r\n\t */\r\n\tpublic _component!: PieSeries3D;\r\n\r\n\t/**\r\n\t * @todo Remove?\r\n\t * @deprecated\r\n\t * @type {PieSeries3D}\r\n\t */\r\n\tpublic component: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3DDataItem\";\r\n\r\n\t\tthis.values.depthValue = {};\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Slice depth (height).\r\n\t *\r\n\t * @param {number} value Depth\r\n\t */\r\n\tpublic set depthValue(value: number) {\r\n\t\tthis.setValue(\"depthValue\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Depth\r\n\t */\r\n\tpublic get depthValue(): number {\r\n\t\treturn this.values[\"depthValue\"].value;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DDataFields extends IPieSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds 3D slice depth (height).\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tdepthValue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DProperties extends IPieSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieSeries3D]].\r\n */\r\nexport interface IPieSeries3DEvents extends IPieSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieSeries3DAdapters extends IPieSeriesAdapters, IPieSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a slice series on a 3D pie chart.\r\n *\r\n * @see {@link IPieSeries3DEvents} for a list of available Events\r\n * @see {@link IPieSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class PieSeries3D extends PieSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPieSeries3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieSeries3DProperties}\r\n\t */\r\n\tpublic _properties!: IPieSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieSeries3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieSeries3DEvents}\r\n\t */\r\n\tpublic _events!: IPieSeries3DEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PieSeries3DDataItem}\r\n\t */\r\n\tpublic _dataItem: PieSeries3DDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {PieChart3D}\r\n\t */\r\n\tpublic _chart: PieChart3D;\r\n\r\n\tpublic _slice: Slice3D;\t\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieSeries3D\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object\r\n\t * @see {@link DataItem}\r\n\t * @return {PieSeries3DDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PieSeries3DDataItem();\r\n\t}\r\n\r\n\t/** \r\n\t * creates slice\r\n\t */\r\n\tprotected createSlice(): this[\"_slice\"] {\r\n\t\treturn new Slice3D();\r\n\t}\t\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {PieSeries3DDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: PieSeries3DDataItem): void {\r\n\t\t\r\n\t\tlet slice: Slice3D = dataItem.slice;\r\n\r\n\t\tlet depth: number = this.depth;\r\n\t\tif (!$type.isNumber(depth)) {\r\n\t\t\tdepth = this.chart.depth;\r\n\t\t}\r\n\r\n\t\tlet depthPercent: number = dataItem.values.depthValue.percent;\r\n\t\tif (!$type.isNumber(depthPercent)) {\r\n\t\t\tdepthPercent = 100;\r\n\t\t}\r\n\r\n\t\tslice.depth = depthPercent * depth / 100;\r\n\r\n\t\tlet angle: number = this.angle;\r\n\t\tif (!$type.isNumber(angle)) {\r\n\t\t\tangle = this.chart.angle;\r\n\t\t}\r\n\r\n\t\tslice.angle = angle;\r\n\r\n\t\tsuper.validateDataElement(dataItem);\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\r\n\t\tfor(let i = this._workingStartIndex; i < this._workingEndIndex; i++){\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tlet slice: Slice3D = dataItem.slice;\r\n\r\n\t\t\tvar startAngle = slice.startAngle;\r\n\t\t\t// find quarter\r\n\t\t\t//q0 || q1\r\n\t\t\tif ((startAngle >= -90 && startAngle < 90)) {\r\n\t\t\t\tslice.toFront();\r\n\t\t\t}\r\n\t\t\t//q2 || q3\r\n\t\t\telse if ((startAngle >= 90)) {\r\n\t\t\t\tslice.toBack();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Depth (height) of the pie slice in pixels.\r\n\t *\r\n\t * @param {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of the view point of the 3D pie. (0-360)\r\n\t *\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieSeries3D\"] = PieSeries3D;\r\nregistry.registeredClasses[\"PieSeries3DDataItem\"] = PieSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PieSeries3D.ts","/**\r\n * 3D Pie chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nimport { PieChart, IPieChartProperties, IPieChartDataFields, IPieChartAdapters, IPieChartEvents, PieChartDataItem } from \"./PieChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { PieSeries3D } from \"../series/PieSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PieChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PieChart3DDataItem extends PieChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PieChart3D}\r\n\t */\r\n\tpublic _component!: PieChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DDataFields extends IPieChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DProperties extends IPieChartProperties {\r\n\r\n\t/**\r\n\t * Pie's \"depth\" or \"height\" in pixels.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Pie's angle at which we are looking at it. (degrees)\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[PieChart3D]].\r\n */\r\nexport interface IPieChart3DEvents extends IPieChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PieChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPieChart3DAdapters extends IPieChartAdapters, IPieChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D Pie chart.\r\n *\r\n * * ```TypeScript\r\n * // Includes\r\n * import * as am4core from \"@amcharts/amcharts4/core\";\r\n * import * as am4charts from \"@amcharts/amcharts4/charts\";\r\n *\r\n * // Create chart\r\n * let chart = am4core.create(\"chartdiv\", am4charts.Pie3DChart);\r\n *\r\n * // Set data\r\n * chart.data = [{\r\n * \t\"country\": \"Lithuania\",\r\n * \t\"litres\": 501.9\r\n * }, {\r\n * \t\"country\": \"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\t * @type {IPieChart3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IPieChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPieChart3DProperties}\r\n\t */\r\n\tpublic _properties!: IPieChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPieChart3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IPieChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPieChart3DEvents}\r\n\t */\r\n\tpublic _events!: IPieChart3DEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PieSeries3D}\r\n\t */\r\n\tpublic _seriesType: PieSeries3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"PieChart3D\";\r\n\r\n\t\tthis.depth = 20;\r\n\t\tthis.angle = 10;\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D pie in pixels.\r\n\t *\r\n\t * This will determine \"height\" of the pie.\r\n\t *\r\n\t * @default 20\r\n\t * @param {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tif (this.setPropertyValue(\"depth\", value)) {\t\t\t\r\n\t\t\tthis.invalidateDataUsers();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * An angle of a \"point of view\" in degrees.\r\n\t *\r\n\t * @default 10\r\n\t * @param {number} value Angle (degrees)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\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 {number} Angle (degrees)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new Series.\r\n\t *\r\n\t * @return {PieSeries3D} New series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new PieSeries3D();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PieChart3D\"] = PieChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/PieChart3D.ts","/**\r\n * Sliced chart module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { PercentChart, IPercentChartProperties, IPercentChartDataFields, IPercentChartAdapters, IPercentChartEvents, PercentChartDataItem } from \"./PercentChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { FunnelSeries, FunnelSeriesDataItem } from \"../series/FunnelSeries\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, IListEvents, ListTemplate } from \"../../core/utils/List\";\r\nimport { Legend } from \"../Legend\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[SlicedChart]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class SlicedChartDataItem extends PercentChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {SlicedChart}\r\n\t */\r\n\tpublic _component!: SlicedChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChartDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartDataFields extends IPercentChartDataFields { }\r\n\r\n/**\r\n * Defines properties for [[SlicedChart]]\r\n */\r\nexport interface ISlicedChartProperties extends IPercentChartProperties { }\r\n\r\n/**\r\n * Defines events for [[SlicedChart]].\r\n */\r\nexport interface ISlicedChartEvents extends IPercentChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[SlicedChart]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ISlicedChartAdapters extends IPercentChartAdapters, ISlicedChartProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Sliced chart.\r\n *\r\n * @see {@link ISlicedChartEvents} for a list of available Events\r\n * @see {@link ISlicedChartAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class SlicedChart extends PercentChart {\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {ISlicedChartDataFields}\r\n\t */\r\n\tpublic _dataFields: ISlicedChartDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ISlicedChartProperties}\r\n\t */\r\n\tpublic _properties!: ISlicedChartProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ISlicedChartAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ISlicedChartEvents}\r\n\t */\r\n\tpublic _events!: ISlicedChartEvents;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {FunnelSeries}\r\n\t */\r\n\tpublic _seriesType: FunnelSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"SlicedChart\";\r\n\r\n\t\tthis.seriesContainer.layout = \"horizontal\";\r\n\r\n\t\tthis.padding(15, 15, 15, 15);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Sliced chart\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the chart, causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"SlicedChart\"] = SlicedChart;\r\nregistry.registeredClasses[\"SlicedChartDataItem\"] = SlicedChartDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/SlicedChart.ts","/**\r\n * ChordNode module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { FlowDiagramNode, IFlowDiagramNodeAdapters, IFlowDiagramNodeEvents, IFlowDiagramNodeProperties } from \"./FlowDiagramNode\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { ChordDiagram, ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { AxisLabelCircular } from \"../axes/AxisLabelCircular\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $string from \"../../core/utils/String\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordNode]].\r\n */\r\nexport interface IChordNodeProperties extends IFlowDiagramNodeProperties { }\r\n\r\n/**\r\n * Defines events for [[ChordNode]].\r\n */\r\nexport interface IChordNodeEvents extends IFlowDiagramNodeEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordNode]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordNodeAdapters extends IFlowDiagramNodeAdapters, IChordNodeProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a node in a Chord Diagram.\r\n *\r\n * A Chord node is a block with a value, which represents its size on the\r\n * diagram.\r\n *\r\n * Nodes are connected via [[ChordLink]] elements.\r\n *\r\n * @see {@link IChordNodeEvents} for a list of available events\r\n * @see {@link IChordNodeAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordNode extends FlowDiagramNode {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IChordNodeProperties}\r\n\t */\r\n\tpublic _properties!: IChordNodeProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IChordNodeAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordNodeAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordNodeEvents}\r\n\t */\r\n\tpublic _events!: IChordNodeEvents;\r\n\r\n\t/**\r\n\t * A list of data items of the items coming in from another node, one level\r\n\t * up.\r\n\t *\r\n\t * These are what ingoing links are build out of.\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tprotected _incomingDataItems: List;\r\n\r\n\t/**\r\n\t * A list of data items of the items going out of the node.\r\n\t *\r\n\t * These are what outgoing links are build out of.\r\n\t *\r\n\t * @type {List}\r\n\t */\r\n\tprotected _outgoingDataItems: List;\r\n\r\n\t/**\r\n\t * Sorted list of incoming items.\r\n\t *\r\n\t * @type {Iterator}\r\n\t */\r\n\tprotected _incomingSorted: $iter.Iterator;\r\n\r\n\t/**\r\n\t * Sorted list of outgoing items.\r\n\t * @type {Iterator}\r\n\t */\r\n\tprotected _outgoingSorted: $iter.Iterator;\r\n\r\n\t/**\r\n\t * A chart instance this node is added to.\r\n\t *\r\n\t * @type {ChordDiagram}\r\n\t */\r\n\tpublic chart: ChordDiagram;\r\n\r\n\r\n\t/**\r\n\t * Defines the type of the [[ChordDiagramDataItem]] used in the class.\r\n\t *\r\n\t * @type {ChordDiagramDataItem}\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\r\n\t/**\r\n\t * Slice sprite of a node\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic slice: Slice;\r\n\r\n\t/**\r\n\t * A label element which shows node's name.\r\n\t *\r\n\t * @type {AxisLabelCircular}\r\n\t */\r\n\tpublic label: AxisLabelCircular;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic nextAngle: number;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic trueStartAngle: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordNode\";\r\n\r\n\t\tthis.label = this.createChild(AxisLabelCircular);\r\n\t\tthis.label.location = 0.5;\r\n\t\tthis.label.radius = 5;\r\n\t\tthis.label.text = \"{name}\";\r\n\t\tthis.label.zIndex = 1;\r\n\t\tthis.label.shouldClone = false;\r\n\r\n\t\tthis.layout = \"none\";\r\n\r\n\t\tthis.events.on(\"positionchanged\", this.updateRotation, this, false);\r\n\r\n\t\tthis.isMeasured = false;\r\n\t\tthis.slice = this.createChild(Slice);\r\n\t\tthis.slice.isMeasured = false;\r\n\r\n\t\tlet hiddenState = this.hiddenState;\r\n\t\thiddenState.properties.fill = new InterfaceColorSet().getFor(\"disabledBackground\");\r\n\t\thiddenState.properties.opacity = 0.5;\r\n\t\thiddenState.properties.visible = true;\r\n\r\n\t\tthis.setStateOnChildren = false;\r\n\r\n\t\tthis.slice.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.adapter.add(\"tooltipX\", (tooltipX, target)=>{\r\n\t\t return target.slice.ix * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\r\n\t\tthis.adapter.add(\"tooltipY\", (tooltipY, target)=>{\r\n\t\t return target.slice.iy * (target.slice.radius - (target.slice.radius - target.slice.pixelInnerRadius) / 2);\r\n\t\t})\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Invalidates all links, attached to this node.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidateLinks(): void {\r\n\t\tsuper.invalidateLinks();\r\n\r\n\t\tlet label = this.label;\r\n\t\tlet slice = this.slice;\r\n\t\tlet chart = this.chart;\r\n\t\tif (chart && slice) {\r\n\r\n\t\t\tlet sum = this.total;\r\n\t\t\tlet arc = slice.arc;\r\n\t\t\tlet sliceStartAngle = slice.startAngle;\r\n\r\n\t\t\tthis.children.each((child) => {\r\n\t\t\t\tif (child instanceof Bullet) {\r\n\t\t\t\t\tlet locationX = child.locationX;\r\n\t\t\t\t\tif (!$type.isNumber(locationX)) {\r\n\t\t\t\t\t\tlocationX = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tlet locationY = child.locationY;\r\n\t\t\t\t\tif (!$type.isNumber(locationY)) {\r\n\t\t\t\t\t\tlocationY = 1;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlet childAngle = sliceStartAngle + arc * locationX;\r\n\t\t\t\t\tlet childRadius = locationY * slice.radius;\r\n\r\n\t\t\t\t\tchild.x = childRadius * $math.cos(childAngle);\r\n\t\t\t\t\tchild.y = childRadius * $math.sin(childAngle);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\r\n\t\t\tlet labelAngle = sliceStartAngle + arc * label.location;\r\n\t\t\tlet startAngle = sliceStartAngle + (1 - sum / this.adjustedTotal) * arc * 0.5; // if value of a node is > then sum of the links, add to center link\r\n\r\n\t\t\tif ($type.isNaN(startAngle)) {\r\n\t\t\t\tstartAngle = sliceStartAngle;\r\n\t\t\t}\r\n\r\n\t\t\tlet x = slice.radius * $math.cos(labelAngle);\r\n\t\t\tlet y = slice.radius * $math.sin(labelAngle);\r\n\r\n\t\t\tlet point = { x: x, y: y };\r\n\t\t\tlabel.fixPoint(point, slice.radius);\r\n\t\t\tlabel.moveTo(point);\r\n\r\n\t\t\tthis.nextAngle = startAngle;\r\n\r\n\t\t\tif (this._outgoingSorted) {\r\n\r\n\t\t\t\t$iter.each(this._outgoingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\t\t\t\t\tlink.parent = this.chart.linksContainer;\r\n\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\t\t\t\tif ($type.isNumber(value)) {\r\n\r\n\t\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\t\tlink.startAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle;\r\n\t\t\t\t\t\t\tlink.startAngle = this.nextAngle;\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!dataItem.toNode) {\r\n\t\t\t\t\t\t\tlink.endAngle = link.startAngle;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (this._incomingSorted) {\r\n\t\t\t\t$iter.each(this._incomingSorted, (dataItem) => {\r\n\t\t\t\t\tlet link = dataItem.link;\r\n\r\n\t\t\t\t\tlink.radius = slice.pixelInnerRadius;\r\n\r\n\t\t\t\t\tif (chart.nonRibbon) {\r\n\t\t\t\t\t\tlet percentWidth = link.percentWidth;\r\n\t\t\t\t\t\tif (!$type.isNumber(percentWidth)) {\r\n\t\t\t\t\t\t\tpercentWidth = 5;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tpercentWidth = percentWidth / 100;\r\n\r\n\t\t\t\t\t\tlink.endAngle = sliceStartAngle + arc / 2 - arc / 2 * percentWidth;\r\n\t\t\t\t\t\tlink.arc = arc * percentWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlink.endAngle = this.nextAngle;\r\n\t\t\t\t\t\tlet value = dataItem.getWorkingValue(\"value\");\r\n\t\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\t\tlink.arc = value * chart.valueAngle; // yes, this is needed\r\n\t\t\t\t\t\t\tthis.nextAngle += link.arc;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!dataItem.fromNode) {\r\n\t\t\t\t\t\tlink.startAngle = link.endAngle;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//link.validate();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * updates slice start angle so that when we drag a node it would face the center\r\n\t */\r\n\tprotected updateRotation() {\r\n\t\tlet slice = this.slice;\r\n\t\tlet mAngle = this.trueStartAngle + slice.arc / 2;\r\n\t\tlet radius = slice.radius;\r\n\r\n\t\tlet tx = radius * $math.cos(mAngle);\r\n\t\tlet ty = radius * $math.sin(mAngle);\r\n\r\n\t\tlet angle = $math.getAngle({ x: tx + this.pixelX, y: ty + this.pixelY });\r\n\r\n\t\tslice.startAngle = this.trueStartAngle + (angle - mAngle);\r\n\r\n\t\tthis.dx = - this.pixelX;\r\n\t\tthis.dy = - this.pixelY;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Copies properties and labels from another [[ChordNode]].\r\n\t *\r\n\t * @param {ChordNode} source Source node\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.label.copyFrom(source.label);\r\n\t\tthis.slice.copyFrom(source.slice);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordNode\"] = ChordNode;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordNode.ts","/**\r\n * Functionality for drawing quadratic curves.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Line, ILineProperties, ILineAdapters, ILineEvents } from \"./Line\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../Sprite\";\r\nimport { IPoint, IOrientationPoint } from \"../defs/IPoint\";\r\nimport { IWavedShape } from \"../defs/IWavedShape\";\r\nimport { color } from \"../utils/Color\";\r\nimport * as $path from \"../rendering/Path\";\r\nimport * as $math from \"../utils/Math\";\r\nimport * as $type from \"../utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines available properties for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveProperties extends ILineProperties {\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tcpx?: number;\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tcpy?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[QuadraticCurve]].\r\n */\r\nexport interface IQuadraticCurveEvents extends ILineEvents { }\r\n\r\n/**\r\n * Defines adapters for [[QuadraticCurve]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IQuadraticCurveAdapters extends ILineAdapters, IQuadraticCurveProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Draws a waved line.\r\n *\r\n * @see {@link IQuadraticCurveEvents} for a list of available events\r\n * @see {@link IQuadraticCurveAdapters} for a list of available Adapters\r\n */\r\nexport class QuadraticCurve extends Line {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IQuadraticCurveProperties}\r\n\t */\r\n\tpublic _properties!: IQuadraticCurveProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IQuadraticCurveAdapters}\r\n\t */\r\n\tpublic _adapter!: IQuadraticCurveAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IQuadraticCurveEvents}\r\n\t */\r\n\tpublic _events!: IQuadraticCurveEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"QuadraticCurve\";\r\n\t\tthis.element = this.paper.add(\"path\");\r\n\t\tthis.pixelPerfect = false;\r\n\r\n\t\tthis.fill = color();\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the waved line.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\t//super.draw();\r\n\t\tif($type.isNumber(this.x1 + this.x2 + this.y1 + this.y2 + this.cpx + this.cpy )){\r\n\r\n\t\t\tlet p1: IPoint = { x: this.x1, y: this.y1 };\r\n\t\t\tlet p2: IPoint = { x: this.x2, y: this.y2 };\r\n\t\t\tlet cp: IPoint = { x: this.cpx, y: this.cpy };\r\n\r\n\t\t\tlet d: string = $path.moveTo(p1) + $path.quadraticCurveTo(p2, cp);\r\n\r\n\t\t\tthis.path = d;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * X coordinate of control point.\r\n\t *\r\n\t * @param {number} value X\r\n\t */\r\n\tpublic set cpx(value: number) {\r\n\t\tthis.setPropertyValue(\"cpx\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} X\r\n\t */\r\n\tpublic get cpx(): number {\r\n\t\treturn this.getPropertyValue(\"cpx\");\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate of control point.\r\n\t *\r\n\t * @param {number} value Y\r\n\t */\r\n\tpublic set cpy(value: number) {\r\n\t\tthis.setPropertyValue(\"cpy\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Y\r\n\t */\r\n\tpublic get cpy(): number {\r\n\t\treturn this.getPropertyValue(\"cpy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Converts relative position along the line (0-1) into pixel coordinates.\r\n\t *\r\n\t * @param {number} position Position (0-1)\r\n\t * @return {IOrientationPoint} Coordinates\r\n\t */\r\n\tpublic positionToPoint(position: number): IOrientationPoint {\r\n\t\tlet p1 = {x:this.x1, y:this.y1};\r\n\t\tlet cp = {x:this.cpx, y:this.cpy};\r\n\t\tlet p2 = {x:this.x2, y:this.y2};\r\n\r\n\t\tlet point1 = $math.getPointOnQuadraticCurve(p1, p2, cp, position);\r\n\t\tlet point2 = $math.getPointOnQuadraticCurve(p1, p2, cp, position + 0.001);\r\n\r\n\t\treturn {x:point1.x, y:point1.y, angle:$math.getAngle(point1, point2)};\r\n\t}\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/core/elements/QuadraticCurve.ts","/**\r\n * ChordLink module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container, IContainerProperties, IContainerEvents, IContainerAdapters } from \"../../core/Container\";\r\nimport { ChordDiagramDataItem } from \"../types/ChordDiagram\";\r\nimport { FlowDiagramLink, IFlowDiagramLinkAdapters, IFlowDiagramLinkEvents, IFlowDiagramLinkProperties } from \"./FlowDiagramLink\";\r\nimport { Pattern } from \"../../core/rendering/fills/Pattern\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { QuadraticCurve } from \"../../core/elements/QuadraticCurve\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ChordLink]].\r\n */\r\nexport interface IChordLinkProperties extends IFlowDiagramLinkProperties {\r\n\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tradius?: number;\r\n\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tarc?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordLink]].\r\n */\r\nexport interface IChordLinkEvents extends IFlowDiagramLinkEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordLink]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordLinkAdapters extends IFlowDiagramLinkAdapters, IChordLinkProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * This class creates a link (waved color-filled line) between two nodes in a\r\n * Chord Diagram.\r\n *\r\n * @see {@link IChordLinkEvents} for a list of available events\r\n * @see {@link IChordLinkAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class ChordLink extends FlowDiagramLink {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IChordLinkProperties}\r\n\t */\r\n\tpublic _properties!: IChordLinkProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IChordLinkAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordLinkAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordLinkEvents}\r\n\t */\r\n\tpublic _events!: IChordLinkEvents;\r\n\r\n\t/**\r\n\t * Defines a type of data item used by this class.\r\n\t *\r\n\t * @type {ChordDiagramDataItem}\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Spline which goes through the middle of a link, used to calculate bullet and tooltip positions, invisible by default\r\n\t * @type Polyspline\r\n */\r\n\tpublic middleLine: QuadraticCurve;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordLink\";\r\n\r\n\t\tthis.middleLine = this.createChild(QuadraticCurve);\r\n\t\tthis.middleLine.shouldClone = false;\r\n\t\tthis.middleLine.strokeOpacity = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates (redraws) the link.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate() {\r\n\t\tsuper.validate();\r\n\r\n\t\tif (!this.isTemplate) {\r\n\t\t\tlet startAngle = this.startAngle;\r\n\t\t\tlet endAngle = this.endAngle;\r\n\r\n\t\t\tlet arc = this.arc;\r\n\t\t\tlet radius = this.radius;\r\n\r\n\t\t\tlet fromNode = this.dataItem.fromNode;\r\n\t\t\tlet toNode = this.dataItem.toNode;\r\n\r\n\t\t\tlet fromX = 0;\r\n\t\t\tlet fromY = 0;\r\n\r\n\t\t\tif (fromNode) {\r\n\t\t\t\tfromX = fromNode.pixelX + fromNode.dx;\r\n\t\t\t\tfromY = fromNode.pixelY + fromNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tlet toX = 0;\r\n\t\t\tlet toY = 0;\r\n\r\n\t\t\tif (toNode) {\r\n\t\t\t\ttoX = toNode.pixelX + toNode.dx;\r\n\t\t\t\ttoY = toNode.pixelY + toNode.dy;\r\n\t\t\t}\r\n\r\n\t\t\tif (radius > 0) {\r\n\t\t\t\tlet x1 = radius * $math.cos(startAngle) + fromX;\r\n\t\t\t\tlet y1 = radius * $math.sin(startAngle) + fromY;\r\n\t\t\t\tlet x2 = radius * $math.cos(endAngle) + toX;\r\n\t\t\t\tlet y2 = radius * $math.sin(endAngle) + toY;\r\n\t\t\t\tlet x3 = radius * $math.cos(endAngle + arc) + toX;\r\n\t\t\t\tlet y3 = radius * $math.sin(endAngle + arc) + toY;\r\n\t\t\t\tlet x4 = radius * $math.cos(startAngle + arc) + fromX;\r\n\t\t\t\tlet y4 = radius * $math.sin(startAngle + arc) + fromY;\r\n\r\n\t\t\t\t//let cpAngle = startAngle + arc + (endAngle - startAngle - arc) / 2;\r\n\t\t\t\t//let arcWidth = $math.getDistance({x:x1, y:y1}, {x:x4, y:y4});\r\n\r\n\t\t\t\t//let cpx = (arcWidth) * $math.cos(cpAngle);\r\n\t\t\t\t//let cpy = (arcWidth) * $math.sin(cpAngle);\r\n\r\n\t\t\t\tlet cp = { x: 0, y: 0 };\r\n\t\t\t\tlet path = $path.moveTo({ x: x1, y: y1 });\r\n\r\n\t\t\t\tpath += $path.arcTo(startAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x2, y: y2 }, cp);\r\n\t\t\t\tpath += $path.arcTo(endAngle, arc, radius);\r\n\t\t\t\tpath += $path.quadraticCurveTo({ x: x1, y: y1 }, cp);\r\n\r\n\t\t\t\tif (arc > 0) {\r\n\t\t\t\t\tthis.link.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.link.path = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.maskBullets) {\r\n\t\t\t\t\tthis.bulletsMask.path = path;\r\n\t\t\t\t\tthis.bulletsContainer.mask = this.bulletsMask;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet mAngle1 = startAngle + arc / 2;\r\n\t\t\t\tlet mAngle2 = endAngle + arc / 2;\r\n\t\t\t\tlet mAngleM = mAngle1 + (mAngle2 - mAngle1) / 2;\r\n\r\n\t\t\t\tlet middleLine = this.middleLine;\r\n\r\n\t\t\t\tmiddleLine.x1 = radius * $math.cos(mAngle1) + fromX;\r\n\t\t\t\tmiddleLine.y1 = radius * $math.sin(mAngle1) + fromY;\r\n\t\t\t\tmiddleLine.x2 = radius * $math.cos(mAngle2) + toX;\r\n\t\t\t\tmiddleLine.y2 = radius * $math.sin(mAngle2) + toY;\r\n\r\n\t\t\t\tmiddleLine.cpx = 0;\r\n\t\t\t\tmiddleLine.cpy = 0;\r\n\r\n\t\t\t\tmiddleLine.stroke = this.fill;\r\n\r\n\t\t\t\tthis.positionBullets();\t\t\t\t\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * [radius description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {number} value End Y\r\n\t */\r\n\tpublic set radius(value: number) {\r\n\t\tthis.setPropertyValue(\"radius\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End Y\r\n\t */\r\n\tpublic get radius(): number {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * [arc description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {number} value [description]\r\n\t */\r\n\tpublic set arc(value: number) {\r\n\t\tthis.setPropertyValue(\"arc\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} [description]\r\n\t */\r\n\tpublic get arc(): number {\r\n\t\treturn this.getPropertyValue(\"arc\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordLink\"] = ChordLink;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ChordLink.ts","/**\r\n * Chord diagram module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Chart, IChartProperties, IChartDataFields, IChartAdapters, IChartEvents, ChartDataItem } from \"../Chart\";\r\nimport { FlowDiagram, FlowDiagramDataItem, IFlowDiagramAdapters, IFlowDiagramDataFields, IFlowDiagramEvents, IFlowDiagramProperties } from \"./FlowDiagram\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { ChordNode } from \"../elements/ChordNode\";\r\nimport { ChordLink } from \"../elements/ChordLink\";\r\nimport { LinearGradientModifier } from \"../../core/rendering/fills/LinearGradientModifier\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { toColor, Color } from \"../../core/utils/Color\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $number from \"../../core/utils/Number\";\r\nimport * as $order from \"../../core/utils/Order\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo rearange notes after dragged\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ChordDiagram]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ChordDiagramDataItem extends FlowDiagramDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {ChordDiagram}\r\n\t */\r\n\tpublic _component!: ChordDiagram;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t * @type {ChordLink}\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * An origin node.\r\n\t *\r\n\t * @type {ChordNode}\r\n\t */\r\n\tpublic fromNode: ChordNode;\r\n\r\n\t/**\r\n\t * A destination node.\r\n\t *\r\n\t * @type {ChordNode}\r\n\t */\r\n\tpublic toNode: ChordNode;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagramDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramDataFields extends IFlowDiagramDataFields {\r\n\r\n\t/**\r\n\t * Name of the source node.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tfromName?: string;\r\n\r\n\t/**\r\n\t * Name of the target node.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\ttoName?: string;\r\n\r\n\t/**\r\n\t * Value of the link between two nodes.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * Color of a from node\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcolor?: string;\r\n}\r\n\r\n/**\r\n * Defines properties for [[ChordDiagram]]\r\n */\r\nexport interface IChordDiagramProperties extends IFlowDiagramProperties {\r\n\t/**\r\n\t * Radius of the Chord. Absolute or relative.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tradius?: number | Percent;\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes. Absolute or relative. Negative value means that the inner radius will be calculated from the radius, not from the center.\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tinnerRadius?: number | Percent;\r\n\r\n\t/**\r\n\t * An angle radar face starts on. (degrees)\r\n\t *\r\n\t * @default -90\r\n\t * @type {number}\r\n\t */\r\n\tstartAngle?: number;\r\n\r\n\t/**\r\n\t * An angle radar face ends on. (degrees)\r\n\t *\r\n\t * @default 270\r\n\t * @type {number}\r\n\t */\r\n\tendAngle?: number;\r\n\r\n\r\n\t/**\r\n\t * If you set this to true, all the lines will be of the same width.\r\n\t *\r\n\t * @default false\r\n\t * @type {boolean}\r\n\t */\r\n\tnonRibbon?: boolean;\r\n}\r\n\r\n/**\r\n * Defines events for [[ChordDiagram]].\r\n */\r\nexport interface IChordDiagramEvents extends IFlowDiagramEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ChordDiagram]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IChordDiagramAdapters extends IFlowDiagramAdapters, IChordDiagramProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a Chord Diagram chart.\r\n *\r\n * @see {@link IChordDiagramEvents} for a list of available Events\r\n * @see {@link IChordDiagramAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/chord-diagram/} for documentation\r\n * @important\r\n */\r\nexport class ChordDiagram extends FlowDiagram {\r\n\r\n\t/**\r\n\t * Defines a type for the DataItem.\r\n\t *\r\n\t * @type {ChordDiagramDataItem}\r\n\t */\r\n\tpublic _dataItem: ChordDiagramDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IChordDiagramDataFields}\r\n\t */\r\n\tpublic _dataFields: IChordDiagramDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IChordDiagramProperties}\r\n\t */\r\n\tpublic _properties!: IChordDiagramProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IChordDiagramAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IChordDiagramEvents}\r\n\t */\r\n\tpublic _events!: IChordDiagramEvents;\r\n\r\n\t/**\r\n\t * A list of chart's Chord nodes.\r\n\t *\r\n\t * @param {DictionaryTemplate}\r\n\t */\r\n\tpublic nodes: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * An a link element, connecting two nodes.\r\n\t * @type {ChordLink}\r\n\t */\r\n\tpublic _link: ChordLink;\r\n\r\n\t/**\r\n\t * Sorted nodes iterator.\r\n\t *\r\n\t * @ignore\r\n\t * @type {Iterator}\r\n\t */\r\n\tprotected _sorted: $iter.Iterator<[string, ChordNode]>;\r\n\r\n\t/**\r\n\t * [valueAngle description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tpublic valueAngle: number = 0;\r\n\r\n\t/**\r\n\t * A container for chord elemens.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tpublic chordContainer:Container;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _node:ChordNode;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"ChordDiagram\";\r\n\r\n\t\tthis.startAngle = -90;\r\n\t\tthis.endAngle = 270;\r\n\r\n\t\tthis.radius = percent(80);\r\n\r\n\t\tthis.innerRadius = - 15;\r\n\r\n\t\tthis.nodePadding = 5;\r\n\r\n\t\tlet chordContainer = this.chartContainer.createChild(Container);\r\n\t\tchordContainer.align = \"center\";\r\n\t\tchordContainer.valign = \"middle\";\r\n\t\tchordContainer.shouldClone = false;\r\n\t\tchordContainer.layout = \"absolute\";\r\n\t\tthis.chordContainer = chordContainer;\r\n\r\n\t\tthis.nodesContainer.parent = chordContainer;\r\n\t\tthis.linksContainer.parent = chordContainer;\r\n\r\n\t\tthis.chartContainer.events.on(\"maxsizechanged\", this.invalidate, this, false); \r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Redraws the chart.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tlet chartContainer = this.chartContainer;\r\n\t\tlet nodesContainer = this.nodesContainer;\r\n\r\n\t\tlet endAngle = this.endAngle;\r\n\t\tlet startAngle = this.startAngle + this.nodePadding / 2;\r\n\r\n\t\tlet rect = $math.getArcRect(this.startAngle, this.endAngle, 1);\r\n\t\tlet innerRect: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t\trect = $math.getCommonRectangle([rect, innerRect]);\r\n\r\n\t\tlet maxRadius = Math.min(chartContainer.innerWidth / rect.width, chartContainer.innerHeight / rect.height);\r\n\r\n\t\tif(!$type.isNumber(maxRadius)){\r\n\t\t\tmaxRadius = 0;\r\n\t\t}\r\n\r\n\t\tlet chartRadius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\r\n\t\tlet radius = $utils.relativeRadiusToValue(this.radius, maxRadius);\r\n\t\tlet pixelInnerRadius = $utils.relativeRadiusToValue(this.innerRadius, radius, true);\r\n\r\n\t\tlet total = this.dataItem.values.value.sum;\r\n\t\tlet count = 0;\r\n\r\n\t\tlet newTotal = 0;\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tthis.getNodeValue(node);\r\n\t\t\tcount++;\r\n\t\t\tlet value = node.total;\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\t\t\tnewTotal += value;\r\n\t\t});\r\n\r\n\t\tthis.valueAngle = (endAngle - this.startAngle - this.nodePadding * count) / newTotal;\r\n\r\n\t\t$iter.each(this._sorted, (strNode) => {\r\n\t\t\tlet node = strNode[1];\r\n\t\t\tlet slice = node.slice;\r\n\r\n\t\t\tslice.radius = radius;\r\n\t\t\tslice.innerRadius = pixelInnerRadius;\r\n\r\n\t\t\tlet value = node.total;\r\n\r\n\t\t\tif(node.total / total < this.minNodeSize){\r\n\t\t\t\tvalue = total * this.minNodeSize;\r\n\t\t\t}\r\n\r\n\t\t\tnode.adjustedTotal = value;\r\n\r\n\t\t\tlet arc: number;\r\n\t\t\tif (this.nonRibbon) {\r\n\t\t\t\tarc = (endAngle - this.startAngle) / count - this.nodePadding;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tarc = this.valueAngle * value;\r\n\t\t\t}\r\n\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.startAngle = startAngle;\r\n\t\t\tnode.trueStartAngle = startAngle;\r\n\t\t\tnode.parent = this.nodesContainer;\r\n\t\t\tnode.validate(); // otherwise flickers - nodes are already created, but not yet positioned etc.\r\n\t\t\tstartAngle += arc + this.nodePadding;\r\n\t\t})\r\n\r\n\t\tthis.chordContainer.definedBBox = { x: radius * rect.x, y: radius * rect.y, width: radius * rect.width, height: radius * rect.height };\r\n\t\tthis.chordContainer.invalidateLayout();\r\n\r\n\t\tsuper.validate();\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Chord diagram\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new data item.\r\n\t *\r\n\t * @return {this} Data item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ChordDiagramDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face begins (the radial axis is drawn) at the\r\n\t * top center. (at -90 degrees)\r\n\t *\r\n\t * You can use `startAngle` to change this setting.\r\n\t *\r\n\t * E.g. setting this to 0 will make the radial axis start horizontally to\r\n\t * the right, as opposed to vertical.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value Start angle (degrees)\r\n\t */\r\n\tpublic set startAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"startAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Start angle (degrees)\r\n\t */\r\n\tpublic get startAngle(): number {\r\n\t\treturn this.getPropertyValue(\"startAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Starting angle of the Radar face. (degrees)\r\n\t *\r\n\t * Normally, a circular radar face ends (the radial axis is drawn) exactly\r\n\t * where it has started, forming a full 360 circle. (at 270 degrees)\r\n\t *\r\n\t * You can use `endAngle` to end the circle somewhere else.\r\n\t *\r\n\t * E.g. setting this to 180 will make the radar face end at horizontal line\r\n\t * to the left off the center.\r\n\t *\r\n\t * For a perfect circle the absolute sum of `startAngle` and `endAngle`\r\n\t * needs to be 360.\r\n\t *\r\n\t * However, it's **not** necessary to do so. You can set those to lesser\r\n\t * numbers, to create semi-circles.\r\n\t *\r\n\t * E.g. `startAngle = -90` with `endAngle = 0` will create a radar face that\r\n\t * looks like a quarter of a circle.\r\n\t *\r\n\t * @default -90\r\n\t * @param {number} value End angle (degrees)\r\n\t */\r\n\tpublic set endAngle(value: number) {\r\n\t\tthis.setPropertyValue(\"endAngle\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} End angle (degrees)\r\n\t */\r\n\tpublic get endAngle(): number {\r\n\t\treturn this.getPropertyValue(\"endAngle\");\r\n\t}\r\n\r\n\t/**\r\n\t * Outer radius of the Radar face.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set radius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"radius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Outer radius\r\n\t */\r\n\tpublic get radius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"radius\");\r\n\t}\r\n\r\n\t/**\r\n\t * Inner radius of the Chord nodes.\r\n\t *\r\n\t * This can either be in absolute pixel value, or relative [[Percent]].\r\n\t *\r\n\t * @param {number | Percent} value Outer radius\r\n\t */\r\n\tpublic set innerRadius(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"innerRadius\", value, true, false, 10, false);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Inner radius\r\n\t */\r\n\tpublic get innerRadius(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"innerRadius\");\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t *\r\n\t * If you set this to true, all the lines will be of the same width. This is done by making middleLine of a ChordLink visible.\r\n\t *\r\n\t * @param {boolean} value\r\n\t */\r\n\tpublic set nonRibbon(value: boolean) {\r\n\t\tthis.setPropertyValue(\"nonRibbon\", value, true);\r\n\t\tthis.links.template.middleLine.strokeOpacity = 1;\r\n\t\tthis.links.template.link.fillOpacity = 0;\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Non-ribbon\r\n\t */\r\n\tpublic get nonRibbon(): boolean {\r\n\t\treturn this.getPropertyValue(\"nonRibbon\");\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createNode():this[\"_node\"]{\r\n\t\tlet node = new ChordNode();\r\n\t\tthis._disposers.push(node);\r\n\t\treturn node;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic createLink():this[\"_link\"]{\r\n\t\tlet link = new ChordLink();\r\n\t\tthis._disposers.push(link);\r\n\t\treturn link;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ChordDiagram\"] = ChordDiagram;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/ChordDiagram.ts","/**\r\n * Column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYSeries, IXYSeriesDataFields, XYSeriesDataItem, IXYSeriesProperties, IXYSeriesAdapters, IXYSeriesEvents } from \"./XYSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { Series, SeriesDataItem } from \"./Series\";\r\nimport { SpriteState } from \"../../core/SpriteState\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { Axis, AxisItemLocation } from \"../axes/Axis\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { CategoryAxis } from \"../axes/CategoryAxis\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Column } from \"../elements/Column\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { IDataItemEvents } from \"../../core/DataItem\";\r\nimport { percent } from \"../../core/utils/Percent\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ColumnSeriesDataItem extends XYSeriesDataItem {\r\n\r\n\t/**\r\n\t * A Column Element\r\n\t * @type {Column}\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\t/**\r\n\t * Indicates if this data items close value is lower than its open value.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic droppedFromOpen: boolean;\r\n\r\n\t/**\r\n\t * Indicates if this items value is lower than previous data item's value.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic droppedFromPrevious: boolean;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {ColumnSeries}\r\n\t */\r\n\tpublic _component!: ColumnSeries;\r\n\r\n\t/**\r\n\t * A dictionary storing axes ranges columns by axis uid\r\n\t *\r\n\t * @type {Dictionary}\r\n\t * @ignore\r\n\t */\r\n\tprotected _rangesColumns: Dictionary;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\r\n\t\tthis.locations[\"dateX\"] = 0.5;\r\n\t\tthis.locations[\"dateY\"] = 0.5;\r\n\r\n\t\tthis.locations[\"categoryX\"] = 0.5;\r\n\t\tthis.locations[\"categoryY\"] = 0.5;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A column used to draw a column for this data item.\r\n\t *\r\n\t * @param {Column} column\r\n\t */\r\n\tpublic set column(column: this[\"_column\"]) {\r\n\t\tthis.setColumn(column);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Column} Column\r\n\t */\r\n\tpublic get column(): this[\"_column\"] {\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tprotected setColumn(column: this[\"_column\"]) {\r\n\t\tif (this._column && column != this._column) {\r\n\t\t\t$array.remove(this.sprites, this._column);\r\n\t\t}\r\n\t\tthis._column = column;\r\n\r\n\t\tif (column) {\r\n\t\t\tlet prevDataItem: ColumnSeriesDataItem = column.dataItem;\r\n\t\t\tif (prevDataItem && prevDataItem != this) {\r\n\t\t\t\tprevDataItem.column = undefined;\r\n\t\t\t}\r\n\t\t\tthis.addSprite(column);\r\n\r\n\t\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t\t// TODO investigate why component is undefined\r\n\t\t\t\t// https://codepen.io/team/amcharts/pen/dac4be245d658233a6d7e5597df2208b?editors=0010\r\n\t\t\t\tif (this.component) {\r\n\t\t\t\t\tthis.component.columns.removeValue(column);\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * A dictionary storing axes ranges columns by axis uid\r\n\t *\r\n\t * @type {Dictionary}\r\n\t */\r\n\tpublic get rangesColumns(): Dictionary {\r\n\t\tif (!this._rangesColumns) {\r\n\t\t\tthis._rangesColumns = new Dictionary();\r\n\t\t}\r\n\t\treturn this._rangesColumns;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesDataFields extends IXYSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesProperties extends IXYSeriesProperties {\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with pther series.\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tclustered?: boolean;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries]].\r\n */\r\nexport interface IColumnSeriesEvents extends IXYSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeriesAdapters extends IXYSeriesAdapters, IColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a column graph.\r\n *\r\n * @see {@link IColumnSeriesEvents} for a list of available Events\r\n * @see {@link IColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries extends XYSeries {\r\n\t/**\r\n\t */\r\n\tpublic _column: Column;\r\n\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IColumnSeriesEvents}\r\n\t */\r\n\tpublic _events!: IColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {ColumnSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: ColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * A list of column elements.\r\n\t *\r\n\t * @type {ListTemplate}\r\n\t */\r\n\tprotected _columns: ListTemplate;\r\n\r\n\t/**\r\n\t * Container to put column elements in.\r\n\t *\r\n\t * @type {Container}\r\n\t */\r\n\tprotected _columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Start location within cell for columns.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _startLocation: number = 0;\r\n\r\n\t/**\r\n\t * End location within cell for columns.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _endLocation: number = 1;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t */\r\n\tprotected _dropFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t */\r\n\tprotected _dropFromPreviousState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t */\r\n\tprotected _riseFromOpenState: SpriteState;\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t */\r\n\tprotected _riseFromPreviousState: SpriteState;\r\n\r\n\r\n\t/**\r\n\t * When working value of dataItem changes, we must process all the values to calculate sum, min, max etc. Also update stack values. This is quite expensive operation.\r\n\t * Unfortunately we do not know if user needs this processed values or not. By setting simplifiedProcessing = true you disable this processing and in case working\r\n\t * value changes, we only redraw the particular column. Do not do this if you have staked chart or use calculated values in bullets or in tooltips.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic simplifiedProcessing: boolean = false;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries\";\r\n\r\n\t\tthis.width = percent(100);\r\n\t\tthis.height = percent(100);\r\n\r\n\t\tthis.strokeOpacity = 0;\r\n\t\tthis.fillOpacity = 1;\r\n\r\n\t\tthis.clustered = true;\r\n\r\n\t\tlet columnsContainer = this.mainContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis._columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columns;\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\r\n\t\tthis.tooltipColorSource = this.columns.template;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A container that columns are created in.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic get columnsContainer() {\r\n\t\treturn this._columnsContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Column Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {ColumnSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new ColumnSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\t//@todo Check if we can do better than use `instanceof`\r\n\t\t// find start/end locations based on clustered/stacked settings\r\n\t\t// go through chart series instead of base axis series, because axis series doesn't maintain order\r\n\t\tlet baseAxisSeries = this.chart.series;\r\n\t\tlet clusterCount: number = 0;\r\n\t\tlet index: number = 0;\r\n\r\n\t\t$iter.each(baseAxisSeries.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries) {\r\n\t\t\t\tif (this.baseAxis == series.baseAxis) {\r\n\t\t\t\t\tif ((!series.stacked && series.clustered) || clusterCount === 0) {\r\n\t\t\t\t\t\tclusterCount++;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (series == this) {\r\n\t\t\t\t\t\tindex = clusterCount - 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet renderer = this.baseAxis.renderer;\r\n\r\n\t\tlet cellStartLocation: number = renderer.cellStartLocation;\r\n\t\tlet cellEndLocation: number = renderer.cellEndLocation;\r\n\r\n\t\tthis._startLocation = cellStartLocation + (index / clusterCount) * (cellEndLocation - cellStartLocation);\r\n\t\tthis._endLocation = cellStartLocation + (index + 1) / clusterCount * (cellEndLocation - cellStartLocation);\r\n\r\n\t\tsuper.validate();\r\n\r\n\t\tfor (let i = 0; i < this.startIndex; i++) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tfor (let i = this.dataItems.length - 1; i > this.endIndex; i--) {\r\n\t\t\tlet dataItem = this.dataItems.getIndex(i);\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ColumnSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\t\t// important oder here, first real, then super. we need this to know size\r\n\t\tthis.validateDataElementReal(dataItem);\r\n\t\tsuper.validateDataElement(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative start location for the data item.\r\n\t *\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t * @return {number} Location (0-1)\r\n\t */\r\n\tprotected getStartLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet startLocation = this._startLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tstartLocation += dataItem.locations[this.xOpenField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstartLocation += dataItem.locations[this.yOpenField] - 0.5;\r\n\t\t}\r\n\t\treturn startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemWorkingValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?: string): void {\r\n\t\tif (this.simplifiedProcessing) {\r\n\t\t\tthis.validateDataElement(dataItem);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tsuper.handleDataItemWorkingValueChange(dataItem, name);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative end location for the data item.\r\n\t *\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t * @return {number} Location (0-1)\r\n\t */\r\n\tprotected getEndLocation(dataItem: this[\"_dataItem\"]): number {\r\n\t\tlet endLocation = this._endLocation;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tendLocation += dataItem.locations[this.xField] - 0.5;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tendLocation += dataItem.locations[this.yField] - 0.5;\r\n\t\t}\r\n\t\treturn endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\t//\tif (dataItem.hasValue([this.xField, this.yField])) { // todo: this doesn't work with categories, think of a better way\r\n\t\tlet l: number;\r\n\t\tlet r: number;\r\n\t\tlet t: number;\r\n\t\tlet b: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet xField = this.xField;\r\n\t\tlet xOpenField = this.xOpenField;\r\n\t\tlet yField = this.yField;\r\n\t\tlet yOpenField = this.yOpenField;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\t\tlet percentHeight: number = template.percentHeight;\r\n\r\n\t\tlet pixelWidth: number = template.pixelWidth;\r\n\t\tlet pixelHeight: number = template.pixelHeight;\r\n\r\n\t\tlet maxWidth: number = template.maxWidth;\r\n\t\tlet maxHeight: number = template.maxHeight;\r\n\r\n\t\tlet paddingLeft: number = template.pixelPaddingLeft;\r\n\t\tlet paddingRight: number = template.pixelPaddingRight;\r\n\t\tlet paddingTop: number = template.pixelPaddingTop;\r\n\t\tlet paddingBottom: number = template.pixelPaddingBottom;\r\n\r\n\t\tlet outOfBounds: boolean = false;\r\n\r\n\t\t// two category axes\r\n\t\tif ((this.xAxis instanceof CategoryAxis) && (this.yAxis instanceof CategoryAxis)) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields) || !dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tstartLocation = 0;\r\n\t\t\tendLocation = 1;\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case max width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb += offset;\r\n\t\t\t\tt -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\t\t}\r\n\t\telse if (this.baseAxis == this.xAxis) {\r\n\r\n\t\t\tif (!dataItem.hasValue(this._yValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in percent\r\n\t\t\tif (!$type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, startLocation);\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, endLocation);\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - pixelWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case width is set in pixels\r\n\t\t\tif (!$type.isNaN(maxWidth)) {\r\n\t\t\t\tlet offset: number = ((r - l) - maxWidth) / 2;\r\n\t\t\t\tl += offset;\r\n\t\t\t\tr -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomLocation = dataItem.locations[yOpenField];\r\n\t\t\tlet topLocation = dataItem.locations[yField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.yAxis instanceof ValueAxis) {\r\n\t\t\t\tbottomLocation = 0;\r\n\t\t\t\ttopLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tb = this.yAxis.getY(dataItem, yOpenField, bottomLocation);\r\n\t\t\tt = this.yAxis.getY(dataItem, yField, topLocation);\r\n\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[xField] = startLocation + (endLocation - startLocation) / 2;\r\n\t\t\tt = this.fixVerticalCoordinate(t);\r\n\t\t\tb = this.fixVerticalCoordinate(b);\r\n\r\n\t\t\tif (Math.abs(r - l) - paddingLeft - paddingRight == 0) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t// horizontal bars\r\n\t\telse {\r\n\t\t\tif (!dataItem.hasValue(this._xValueFields)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentHeight / 100) / 2, 5);\r\n\t\t\t\tstartLocation += offset;\r\n\t\t\t\tendLocation -= offset;\r\n\t\t\t}\r\n\r\n\t\t\tt = this.yAxis.getY(dataItem, yOpenField, startLocation);\r\n\t\t\tb = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\t\t// in case height is set in pixels\r\n\t\t\tif ($type.isNaN(percentHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - pixelHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\t// in case height is set in pixels\r\n\t\t\tif (!$type.isNaN(maxHeight)) {\r\n\t\t\t\tlet offset: number = ((b - t) - maxHeight) / 2;\r\n\t\t\t\tb -= offset;\r\n\t\t\t\tt += offset;\r\n\t\t\t}\r\n\r\n\t\t\tlet rightLocation = dataItem.locations[xField];\r\n\t\t\tlet leftLocation = dataItem.locations[xOpenField];\r\n\t\t\t// otherwise gantt chart will start items in the middle of a cell\r\n\t\t\tif (this.xAxis instanceof ValueAxis) {\r\n\t\t\t\trightLocation = 0;\r\n\t\t\t\tleftLocation = 0;\r\n\t\t\t}\r\n\r\n\t\t\tr = this.xAxis.getX(dataItem, xField, rightLocation);\r\n\t\t\tl = this.xAxis.getX(dataItem, xOpenField, leftLocation);\r\n\t\t\t// used to save location for bullets, but it's not a good approach\r\n\t\t\t// dataItem.locations[yField] = startLocation + (endLocation - startLocation) / 2;\r\n\t\t\tr = this.fixHorizontalCoordinate(r);\r\n\t\t\tl = this.fixHorizontalCoordinate(l);\r\n\r\n\t\t\tif (Math.abs(t - b) - paddingTop - paddingBottom == 0) {\r\n\t\t\t\toutOfBounds = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet w: number = Math.abs(r - l);\r\n\t\tlet h: number = Math.abs(b - t);\r\n\r\n\t\tlet x: number = Math.min(l, r);\r\n\t\tlet y: number = Math.min(t, b);\r\n\r\n\t\tif (!outOfBounds) {\r\n\t\t\tlet column: this[\"_column\"];\r\n\t\t\tif (!dataItem.column) {\r\n\t\t\t\tcolumn = this.columns.create();\r\n\t\t\t\t//$object.forceCopyProperties(this.columns.template, column, visualProperties);\r\n\t\t\t\t$object.copyProperties(this, column, visualProperties); // need this because 3d columns are not in the same container\r\n\t\t\t\t$object.copyProperties(this.columns.template, column, visualProperties); // second time, no force, so that columns.template would override series properties\r\n\t\t\t\tdataItem.addSprite(column);\r\n\r\n\t\t\t\tdataItem.column = column;\r\n\r\n\t\t\t\t// accessibility\r\n\t\t\t\tif (this.itemsFocusable()) {\r\n\t\t\t\t\tcolumn.role = \"menuitem\";\r\n\t\t\t\t\tcolumn.focusable = true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tcolumn.role = \"listitem\";\r\n\t\t\t\t\tcolumn.focusable = false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (column.focusable) {\r\n\t\t\t\t\tcolumn.events.once(\"focus\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"blur\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t\tif (column.hoverable) {\r\n\t\t\t\t\tcolumn.events.once(\"over\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = this.populateString(this.itemReaderText, dataItem);\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t\tcolumn.events.once(\"out\", (ev) => {\r\n\t\t\t\t\t\tcolumn.readerTitle = \"\";\r\n\t\t\t\t\t}, undefined, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn = dataItem.column;\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.width = w;\r\n\t\t\tcolumn.height = h;\r\n\r\n\t\t\tcolumn.x = x;\r\n\t\t\tcolumn.y = y;\r\n\r\n\t\t\tcolumn.realX = l;\r\n\t\t\tcolumn.realY = t;\r\n\r\n\t\t\tcolumn.realWidth = r - l;\r\n\t\t\tcolumn.realHeight = b - t;\r\n\r\n\t\t\tcolumn.parent = this.columnsContainer;\r\n\t\t\tcolumn.virtualParent = this;\r\n\r\n\t\t\tthis.setColumnStates(column);\r\n\r\n\t\t\tif (column.invalid) {\r\n\t\t\t\tcolumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.__disabled = false;\r\n\t\t\t//column.returnAfterTemp();\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: this[\"_column\"] = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t//$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.parent = axisRange.contents;\r\n\r\n\t\t\t\trangeColumn.width = w;\r\n\t\t\t\trangeColumn.height = h;\r\n\t\t\t\trangeColumn.x = x;\r\n\t\t\t\trangeColumn.y = y;\r\n\r\n\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\r\n\t\t\t\tif (rangeColumn.invalid) {\r\n\t\t\t\t\trangeColumn.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\t//rangeColumn.returnAfterTemp();\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\r\n\t\tdataItem.itemWidth = w;\r\n\t\tdataItem.itemHeight = h;\r\n\t}\r\n\r\n\r\n\tdisableUnusedColumns(dataItem: ColumnSeriesDataItem) {\r\n\t\tif (dataItem) {\r\n\t\t\tif (dataItem.column) {\r\n\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\tdataItem.column.width = 0;\r\n\t\t\t\tdataItem.column.height = 0;\r\n\t\t\t\tdataItem.column.__disabled = true;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn: Sprite = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\t// otherwise might flicker when enabling\r\n\t\t\t\t\trangeColumn.width = 0;\r\n\t\t\t\t\trangeColumn.height = 0;\r\n\t\t\t\t\trangeColumn.__disabled = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Apply different state/coloring to columns based on the change value.\r\n\t *\r\n\t * @param {Sprite} sprite Sprite to apply state to\r\n\t * @todo Do not apply accessibility to wicks of the candlesticks\r\n\t */\r\n\tprotected setColumnStates(sprite: Sprite): void {\r\n\r\n\t\tlet dataItem: this[\"_dataItem\"] = sprite.dataItem;\r\n\r\n\t\tif (this.xAxis instanceof ValueAxis || this.yAxis instanceof ValueAxis) {\r\n\t\t\tlet open: number;\r\n\t\t\tlet value: number;\r\n\t\t\tlet change: number;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tif (this.xOpenField && this.xField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.xOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.xField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.xAxis.axisFieldName + \"X\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this.yOpenField && this.yField) {\r\n\t\t\t\t\topen = dataItem.getValue(this.yOpenField);\r\n\t\t\t\t\tvalue = dataItem.getValue(this.yField);\r\n\t\t\t\t\tchange = dataItem.getValue(this.yAxis.axisFieldName + \"Y\", \"previousChange\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (value < open) {\r\n\t\t\t\tdataItem.droppedFromOpen = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromOpenState)\r\n\t\t\t\tsprite.setState(this._dropFromOpenState, 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromOpen = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromOpenState)\r\n\t\t\t\tsprite.setState(this._riseFromOpenState, 0);\r\n\t\t\t}\r\n\r\n\t\t\tif (change < 0) {\r\n\t\t\t\tdataItem.droppedFromPrevious = true;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._dropFromPreviousState)\r\n\t\t\t\tsprite.setState((this._dropFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdataItem.droppedFromPrevious = false;\r\n\t\t\t\tsprite.defaultState.copyFrom(this._riseFromPreviousState)\r\n\t\t\t\tsprite.setState((this._riseFromPreviousState), 0);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of column elements in the series.\r\n\t *\r\n\t * @return {ListTemplate} Columns\r\n\t */\r\n\tpublic get columns(): ListTemplate {\r\n\t\tif (!this._columns) {\r\n\t\t\tthis._columns = new ListTemplate(this.createColumnTemplate());\r\n\t\t\tthis._disposers.push(new ListDisposer(this._columns));\r\n\t\t\tthis._disposers.push(this._columns.template);\r\n\t\t}\r\n\t\treturn this._columns;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a column element to use as a template.\r\n\t *\r\n\t * @return {this[\"_column\"]} Column template\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column();\r\n\t}\r\n\r\n\t/**\r\n\t * Cluster this series columns?\r\n\t *\r\n\t * Setting to `false` will make columns overlap with pther series.\r\n\t *\r\n\t * @default true\r\n\t * @param {boolean} value Clustered?\r\n\t */\r\n\tpublic set clustered(value: boolean) {\r\n\t\tthis.setPropertyValue(\"clustered\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} Clustered?\r\n\t */\r\n\tpublic get clustered(): boolean {\r\n\t\treturn this.getPropertyValue(\"clustered\");\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is lower than open value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return {SpriteState} State\r\n\t */\r\n\tpublic get dropFromOpenState(): SpriteState {\r\n\t\tif (!this._dropFromOpenState) {\r\n\t\t\tthis._dropFromOpenState = this.states.create(\"dropFromOpenState\");\r\n\t\t}\r\n\t\treturn this._dropFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is lower value of a previous\r\n\t * column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return {SpriteState} State\r\n\t */\r\n\tpublic get dropFromPreviousState(): SpriteState {\r\n\t\tif (!this._dropFromPreviousState) {\r\n\t\t\tthis._dropFromPreviousState = this.states.create(\"dropFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._dropFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when close value is same or higher than open\r\n\t * value.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * NOTE: this will work only if at least one axis is [[ValueAxis]].\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return {SpriteState} State\r\n\t */\r\n\tpublic get riseFromOpenState(): SpriteState {\r\n\t\tif (!this._riseFromOpenState) {\r\n\t\t\tthis._riseFromOpenState = this.states.create(\"riseFromOpenState\");\r\n\t\t}\r\n\t\treturn this._riseFromOpenState;\r\n\t}\r\n\r\n\t/**\r\n\t * A state to apply to a column when its value is same or higher than value\r\n\t * of a previous column.\r\n\t *\r\n\t * Can be used to differentiate appearance based on value relations.\r\n\t *\r\n\t * @readonly You can modify state object, but can't overwrite it\r\n\t * @return {SpriteState} State\r\n\t */\r\n\tpublic get riseFromPreviousState(): SpriteState {\r\n\t\tif (!this._riseFromPreviousState) {\r\n\t\t\tthis._riseFromPreviousState = this.states.create(\"riseFromPreviousState\");\r\n\t\t}\r\n\t\treturn this._riseFromPreviousState;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates value of the related legend item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {ColumnSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic updateLegendValue(dataItem?: this[\"_dataItem\"]) {\r\n\t\tsuper.updateLegendValue(dataItem);\r\n\r\n\t\tif (this.legendDataItem) {\r\n\t\t\tlet marker: Container = this.legendDataItem.marker;\r\n\t\t\tlet fromOpenState: SpriteState;\r\n\t\t\tlet fromPreviousState: SpriteState;\r\n\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tif (dataItem.droppedFromOpen) {\r\n\t\t\t\t\tfromOpenState = this._dropFromOpenState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromOpenState = this._riseFromOpenState;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (dataItem.droppedFromPrevious) {\r\n\t\t\t\t\tfromPreviousState = this._dropFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfromPreviousState = this._riseFromPreviousState;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(marker.children.iterator(), (child) => {\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tchild.setState(fromPreviousState);\r\n\t\t\t\t\tchild.setState(fromOpenState);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\t// todo: think what to do here, maybe apply above states based on totals?\r\n\t\t\t\t\tchild.setState(this._riseFromPreviousState);\r\n\t\t\t\t\tchild.setState(this._riseFromOpenState);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = this.fill;\r\n\t\tlegendDataItem.colorOrig = this.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties from another instance of [[ColumnSeries]].\r\n\t *\r\n\t * @param {ColumnSeries} source Source series\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.columns.template.copyFrom(source.columns.template);\r\n\t}\r\n\r\n\t/**\r\n\t* returns bullet x location\r\n\t* @ignore\r\n\t*/\r\n\r\n\tprotected getBulletLocationX(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationX(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t* returns bullet y location\r\n\t* @ignore\r\n\t*/\r\n\tprotected getBulletLocationY(bullet: Bullet, field: string): number {\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\treturn (this._startLocation + this._endLocation) / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.getBulletLocationY(bullet, field);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixVerticalCoordinate(coordinate: number): number {\r\n\t\tlet paddingBottom = this.columns.template.pixelPaddingBottom;\r\n\t\tlet paddingTop = this.columns.template.pixelPaddingTop;\r\n\r\n\t\tlet minY: number = -paddingTop;\r\n\t\tlet maxY: number = this.yAxis.axisLength + paddingBottom;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minY, maxY);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected fixHorizontalCoordinate(coordinate: number): number {\r\n\t\tlet paddingLeft = this.columns.template.pixelPaddingLeft;\r\n\t\tlet paddingRight = this.columns.template.pixelPaddingRight;\r\n\r\n\t\tlet minX: number = -paddingLeft;\r\n\t\tlet maxX: number = this.xAxis.axisLength + paddingRight;\r\n\r\n\t\treturn $math.fitToRange(coordinate, minX, maxX);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries\"] = ColumnSeries;\r\nregistry.registeredClasses[\"ColumnSeriesDataItem\"] = ColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries.ts","/**\r\n * TreeMap series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { TreeMap, TreeMapDataItem } from \"../types/TreeMap\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { RoundedRectangle } from \"../../core/elements/RoundedRectangle\";\r\nimport { Container } from \"../../core/Container\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\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\t * @type {TreeMapSeries}\r\n\t */\r\n\tpublic _component!: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Data for the this particular item.\r\n\t *\r\n\t * @param {Object} value Item's data\r\n\t */\r\n\t//public set dataContext(value: Object) {\r\n\t//\tthis._dataContext = value;\r\n\t//}\r\n\r\n\r\n\r\n\t/**\r\n\t * @return {Object} Item's data\r\n\t */\r\n\t/*\r\n public get dataContext(): Object {\r\n\t // It's because data of tree series is TreeMapDataItems.\r\n\t if (this._dataContext) {\r\n\t\t return (this._dataContext).dataContext;\r\n\t }\r\n }*/\r\n\r\n\t/**\r\n\t * The name of the item's parent item.\r\n\t *\r\n\t * @return {string} Parent name\r\n\t */\r\n\tpublic get parentName(): string {\r\n\t\tlet treeMapDataItem = this.treeMapDataItem;\r\n\t\tif (treeMapDataItem && treeMapDataItem.parent) {\r\n\t\t\treturn treeMapDataItem.parent.name;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's numeric value.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\treturn this.treeMapDataItem.value;\r\n\t}\r\n\r\n\t/**\r\n\t * A corresponding data item from the tree map.\r\n\t *\r\n\t * @readonly\r\n\t * @return {TreeMapDataItem} Data item\r\n\t */\r\n\tpublic get treeMapDataItem(): TreeMapDataItem {\r\n\t\treturn this._dataContext;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Name of the field in data that holds numeric value.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalue?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[TreeMapSeries]].\r\n */\r\nexport interface ITreeMapSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMapSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapSeriesAdapters extends IColumnSeriesAdapters, ITreeMapSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines Series for a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapSeriesEvents} for a list of available Events\r\n * @see {@link ITreeMapSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class TreeMapSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {ITreeMapSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ITreeMapSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ITreeMapSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ITreeMapSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ITreeMapSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ITreeMapSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ITreeMapSeriesEvents}\r\n\t */\r\n\tpublic _events!: ITreeMapSeriesEvents;\r\n\r\n\t/**\r\n\t * The level in treemap hierarchy series is at.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tpublic level: number;\r\n\r\n\t/**\r\n\t * Type of the data item used by series.\r\n\t *\r\n\t * @type {TreeMapSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {TreeMap}\r\n\t */\r\n\tpublic _chart: TreeMap;\r\n\r\n\tpublic parentDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"TreeMapSeries\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.fillOpacity = 1;\r\n\t\tthis.strokeOpacity = 1;\r\n\t\tthis.minBulletDistance = 0;\r\n\t\tthis.columns.template.tooltipText = \"{parentName} {name}: {value}\"; //@todo add format number?\r\n\t\tthis.columns.template.configField = \"config\";\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\r\n\t\tthis.stroke = interfaceColors.getFor(\"background\");\r\n\t\tthis.dataFields.openValueX = \"x0\";\r\n\t\tthis.dataFields.valueX = \"x1\";\r\n\t\tthis.dataFields.openValueY = \"y0\";\r\n\t\tthis.dataFields.valueY = \"y1\";\r\n\r\n\t\tthis.sequencedInterpolation = false;\r\n\r\n\t\tthis.showOnInit = false;\r\n\r\n\t\t// otherwise nodes don't stack nicely to each other\r\n\t\tthis.columns.template.pixelPerfect = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes data item.\r\n\t *\r\n\t * @param {TreeMapSeriesDataItem} dataItem Data item\r\n\t * @param {Object} dataContext Raw data\r\n\t * @param {number} index Index of the data item\r\n\t */\r\n\tprotected processDataItem(dataItem: this[\"_dataItem\"], dataContext?: Object): void {\r\n\t\t(dataContext).seriesDataItem = dataItem; // save a reference here. dataContext is TreeMapDataItem and we need to know dataItem sometimes\r\n\t\tsuper.processDataItem(dataItem, dataContext);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {TreeMapSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Shows series.\r\n\t *\r\n\t * @param {number} duration Duration of fade in (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic show(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\t\t\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", dataItem.treeMapDataItem.values.value.value);\r\n\t\t})\r\n\r\n\t\tlet animation = super.showReal(interpolationDuration);\r\n\t\tlet chart = this.chart;\r\n\t\tif(chart){\r\n\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\tanimation.events.on(\"animationended\", () => {\r\n\t\t\t\t\tchart.invalidateLayout();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tchart.invalidateLayout();\r\n\t\t\t}\r\n\t\t\tchart.invalidateLayout();\r\n\t\t}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides series.\r\n\t *\r\n\t * @param {number} duration Duration of fade out (ms)\r\n\t * @return {Animation} Animation\r\n\t */\r\n\tpublic hide(duration?: number): Animation {\r\n\r\n\t\tlet interpolationDuration = this.defaultState.transitionDuration;\t\t\r\n\t\tif($type.isNumber(duration)){\r\n\t\t\tinterpolationDuration = duration;\r\n\t\t}\r\n\r\n\t\tlet animation = super.hideReal(interpolationDuration);\r\n\r\n\t\tthis.dataItems.each((dataItem)=>{\r\n\t\t\tdataItem.treeMapDataItem.setWorkingValue(\"value\", 0);\r\n\t\t})\r\n\r\n\t\tlet chart = this.chart;\r\n\t\tif(chart){\r\n\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\tanimation.events.on(\"animationended\", () => {\r\n\t\t\t\t\tchart.invalidateLayout();\t\t\t\t\t\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tchart.invalidateLayout();\t\t\t\t\r\n\t\t\t}\r\n\t\t\tchart.invalidateLayout();\r\n\t\t}\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Process values.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic processValues() {\r\n\r\n\t\t// Just overriding so that inherited method does not kick in.\r\n\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic dataChangeUpdate(){\r\n\r\n\t}\t\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Add empty data fields if the they are not set, so that XYSeries\r\n\t\t\t// dataField check does not result in error.\r\n\t\t\tif (!$type.hasValue(config.dataFields) || !$type.isObject(config.dataFields)) {\r\n\t\t\t\tconfig.dataFields = {};\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container) {\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: RoundedRectangle = marker.createChild(RoundedRectangle);\r\n\t\tcolumn.shouldClone = false;\r\n\t\t$object.copyProperties(this, column, visualProperties);\r\n\r\n\t\t//column.copyFrom(this.columns.template);\r\n\t\tcolumn.padding(0, 0, 0, 0); // if columns will have padding (which is often), legend marker will be very narrow\r\n\t\tcolumn.width = w;\r\n\t\tcolumn.height = h;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMapSeries\"] = TreeMapSeries;\r\nregistry.registeredClasses[\"TreeMapSeriesDataItem\"] = TreeMapSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/TreeMapSeries.ts","/**\r\n * TreeMap chart module.\r\n *\r\n * Parts of the functionality used in this module are taken from D3.js library\r\n * (https://d3js.org/)\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { List, ListTemplate, IListEvents } from \"../../core/utils/List\";\r\nimport { Legend, ILegendDataFields, LegendDataItem } from \"../Legend\";\r\nimport { Component, IComponentEvents } from \"../../core/Component\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { ValueAxis } from \"../axes/ValueAxis\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { TreeMapSeries } from \"../series/TreeMapSeries\";\r\nimport { Color } from \"../../core/utils/Color\";\r\nimport { TreeMapSeriesDataItem } from \"../series/TreeMapSeries\";\r\nimport { NavigationBar } from \"../elements/NavigationBar\";\r\nimport { ColorSet } from \"../../core/utils/ColorSet\";\r\nimport { MouseCursorStyle } from \"../../core/interaction/Mouse\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[TreeMap]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class TreeMapDataItem extends XYChartDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {TreeMap}\r\n\t */\r\n\tpublic _component!: TreeMap;\r\n\r\n\t/**\r\n\t * A treemap level this data item is displayed at.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tprotected _level: number;\r\n\r\n\t/**\r\n\t * Related series.\r\n\t *\r\n\t * @type {TreeMapSeries}\r\n\t */\r\n\tprotected _series: TreeMapSeries;\r\n\r\n\t/**\r\n\t * Related series data item.\r\n\t *\r\n\t * @type {TreeMapSeriesDataItem}\r\n\t */\r\n\tpublic seriesDataItem: TreeMapSeriesDataItem;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {TreeMapDataItem[]}\r\n\t */\r\n\tpublic rows: TreeMapDataItem[] = [];\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number}\r\n\t */\r\n\tpublic rowsRatio: number;\r\n\r\n\t/**\r\n\t * Required for squarify functionality.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic dice: boolean;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMapDataItem\";\r\n\r\n\t\tthis.values.value = {};\r\n\r\n\t\tthis.values.x0 = {};\r\n\r\n\t\tthis.values.y0 = {};\r\n\r\n\t\tthis.values.x1 = {};\r\n\r\n\t\tthis.values.y1 = {};\r\n\r\n\t\tthis.hasChildren.children = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Numeric value of the item.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set value(value: number) {\r\n\t\tthis.setValue(\"value\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get value(): number {\r\n\t\tlet value = this.values[\"value\"].workingValue;\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t\tif (this.children) {\r\n\t\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\t\tif ($type.isNumber(child.value)) {\r\n\t\t\t\t\t\tvalue += child.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\tpublic get percent(): number {\r\n\t\tif (this.parent) {\r\n\t\t\treturn this.value / this.parent.value * 100;\r\n\t\t}\r\n\t\treturn 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} value X\r\n\t */\r\n\tpublic set x0(value: number) {\r\n\t\tthis.setValue(\"x0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} X\r\n\t */\r\n\tpublic get x0(): number {\r\n\t\treturn this.values.x0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's X position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} value X\r\n\t */\r\n\tpublic set x1(value: number) {\r\n\t\tthis.setValue(\"x1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} X\r\n\t */\r\n\tpublic get x1(): number {\r\n\t\treturn this.values.x1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} value Y\r\n\t */\r\n\tpublic set y0(value: number) {\r\n\t\tthis.setValue(\"y0\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Y\r\n\t */\r\n\tpublic get y0(): number {\r\n\t\treturn this.values.y0.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's Y position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param {number} value Y\r\n\t */\r\n\tpublic set y1(value: number) {\r\n\t\tthis.setValue(\"y1\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Y\r\n\t */\r\n\tpublic get y1(): number {\r\n\t\treturn this.values.y1.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Item's name.\r\n\t *\r\n\t * @param {string} name Name\r\n\t */\r\n\tpublic set name(name: string) {\r\n\t\tthis.setProperty(\"name\", name);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Name\r\n\t */\r\n\tpublic get name(): string {\r\n\t\treturn this.properties.name;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of item's sub-children.\r\n\t *\r\n\t * Having children means that the TreeMap chat will automatically be\r\n\t * \"drillable\". Clicking on an item with children will zoom to the item, then\r\n\t * display its children.\r\n\t *\r\n\t * Treemap can have any level of nesting.\r\n\t *\r\n\t * @param {OrderedListTemplate} children Item's children\r\n\t */\r\n\tpublic set children(children: OrderedListTemplate) {\r\n\t\tthis.setProperty(\"children\", children);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {OrderedListTemplate} Item's children\r\n\t */\r\n\tpublic get children(): OrderedListTemplate {\r\n\t\treturn this.properties.children;\r\n\t}\r\n\r\n\t/**\r\n\t * Depth level in the treemap hierarchy.\r\n\t *\r\n\t * The top-level item will have level set at 0. Its children will have\r\n\t * level 1, and so on.\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Level\r\n\t */\r\n\tpublic get level(): number {\r\n\t\tif (!this.parent) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.parent.level + 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Item's color.\r\n\t *\r\n\t * If not set, will use parent's color, or, if that is not set either,\r\n\t * automatically assigned color from chart's color set. (`chart.colors`)\r\n\t *\r\n\t * @param {Color} value Color\r\n\t */\r\n\tpublic set color(value: Color) {\r\n\t\tthis.setProperty(\"color\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {Color} Color\r\n\t */\r\n\tpublic get color(): Color {\r\n\t\tlet color = this.properties.color;\r\n\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.parent) {\r\n\t\t\t\tcolor = this.parent.color;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (color == undefined) {\r\n\t\t\tif (this.component) {\r\n\t\t\t\tcolor = this.component.colors.getIndex(this.component.colors.step * this.index);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn color;\r\n\t}\r\n\r\n\t/**\r\n\t * series of data item\r\n\t * @todo: proper descrition\r\n\t */\r\n\tpublic set series(series: TreeMapSeries) {\r\n\t\tif (this._series) {\r\n\t\t\tthis.component.series.removeValue(this._series);\r\n\t\t\tthis._series.dispose();\r\n\t\t}\r\n\t\tthis._series = series;\r\n\t\tthis._disposers.push(series);\r\n\t}\r\n\r\n\tpublic get series(): TreeMapSeries {\r\n\t\treturn this._series;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[TreeMap]].\r\n */\r\nexport interface ITreeMapDataFields extends IXYChartDataFields {\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's numeric value.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tvalue?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's sub-items.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tchildren?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's name.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tname?: string;\r\n\r\n\t/**\r\n\t * A name of the field in data that holds item's color.\r\n\t *\r\n\t * If not set, a new color will be automatically assigned to each item as\r\n\t * defined by theme.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tcolor?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[TreeMap]].\r\n */\r\nexport interface ITreeMapProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Maximum levels the chart will allow drilling down to.\r\n\t *\r\n\t * @default 2\r\n\t * @type {number}\r\n\t */\r\n\tmaxLevels?: number;\r\n\r\n\t/**\r\n\t * Current drill-down level the treemap is at.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tcurrentLevel?: number;\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * @default \"descending\"\r\n\t * @type {\"none\" | \"ascending\" | \"descending\"}\r\n\t */\r\n\tsorting?: \"none\" | \"ascending\" | \"descending\";\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[TreeMap]].\r\n */\r\nexport interface ITreeMapEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[TreeMap]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ITreeMapAdapters extends IXYChartAdapters, ITreeMapProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a TreeMap chart.\r\n *\r\n * @see {@link ITreeMapEvents} for a list of available Events\r\n * @see {@link ITreeMapAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/} for documentation\r\n */\r\nexport class TreeMap extends XYChart {\r\n\r\n\t/**\r\n\t * Defines a type of the data item used for this chart.\r\n\t *\r\n\t * @type {TreeMapDataItem}\r\n\t */\r\n\tpublic _dataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {ITreeMapDataFields}\r\n\t */\r\n\tpublic _dataFields: ITreeMapDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ITreeMapProperties}\r\n\t */\r\n\tpublic _properties!: ITreeMapProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {SeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ITreeMapAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ITreeMapEvents}\r\n\t */\r\n\tpublic _events!: ITreeMapEvents;\r\n\r\n\t/**\r\n\t * A horizontal value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t *\r\n\t * @type {ValueAxis}\r\n\t */\r\n\tpublic xAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * A vertical value axis.\r\n\t *\r\n\t * TreeMap chart is basically an XY chart, which means it has vertical and\r\n\t * horizontal value axes.\r\n\t *\r\n\t * As with any XY-based chart, it can be zoomed.\r\n\t *\r\n\t * @type {ValueAxis}\r\n\t */\r\n\tpublic yAxis: ValueAxis;\r\n\r\n\t/**\r\n\t * An algorithm used to divide area into squares based on their value.\r\n\t *\r\n\t * Available options: squarify (default), binaryTree, slice, dice, sliceDice.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.layoutAlgorithm = chart.sliceDice;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"layoutAlgorithm\": \"sliceDice\",\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/chart-types/treemap/#Area_division_methods} For more info and examples.\r\n\t * @default squarify\r\n\t * @type {function}\r\n\t */\r\n\tpublic layoutAlgorithm: (parent: TreeMapDataItem) => void = this.squarify;\r\n\r\n\t/**\r\n\t * Defines a type of series that this chart uses.\r\n\t *\r\n\t * @type {PieSeries}\r\n\t */\r\n\tpublic _seriesType: TreeMapSeries;\r\n\r\n\t/**\r\n\t * [_homeDataItem description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {TreeMapDataItem}\r\n\t */\r\n\tprotected _homeDataItem: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * [_tempSeries description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {TreeMapSeries[]}\r\n\t */\r\n\tprotected _tempSeries: TreeMapSeries[];\r\n\r\n\t/**\r\n\t * A text dispalyed on the home button in breadcurmb nav control.\r\n\t *\r\n\t * @type {string}\r\n\t */\r\n\tprotected _homeText: string;\r\n\r\n\t/**\r\n\t * A set of colors to be applied autoamtically to each new chart item, if\r\n\t * not explicitly set.\r\n\t *\r\n\t * @type {ColorSet}\r\n\t */\r\n\tpublic colors: ColorSet;\r\n\r\n\t/**\r\n\t * Holds series object for each TreeMap level.\r\n\t *\r\n\t * \"0\" is the top-level series.\r\n\t * \"1\" is the second level.\r\n\t * Etc.\r\n\t *\r\n\t * @todo Description\r\n\t * @param {DictionaryTemplate} Templates for each level\r\n\t */\r\n\tpublic seriesTemplates: DictionaryTemplate;\r\n\r\n\t/**\r\n\t * Is the chart zoomable?\r\n\t *\r\n\t * If the chart is `zoomable`, and items have sub-items, the chart will\r\n\t * drill-down to sub-items when click on their parent item.\r\n\t *\r\n\t * @default true\r\n\t * @type {boolean}\r\n\t */\r\n\tpublic zoomable: boolean = true;\r\n\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t *\r\n\t * @type {NavigationBar}\r\n\t */\r\n\tprotected _navigationBar: NavigationBar;\r\n\r\n\t/**\r\n\t * Currently selected data item.\r\n\t * @type {TreeMapDataItem}\r\n\t * @readonly\r\n\t */\r\n\tpublic currentlyZoomed: TreeMapDataItem;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"TreeMap\";\r\n\r\n\t\tthis.maxLevels = 2;\r\n\t\tthis.currentLevel = 0;\r\n\r\n\t\tthis.colors = new ColorSet();\r\n\t\tthis.sorting = \"descending\";\r\n\r\n\t\t// create two value axes for the chart\r\n\t\tlet xAxis = this.xAxes.push(new ValueAxis());\r\n\t\txAxis.title.disabled = true;\r\n\t\txAxis.strictMinMax = true;\r\n\r\n\t\tlet xRenderer = xAxis.renderer;\r\n\t\txRenderer.inside = true;\r\n\t\txRenderer.labels.template.disabled = true;\r\n\t\txRenderer.ticks.template.disabled = true;\r\n\t\txRenderer.grid.template.disabled = true;\r\n\t\txRenderer.axisFills.template.disabled = true;\r\n\t\txRenderer.minGridDistance = 100;\r\n\t\txRenderer.line.disabled = true;\r\n\t\txRenderer.baseGrid.disabled = true;\r\n\t\t//xRenderer.inversed = true;\r\n\r\n\t\tlet yAxis = this.yAxes.push(new ValueAxis());\r\n\t\tyAxis.title.disabled = true;\r\n\t\tyAxis.strictMinMax = true;\r\n\r\n\t\tlet yRenderer = yAxis.renderer;\r\n\t\tyRenderer.inside = true;\r\n\t\tyRenderer.labels.template.disabled = true;\r\n\t\tyRenderer.ticks.template.disabled = true;\r\n\t\tyRenderer.grid.template.disabled = true;\r\n\t\tyRenderer.axisFills.template.disabled = true;\r\n\t\tyRenderer.minGridDistance = 100;\r\n\t\tyRenderer.line.disabled = true;\r\n\t\tyRenderer.baseGrid.disabled = true;\r\n\t\tyRenderer.inversed = true;\r\n\r\n\t\t// shortcuts\r\n\t\tthis.xAxis = xAxis;\r\n\t\tthis.yAxis = yAxis;\r\n\r\n\t\tconst template = new TreeMapSeries();\r\n\t\tthis.seriesTemplates = new DictionaryTemplate(template);\r\n\t\tthis._disposers.push(new DictionaryDisposer(this.seriesTemplates));\r\n\t\tthis._disposers.push(template);\r\n\r\n\t\tthis.zoomOutButton.events.on(\"hit\", () => {\r\n\t\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t\t}, undefined, false)\r\n\r\n\t\tthis.seriesTemplates.events.on(\"insertKey\", (event) => {\r\n\t\t\tevent.newValue.isTemplate = true;\r\n\t\t}, undefined, false)\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * A navigation bar used to show \"breadcrumb\" control, indicating current\r\n\t * drill-down path.\r\n\t *\r\n\t * @type {NavigationBar}\r\n\t */\r\n\tpublic set navigationBar(navigationBar: NavigationBar) {\r\n\t\tif (this._navigationBar != navigationBar) {\r\n\t\t\tthis._navigationBar = navigationBar;\r\n\t\t\tnavigationBar.parent = this;\r\n\t\t\tnavigationBar.toBack();\r\n\t\t\tnavigationBar.links.template.events.on(\"hit\", (event) => {\r\n\t\t\t\tlet dataItem = event.target.dataItem.dataContext;\r\n\t\t\t\tthis.zoomToChartDataItem(dataItem);\r\n\t\t\t\tthis.createTreeSeries(dataItem);\r\n\t\t\t}, undefined, true);\r\n\r\n\t\t\tthis._disposers.push(navigationBar);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns navigationBar if it is added to a chart\r\n\t */\r\n\tpublic get navigationBar(): NavigationBar {\r\n\t\treturn this._navigationBar;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * (Re)validates chart's data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tsuper.validateData();\r\n\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.dispose();\r\n\t\t}\r\n\r\n\t\tlet homeDataItem = this.dataItems.template.clone(); // cant' use createDataItem here!\r\n\r\n\t\tthis._homeDataItem = homeDataItem;\r\n\r\n\t\t$iter.each(this.dataItems.iterator(), (dataItem) => {\r\n\t\t\tdataItem.parent = homeDataItem;\r\n\t\t});\r\n\r\n\t\thomeDataItem.children = this.dataItems;\r\n\r\n\t\thomeDataItem.x0 = 0;\r\n\t\thomeDataItem.y0 = 0;\r\n\t\thomeDataItem.name = this._homeText;\r\n\r\n\t\tlet maxX = 1000;\r\n\t\tlet maxY = (maxX * this.pixelHeight / this.pixelWidth) || 1000;\r\n\r\n\t\thomeDataItem.x1 = maxX;\r\n\t\thomeDataItem.y1 = maxY;\r\n\r\n\t\tthis.xAxis.min = 0;\r\n\t\tthis.xAxis.max = maxX;\r\n\r\n\t\tthis.yAxis.min = 0;\r\n\t\tthis.yAxis.max = maxY;\r\n\r\n\t\tthis.layoutItems(homeDataItem);\r\n\r\n\t\tthis.createTreeSeries(homeDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Layouts and sizes all items according to their value and\r\n\t * `layoutAlgorithm`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Parent data item\r\n\t */\r\n\tpublic layoutItems(parent: TreeMapDataItem, sorting?: \"none\" | \"ascending\" | \"descending\"): void {\r\n\t\tif (parent) {\r\n\t\t\tlet children = parent.children;\r\n\r\n\t\t\tif (!sorting) {\r\n\t\t\t\tsorting = this.sorting;\r\n\t\t\t}\r\n\r\n\t\t\tif (sorting == \"ascending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn a.value - b.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tif (sorting == \"descending\") {\r\n\t\t\t\tchildren.values.sort((a, b) => {\r\n\t\t\t\t\treturn b.value - a.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._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 {TreeMapDataItem} dataItem Data item to create series out of\r\n\t */\r\n\tprotected createTreeSeries(dataItem: TreeMapDataItem) {\r\n\t\tthis._tempSeries = [];\r\n\r\n\t\tlet navigationData = [dataItem];\r\n\r\n\t\t// create parent series and navigation data\r\n\t\tlet parentDataItem = dataItem.parent;\r\n\t\twhile (parentDataItem != undefined) {\r\n\t\t\tthis.initSeries(parentDataItem);\r\n\t\t\tnavigationData.push(parentDataItem);\r\n\t\t\tparentDataItem = parentDataItem.parent;\r\n\t\t}\r\n\r\n\t\tnavigationData.reverse();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.data = navigationData;\r\n\t\t}\r\n\r\n\t\t// create series and children series\r\n\t\tthis.createTreeSeriesReal(dataItem);\r\n\r\n\t\t// add those which are not in the list\r\n\t\t$array.each(this._tempSeries, (series) => {\r\n\t\t\tif (this.series.indexOf(series) == -1) {\r\n\t\t\t\tthis.series.push(series);\r\n\t\t\t}\r\n\t\t\tseries.zIndex = series.level;\r\n\t\t})\r\n\t}\r\n\r\n\t/**\r\n\t * [createTreeSeriesReal description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {TreeMapDataItem} dataItem [description]\r\n\t */\r\n\tprotected createTreeSeriesReal(dataItem: TreeMapDataItem) {\r\n\t\tif (dataItem.children) {\r\n\t\t\tlet level = dataItem.level;\r\n\r\n\t\t\tif (level < this.currentLevel + this.maxLevels) {\r\n\r\n\t\t\t\tthis.initSeries(dataItem);\r\n\r\n\t\t\t\tfor (let i = 0; i < dataItem.children.length; i++) {\r\n\t\t\t\t\tlet child = dataItem.children.getIndex(i);\r\n\t\t\t\t\tif (child.children) {\r\n\t\t\t\t\t\tthis.createTreeSeriesReal(child);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * Overriding, as tree map series are created on the fly all the time\r\n\t */\r\n\tprotected seriesAppeared(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Initializes the treemap series.\r\n\t *\r\n\t * @todo Description\r\n\t * @param {TreeMapDataItem} dataItem Chart data item\r\n\t */\r\n\tprotected initSeries(dataItem: TreeMapDataItem) {\r\n\t\tif (!dataItem.series) {\r\n\t\t\tlet series: TreeMapSeries;\r\n\r\n\t\t\tlet template = this.seriesTemplates.getKey(dataItem.level.toString());\r\n\t\t\tif (template) {\r\n\t\t\t\tseries = template.clone();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tseries = this.series.create();\r\n\t\t\t}\r\n\r\n\t\t\tseries.name = dataItem.name;\r\n\t\t\tseries.parentDataItem = dataItem;\r\n\t\t\tdataItem.series = series;\r\n\r\n\t\t\tlet level = dataItem.level;\r\n\t\t\tseries.level = level;\r\n\r\n\t\t\tlet dataContext: any = dataItem.dataContext;\r\n\t\t\tif (dataContext) {\r\n\t\t\t\tseries.config = dataContext.config;\r\n\t\t\t}\r\n\r\n\t\t\tthis.dataUsers.removeValue(series); // series do not use data directly, that's why we remove it\r\n\t\t\tseries.data = dataItem.children.values;\r\n\t\t\tseries.fill = dataItem.color;\r\n\r\n\t\t\tseries.columnsContainer.hide(0);\r\n\t\t\tseries.bulletsContainer.hide(0);\r\n\r\n\t\t\tseries.columns.template.adapter.add(\"fill\", (fill, target) => {\r\n\t\t\t\tlet dataItem = target.dataItem;\r\n\t\t\t\tif (dataItem) {\r\n\t\t\t\t\tlet treeMapDataItem = dataItem.treeMapDataItem;\r\n\t\t\t\t\tif (treeMapDataItem) {\r\n\t\t\t\t\t\ttarget.fill = treeMapDataItem.color;\r\n\t\t\t\t\t\ttarget.adapter.remove(\"fill\"); //@todo: make it possible adapters applied once?\r\n\t\t\t\t\t\treturn treeMapDataItem.color;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif (this.zoomable && (dataItem.level > this.currentLevel || (dataItem.children && dataItem.children.length > 0))) {\r\n\t\t\t\tseries.columns.template.cursorOverStyle = MouseCursorStyle.pointer;\r\n\t\t\t\tif (this.zoomable) {\r\n\t\t\t\t\tseries.columns.template.events.on(\"hit\", (event) => {\r\n\t\t\t\t\t\tlet seriesDataItem = event.target.dataItem;\r\n\r\n\t\t\t\t\t\tif (dataItem.level > this.currentLevel) {\r\n\t\t\t\t\t\t\tthis.zoomToChartDataItem(seriesDataItem.treeMapDataItem.parent);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tthis.zoomToSeriesDataItem(seriesDataItem);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}, this, undefined);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._tempSeries.push(dataItem.series);\r\n\t}\r\n\r\n\t/**\r\n\t * Toggles bullets so that labels that belong to current drill level are\r\n\t * shown.\r\n\t *\r\n\t * @param {number} duration Animation duration (ms)\r\n\t */\r\n\tprotected toggleBullets(duration?: number): void {\r\n\t\t// hide all series which are not in tempSeries\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (this._tempSeries.indexOf(series) == - 1) {\r\n\t\t\t\t//series.hideReal(duration);\r\n\t\t\t\tseries.columnsContainer.hide();\r\n\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t//series.showReal(duration);\r\n\t\t\t\tseries.columnsContainer.show();\r\n\t\t\t\tseries.bulletsContainer.show(duration);\r\n\r\n\t\t\t\tif (series.level < this.currentLevel) {\r\n\t\t\t\t\tseries.bulletsContainer.hide(duration);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item in series.\r\n\t *\r\n\t * @param {TreeMapSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic zoomToSeriesDataItem(dataItem: TreeMapSeriesDataItem): void {\r\n\t\tthis.zoomToChartDataItem(dataItem.treeMapDataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms to particular item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} dataItem Data item\r\n\t */\r\n\tpublic zoomToChartDataItem(dataItem: TreeMapDataItem): void {\r\n\t\tif (dataItem && dataItem.children) {\r\n\t\t\tthis.xAxis.zoomToValues(dataItem.x0, dataItem.x1);\r\n\t\t\tthis.yAxis.zoomToValues(dataItem.y0, dataItem.y1);\r\n\r\n\t\t\tthis.currentLevel = dataItem.level;\r\n\t\t\tthis.currentlyZoomed = dataItem;\r\n\r\n\t\t\tthis.createTreeSeries(dataItem);\r\n\r\n\t\t\tlet rangeChangeAnimation = this.xAxis.rangeChangeAnimation || this.yAxis.rangeChangeAnimation;\r\n\r\n\t\t\tif (rangeChangeAnimation && !rangeChangeAnimation.isFinished()) {\r\n\t\t\t\tthis._dataDisposers.push(rangeChangeAnimation);\r\n\t\t\t\trangeChangeAnimation.events.once(\"animationended\", () => {\r\n\t\t\t\t\tthis.toggleBullets();\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.toggleBullets();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Add a default screen reader title for accessibility\r\n\t\t// This will be overridden in screen reader if there are any `titles` set\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"TreeMap chart\");\r\n\t\t}\r\n\t\t//this.homeText = this.language.translate(\"Home\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {XYSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new TreeMapDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Maximum drill-down levels the chart will allow going to.\r\n\t *\r\n\t * If set, the chart will not drill-down further, even if there are sub-items\r\n\t * available.\r\n\t *\r\n\t * Set to `1` to disable drill down functionality.\r\n\t *\r\n\t * @param {number} value Maximum drill-down level\r\n\t */\r\n\tpublic set maxLevels(value: number) {\r\n\t\tthis.setPropertyValue(\"maxLevels\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Maximum drill-down level\r\n\t */\r\n\tpublic get maxLevels(): number {\r\n\t\treturn this.getPropertyValue(\"maxLevels\");\r\n\t}\r\n\r\n\t/**\r\n\t * Current drill-down level the chart is at.\r\n\t *\r\n\t * @param {number} value Current level\r\n\t */\r\n\tpublic set currentLevel(value: number) {\r\n\t\tthis.setPropertyValue(\"currentLevel\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Current level\r\n\t */\r\n\tpublic get currentLevel(): number {\r\n\t\treturn this.getPropertyValue(\"currentLevel\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sorting direction of treemap items.\r\n\t *\r\n\t * Available options: \"none\", \"ascending\", and \"descending\" (default).\r\n\t *\r\n\t * @default \"descending\"\r\n\t * @param {\"none\" | \"ascending\" | \"descending\"} value [description]\r\n\t */\r\n\tpublic set sorting(value: \"none\" | \"ascending\" | \"descending\") {\r\n\t\tthis.setPropertyValue(\"sorting\", value, true);\r\n\t}\r\n\r\n\tpublic get sorting(): \"none\" | \"ascending\" | \"descending\" {\r\n\t\treturn this.getPropertyValue(\"sorting\");\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a new series of the suitable type.\r\n\t *\r\n\t * @return {this} new series\r\n\t */\r\n\tprotected createSeries(): this[\"_seriesType\"] {\r\n\t\treturn new TreeMapSeries();\r\n\t}\r\n\r\n\t/**\r\n\t * A text displayed on the \"home\" button which is used to go back to level 0\r\n\t * after drill into sub-items.\r\n\t *\r\n\t * @param {string} value Home text\r\n\t */\r\n\tpublic set homeText(value: string) {\r\n\t\tthis._homeText = value;\r\n\t\tif (this._homeDataItem) {\r\n\t\t\tthis._homeDataItem.name = this._homeText;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {string} Home text\r\n\t */\r\n\tpublic get homeText(): string {\r\n\t\treturn this._homeText;\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Instantiate layout algorithm\r\n\t\t\tif ($type.hasValue(config[\"layoutAlgorithm\"]) && $type.isString(config[\"layoutAlgorithm\"])) {\r\n\t\t\t\tswitch (config[\"layoutAlgorithm\"]) {\r\n\t\t\t\t\tcase \"squarify\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.squarify;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"binaryTree\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.binaryTree;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"slice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.slice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"dice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.dice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"sliceDice\":\r\n\t\t\t\t\t\tconfig[\"layoutAlgorithm\"] = this.sliceDice;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tdelete config[\"layoutAlgorithm\"];\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Set type for navigation bar\r\n\t\t\tif ($type.hasValue(config.navigationBar) && !$type.hasValue(config.navigationBar.type)) {\r\n\t\t\t\tconfig.navigationBar.type = \"NavigationBar\";\r\n\t\t\t}\r\n\r\n\t\t\tsuper.processConfig(config);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Measures the size of container and informs its children of how much size\r\n\t * they can occupy, by setting their relative `maxWidth` and `maxHeight`\r\n\t * properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.layoutItems(this.currentlyZoomed);\r\n\t}\r\n\r\n\t/**\r\n\t * Validates (processes) data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems() {\r\n\t\tsuper.validateDataItems();\r\n\t\tthis.layoutItems(this._homeDataItem);\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tseries.validateRawData();\r\n\t\t});\r\n\r\n\t\tthis.zoomToChartDataItem(this._homeDataItem);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * TREEMAP LAYOUT FUNCTIONS\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * The functions below are from D3.js library (https://d3js.org/)\r\n\t *\r\n\t * --------------------------------------------------------------------------\r\n\t * Copyright 2017 Mike Bostock\r\n\t *\r\n\t * Redistribution and use in source and binary forms, with or without\r\n\t * modification, are permitted provided that the following conditions are met:\r\n\t *\r\n\t * 1. Redistributions of source code must retain the above copyright notice,\r\n\t * this list of conditions and the following disclaimer.\r\n\t *\r\n\t * 2. Redistributions in binary form must reproduce the above copyright\r\n\t * notice,this list of conditions and the following disclaimer in the\r\n\t * documentation and/or other materials provided with the distribution.\r\n\t *\r\n\t * 3. Neither the name of the copyright holder nor the names of its\r\n\t * contributors may be used to endorse or promote products derived from\r\n\t * this software without specific prior written permission.\r\n\t *\r\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n\t * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n\t * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n\t * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n\t * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n\t * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n\t * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n\t * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n\t * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n\t * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n\t * POSSIBILITY OF SUCH DAMAGE.\r\n\t * --------------------------------------------------------------------------\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: binaryTree.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic binaryTree(parent: TreeMapDataItem): void {\r\n\t\tlet nodes = parent.children,\r\n\t\t\ti, n = nodes.length,\r\n\t\t\tsum, sums = new Array(n + 1);\r\n\r\n\t\tfor (sums[0] = sum = i = 0; i < n; ++i) {\r\n\t\t\tsums[i + 1] = sum += nodes.getIndex(i).value;\r\n\t\t}\r\n\r\n\t\tpartition(0, n, parent.value, parent.x0, parent.y0, parent.x1, parent.y1);\r\n\r\n\t\tfunction partition(i: number, j: number, value: number, x0: number, y0: number, x1: number, y1: number) {\r\n\t\t\tif (i >= j - 1) {\r\n\t\t\t\tlet node = nodes.getIndex(i);\r\n\t\t\t\tnode.x0 = x0, node.y0 = y0;\r\n\t\t\t\tnode.x1 = x1, node.y1 = y1;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet valueOffset = sums[i],\r\n\t\t\t\tvalueTarget = (value / 2) + valueOffset,\r\n\t\t\t\tk = i + 1,\r\n\t\t\t\thi = j - 1;\r\n\r\n\t\t\twhile (k < hi) {\r\n\t\t\t\tlet mid = k + hi >>> 1;\r\n\t\t\t\tif (sums[mid] < valueTarget) k = mid + 1;\r\n\t\t\t\telse hi = mid;\r\n\t\t\t}\r\n\r\n\t\t\tif ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k)--k;\r\n\r\n\t\t\tlet valueLeft = sums[k] - valueOffset,\r\n\t\t\t\tvalueRight = value - valueLeft;\r\n\r\n\t\t\tif ((x1 - x0) > (y1 - y0)) {\r\n\t\t\t\tlet xk = (x0 * valueRight + x1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, xk, y1);\r\n\t\t\t\tpartition(k, j, valueRight, xk, y0, x1, y1);\r\n\t\t\t} else {\r\n\t\t\t\tlet yk = (y0 * valueRight + y1 * valueLeft) / value;\r\n\t\t\t\tpartition(i, k, valueLeft, x0, y0, x1, yk);\r\n\t\t\t\tpartition(k, j, valueRight, x0, yk, x1, y1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic slice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (y1 - y0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.x0 = x0, node.x1 = x1;\r\n\t\t\tnode.y0 = y0, node.y1 = y0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: dice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic dice(parent: TreeMapDataItem): void {\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children,\r\n\t\t\tnode,\r\n\t\t\ti = -1,\r\n\t\t\tn = nodes.length,\r\n\t\t\tk = parent.value && (x1 - x0) / parent.value;\r\n\r\n\t\twhile (++i < n) {\r\n\t\t\tnode = nodes.getIndex(i), node.y0 = y0, node.y1 = y1;\r\n\t\t\tnode.x0 = x0, node.x1 = x0 += node.value * k;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: slideDice.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic sliceDice(parent: TreeMapDataItem): void {\r\n\t\tparent.level & 1 ? this.slice(parent) : this.dice(parent);\r\n\t}\r\n\r\n\t/**\r\n\t * Treemap layout algorithm: squarify.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {TreeMapDataItem} parent Data item\r\n\t */\r\n\tpublic squarify(parent: TreeMapDataItem): void {\r\n\t\tlet ratio = (1 + Math.sqrt(5)) / 2;\r\n\r\n\t\tlet x0 = parent.x0;\r\n\t\tlet x1 = parent.x1;\r\n\t\tlet y0 = parent.y0;\r\n\t\tlet y1 = parent.y1;\r\n\r\n\t\tlet nodes = parent.children;\r\n\t\tlet nodeValue;\r\n\t\tlet i0 = 0;\r\n\t\tlet i1 = 0;\r\n\t\tlet n = nodes.length;\r\n\t\tlet dx;\r\n\t\tlet dy;\r\n\t\tlet value = parent.value;\r\n\t\tlet sumValue;\r\n\t\tlet minValue;\r\n\t\tlet maxValue;\r\n\t\tlet newRatio;\r\n\t\tlet minRatio;\r\n\t\tlet alpha;\r\n\t\tlet beta;\r\n\r\n\t\twhile (i0 < n) {\r\n\t\t\tdx = x1 - x0, dy = y1 - y0;\r\n\r\n\t\t\t// Find the next non-empty node.\r\n\t\t\tdo sumValue = nodes.getIndex(i1++).value; while (!sumValue && i1 < n);\r\n\t\t\tminValue = maxValue = sumValue;\r\n\t\t\talpha = Math.max(dy / dx, dx / dy) / (value * ratio);\r\n\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\tminRatio = Math.max(maxValue / beta, beta / minValue);\r\n\r\n\t\t\t// Keep adding nodes while the aspect ratio maintains or improves.\r\n\t\t\tfor (; i1 < n; ++i1) {\r\n\t\t\t\tsumValue += nodeValue = nodes.getIndex(i1).value;\r\n\t\t\t\tif (nodeValue < minValue) {\r\n\t\t\t\t\tminValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tif (nodeValue > maxValue) {\r\n\t\t\t\t\tmaxValue = nodeValue;\r\n\t\t\t\t}\r\n\t\t\t\tbeta = sumValue * sumValue * alpha;\r\n\t\t\t\tnewRatio = Math.max(maxValue / beta, beta / minValue);\r\n\t\t\t\tif (newRatio > minRatio) {\r\n\t\t\t\t\tsumValue -= nodeValue; break;\r\n\t\t\t\t}\r\n\t\t\t\tminRatio = newRatio;\r\n\t\t\t}\r\n\r\n\t\t\t// Position and record the row orientation.\r\n\t\t\tlet row = this.dataItems.template.clone();\r\n\t\t\trow.value = sumValue;\r\n\t\t\trow.dice = dx < dy;\r\n\t\t\trow.children = nodes.slice(i0, i1);\r\n\t\t\trow.x0 = x0;\r\n\t\t\trow.y0 = y0;\r\n\t\t\trow.x1 = x1;\r\n\t\t\trow.y1 = y1;\r\n\r\n\t\t\tif (row.dice) {\r\n\t\t\t\trow.y1 = value ? y0 += dy * sumValue / value : y1;\r\n\t\t\t\tthis.dice(row);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\trow.x1 = value ? x0 += dx * sumValue / value : x1, y1;\r\n\t\t\t\tthis.slice(row);\r\n\t\t\t}\r\n\t\t\tvalue -= sumValue, i0 = i1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [handleDataItemValueChange description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic handleDataItemValueChange(dataItem?: this[\"_dataItem\"], name?:string): void {\r\n\t\tif(name == \"value\"){\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\tpublic handleDataItemWorkingValueChange(dataItem?: this[\"_dataItem\"], name?:string): void {\r\n\t\tif(name == \"value\"){\r\n\t\t\tthis.invalidateDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Setups the legend to use the chart's data.\r\n\t * @ignore\r\n\t */\r\n\tpublic feedLegend(): void {\r\n\t\tlet legend = this.legend;\r\n\t\tif (legend) {\r\n\t\t\tlet legendData: Array = [];\r\n\r\n\t\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\t\tif (series.level == 1) {\r\n\t\t\t\t\tif (!series.hiddenInLegend) {\r\n\t\t\t\t\t\tlegendData.push(series);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tlegend.dataFields.name = \"name\";\r\n\t\t\tlegend.data = legendData;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic disposeData() {\r\n\r\n\t\tsuper.disposeData();\r\n\r\n\t\tthis._homeDataItem = undefined;\r\n\r\n\t\tthis.series.clear();\r\n\r\n\t\tif (this.navigationBar) {\r\n\t\t\tthis.navigationBar.disposeData();\r\n\t\t}\r\n\r\n\t\tthis.xAxis.disposeData();\r\n\t\tthis.yAxis.disposeData();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"TreeMap\"] = TreeMap;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/TreeMap.ts","/**\r\n * Module, defining Axis Renderer for horizontal 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererX, IAxisRendererXProperties, IAxisRendererXAdapters, IAxisRendererXEvents } from \"../axes/AxisRendererX\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DProperties extends IAxisRendererXProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererX3D]].\r\n */\r\nexport interface IAxisRendererX3DEvents extends IAxisRendererXEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererX3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererX3DAdapters extends IAxisRendererXAdapters, IAxisRendererX3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for horizontal 3D axis.\r\n *\r\n * @see {@link IAxisRendererX3DEvents} for a list of available events\r\n * @see {@link IAxisRendererX3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererX3D extends AxisRendererX {\r\n\r\n\t/**\r\n\t * Defines available properties\r\n\t * @type {IAxisRendererX3DProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererX3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters\r\n\t * @type {AxisRendererAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererX3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererX3DEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererX3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererX3D\";\r\n\r\n\t\tthis._disposers.push(this._chart);\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Grid} grid Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number) {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet h: number = this.getHeight();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement() {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet h = this.getHeight();\r\n\t\tlet dx = this.chart.dx3D;\r\n\t\tlet dy = this.chart.dy3D;\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: dx, y: dy }) + $path.lineTo({ x: dx, y: h + dy }) + $path.lineTo({ x: 0, y: h });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {XYChart3D} value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {XYChart3D} Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param {AMEvent[\"propertychanged\"]} event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"AxisRendererX3D\"] = AxisRendererX3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererX3D.ts","/**\r\n * Module, defining Axis Renderer for vertical 3D axes.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { AxisRendererY, IAxisRendererYProperties, IAxisRendererYAdapters, IAxisRendererYEvents } from \"../axes/AxisRendererY\";\r\nimport { Sprite, ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Axis } from \"../axes/Axis\";\r\nimport { Grid } from \"../axes/Grid\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { MutableValueDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DProperties extends IAxisRendererYProperties { }\r\n\r\n/**\r\n * Defines events for [[AxisRendererY3D]].\r\n */\r\nexport interface IAxisRendererY3DEvents extends IAxisRendererYEvents { }\r\n\r\n/**\r\n * Defines adapters for [[AxisRendererY3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IAxisRendererY3DAdapters extends IAxisRendererYAdapters, IAxisRendererY3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Renderer for vertical 3D axis.\r\n *\r\n * @see {@link IAxisRendererY3DEvents} for a list of available events\r\n * @see {@link IAxisRendererY3DAdapters} for a list of available Adapters\r\n */\r\nexport class AxisRendererY3D extends AxisRendererY {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IAxisRendererY3DProperties}\r\n\t */\r\n\tpublic _properties!: IAxisRendererY3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IAxisRendererY3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IAxisRendererY3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IAxisRendererY3DEvents}\r\n\t */\r\n\tpublic _events!: IAxisRendererY3DEvents;\r\n\r\n\t/**\r\n\t * A related chart.\r\n\t *\r\n\t * @todo Description\r\n\t * @type {MutableValueDisposer}\r\n\t */\r\n\tprotected _chart = new MutableValueDisposer();\r\n\r\n\t/**\r\n\t * Constructor.\r\n\t *\r\n\t * @param {Axis} axis Related axis\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"AxisRendererY3D\";\r\n\t\tthis._disposers.push(this._chart);\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions a grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Grid} grid Grid element\r\n\t * @param {number} position Starting position\r\n\t * @param {number} endPosition End position\r\n\t */\r\n\tpublic updateGridElement(grid: Grid, position: number, endPosition: number): void {\r\n\t\tposition = position + (endPosition - position) * grid.location;\r\n\r\n\t\tlet point: IPoint = this.positionToPoint(position);\r\n\t\tif (grid.element) {\r\n\r\n\t\t\tlet dx: number = this.chart.dx3D;\r\n\t\t\tlet dy: number = this.chart.dy3D;\r\n\r\n\t\t\tlet w: number = this.getWidth();\r\n\r\n\t\t\tgrid.path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy });\r\n\t\t}\r\n\t\tthis.positionItem(grid, point);\r\n\r\n\t\tthis.toggleVisibility(grid, position, 0, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Updates and positions the base grid element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateBaseGridElement(): void {\r\n\t\tsuper.updateBaseGridElement();\r\n\r\n\t\tlet w: number = this.getWidth();\r\n\t\tthis.baseGrid.path = $path.moveTo({ x: 0, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w, y: 0 })\r\n\t\t\t\t+ $path.lineTo({ x: w + this.chart.dx3D, y: this.chart.dy3D });\r\n\t}\r\n\r\n\t/**\r\n\t * Chart, associated with the Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {XYChart3D} value Chart\r\n\t */\r\n\tpublic set chart(chart: XYChart3D) {\r\n\t\tif (chart) {\r\n\t\t\tthis._chart.set(chart, chart.events.on(\"propertychanged\", this.handle3DChanged, this, false));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {XYChart3D} Chart\r\n\t */\r\n\tpublic get chart(): XYChart3D {\r\n\t\treturn this._chart.get();\r\n\t}\r\n\r\n\t/**\r\n\t * Invoked when 3D-related settings change, like depth or angle.\r\n\t *\r\n\t * @param {AMEvent[\"propertychanged\"]} event Event\r\n\t */\r\n\tprotected handle3DChanged(event: AMEvent[\"propertychanged\"]): void {\r\n\t\tif (event.property == \"depth\" || event.property == \"angle\") {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/axes/AxisRendererY3D.ts","/**\r\n * 3D column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { XYChart3D } from \"../types/XYChart3D\";\r\nimport { Column3D } from \"../elements/Column3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\nexport class ColumnSeries3DDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {Column3D}\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeries3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DProperties extends IColumnSeriesProperties {\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number}\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number}\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[ColumnSeries3D]].\r\n */\r\nexport interface IColumnSeries3DEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ColumnSeries3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IColumnSeries3DAdapters extends IColumnSeriesAdapters, IColumnSeries3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IColumnSeries3DEvents} for a list of available Events\r\n * @see {@link IColumnSeries3DAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ColumnSeries3D extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ColumnSeries3DDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Column3D;\r\n\r\n\t/**\r\n\t * Defines the type for data fields.\r\n\t *\r\n\t * @type {IColumnSeries3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IColumnSeries3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IColumnSeries3DProperties}\r\n\t */\r\n\tpublic _properties!: IColumnSeries3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IColumnSeries3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IColumnSeries3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IColumnSeries3DEvents}\r\n\t */\r\n\tpublic _events!: IColumnSeries3DEvents;\r\n\r\n\t/**\r\n\t * Specifies how deep in 3d space columns should be drawn.\r\n\t *\r\n\t * Internal use only.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {number}\r\n\t */\r\n\tpublic depthIndex: number;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {XYChart3D}\r\n\t */\r\n\tpublic _chart: XYChart3D;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ColumnSeries3D\";\r\n\r\n\t\tthis.columns.template.column3D.applyOnClones = true;\r\n\t\tthis.columns.template.hiddenState.properties.visible = true;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get columnsContainer(): Container {\r\n\t\tif (this.chart && this.chart.columnsContainer) {\r\n\t\t\treturn this.chart.columnsContainer;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._columnsContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tif(dataItem.column){\r\n\t\t\tdataItem.column.dx = this.dx;\r\n\t\t\tdataItem.column.dy = this.dy;\r\n\t\t}\r\n\t}\t\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\t\tsuper.validateDataElements();\r\n\t\tif(this.chart){\r\n\t\t\tthis.chart.invalidateLayout();\t\r\n\t\t}\t\t\r\n\t}\t\t\r\n\r\n\t/**\r\n\t * Returns an element to use for 3D bar.\r\n\t * @ignore\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Column3D();\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Depth (height) of the slices in the series in pixels.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value, true);\r\n\t\tlet template = this.columns.template; // todo: Cone is not Rectangle3D, maybe we should do some I3DShape?\r\n\t\ttemplate.column3D.depth = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle of view for the slices in series. (0-360)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {number} value Angle (0-360)\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tlet template = this.columns.template;\r\n\t\ttemplate.column3D.angle = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return {number} Angle (0-360)\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ColumnSeries3D\"] = ColumnSeries3D;\r\nregistry.registeredClasses[\"ColumnSeries3DDataItem\"] = ColumnSeries3DDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ColumnSeries3D.ts","/**\r\n * Module for building 3D serial charts.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * Imports\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { XYChart, IXYChartProperties, IXYChartDataFields, IXYChartAdapters, IXYChartEvents, XYChartDataItem } from \"./XYChart\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { AxisRendererX3D } from \"../axes/AxisRendererX3D\";\r\nimport { AxisRendererY3D } from \"../axes/AxisRendererY3D\";\r\nimport { ColumnSeries3D } from \"../series/ColumnSeries3D\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[XYChart3D]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class XYChart3DDataItem extends XYChartDataItem {\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3DDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DDataFields extends IXYChartDataFields { }\r\n\r\n/**\r\n * Defines available properties for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DProperties extends IXYChartProperties {\r\n\r\n\t/**\r\n\t * Depths of the chart in pixels.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tdepth?: number;\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tangle?: number;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[XYChart3D]].\r\n */\r\nexport interface IXYChart3DEvents extends IXYChartEvents { }\r\n\r\n/**\r\n * Defines adapters for [[XYChart3D]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IXYChart3DAdapters extends IXYChartAdapters, IXYChart3DProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Creates a 3D XY chart.\r\n *\r\n * @see {@link IXYChart3DEvents} for a list of available Events\r\n * @see {@link IXYChart3DAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/xy-chart/} for documentation\r\n * @important\r\n */\r\nexport class XYChart3D extends XYChart {\r\n\r\n\t/**\r\n\t * Available data fields.\r\n\t *\r\n\t * @type {IXYChart3DDataFields}\r\n\t */\r\n\tpublic _dataFields: IXYChart3DDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IXYChart3DProperties}\r\n\t */\r\n\tpublic _properties!: IXYChart3DProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IXYChart3DAdapters}\r\n\t */\r\n\tpublic _adapter!: IXYChart3DAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IXYChart3DEvents}\r\n\t */\r\n\tpublic _events!: IXYChart3DEvents;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for X axes.\r\n\t *\r\n\t * @type {[type]}\r\n\t */\r\n\tprotected _axisRendererX: typeof AxisRendererX3D = AxisRendererX3D;\r\n\r\n\t/**\r\n\t * Type of the axis renderer to use for Y axes.\r\n\t * @type {[type]}\r\n\t */\r\n\tprotected _axisRendererY: typeof AxisRendererY3D = AxisRendererY3D;\r\n\r\n\t/**\r\n\t * A container to add 3D column elements to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Container}\r\n\t */\r\n\tpublic columnsContainer: Container;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"XYChart3D\";\r\n\r\n\t\t// Set defaults\r\n\t\tthis.depth = 30;\r\n\t\tthis.angle = 30;\r\n\r\n\t\t// Creeate container for columns\r\n\t\tlet columnsContainer = this.seriesContainer.createChild(Container);\r\n\t\tcolumnsContainer.shouldClone = false;\r\n\t\tcolumnsContainer.isMeasured = false;\r\n\t\tcolumnsContainer.layout = \"none\";\r\n\t\tthis.columnsContainer = columnsContainer;\r\n\r\n\t\tthis.columnsContainer.mask = this.createChild(Sprite);\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Depth of the 3D chart / columns in pixels.\r\n\t *\r\n\t * @param {number} value Depth (px)\r\n\t */\r\n\tpublic set depth(value: number) {\r\n\t\tthis.setPropertyValue(\"depth\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Depth (px)\r\n\t */\r\n\tpublic get depth(): number {\r\n\t\treturn this.getPropertyValue(\"depth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Angle the chart is viewed at.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param {number} value Angle\r\n\t */\r\n\tpublic set angle(value: number) {\r\n\t\tthis.setPropertyValue(\"angle\", value);\r\n\t\tthis.fixLayout();\r\n\t\tthis.invalidateDataUsers();\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Angle\r\n\t */\r\n\tpublic get angle(): number {\r\n\t\treturn this.getPropertyValue(\"angle\");\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated horizontal 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Offset (px)\r\n\t */\r\n\tpublic get dx3D(): number {\r\n\t\treturn $math.cos(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * A calculated vertical 3D offset (px).\r\n\t *\r\n\t * @readonly\r\n\t * @return {number} Offset (px)\r\n\t */\r\n\tpublic get dy3D(): number {\r\n\t\treturn -$math.sin(this.angle) * this.depth;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates layout\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateLayout() {\r\n\t\tsuper.validateLayout();\r\n\t\tthis.fixLayout();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the layout (padding and scrollbar positions) to accommodate for\r\n\t * 3D depth and angle.\r\n\t */\r\n\tprotected fixLayout(): void {\r\n\t\tthis.chartContainer.marginTop = -this.dy3D;\r\n\t\tthis.chartContainer.paddingRight = this.dx3D;\r\n\r\n\t\tif (this.scrollbarX) {\r\n\t\t\tthis.scrollbarX.dy = this.dy3D;\r\n\t\t\tthis.scrollbarX.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tif (this.scrollbarY) {\r\n\t\t\tthis.scrollbarY.dy = this.dy3D;\r\n\t\t\tthis.scrollbarY.dx = this.dx3D;\r\n\t\t}\r\n\r\n\t\tthis.fixColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates column positions, offset and dimensions based on chart's angle\r\n\t * and depth.\r\n\t */\r\n\tprotected fixColumns(): void {\r\n\t\tlet count: number = 1;\r\n\t\tlet i = 0;\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tif (!series.clustered && i > 0) {\r\n\t\t\t\t\tcount++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tseries.depthIndex = count - 1;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet s: number = 0;\r\n\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series instanceof ColumnSeries3D) {\r\n\r\n\t\t\t\tseries.depth = this.depth / (count );\r\n\t\t\t\tseries.angle = this.angle;\r\n\t\t\t\tseries.dx = this.depth / (count) * $math.cos(this.angle) * (series.depthIndex);\r\n\t\t\t\tseries.dy = -this.depth / (count) * $math.sin(this.angle) * (series.depthIndex);\r\n\r\n\t\t\t\tlet i: number = 1;\r\n\t\t\t\tseries.columns.each((column) => {\r\n\t\t\t\t\tcolumn.zIndex = 1000 * i + s - series.depthIndex * 100;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t});\r\n\r\n\t\t\t\ts++;\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis.maskColumns();\r\n\t}\r\n\r\n\t/**\r\n\t * Processes JSON-based config before it is applied to the object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {object} config Config\r\n\t */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Set up series\r\n\t\t\tif ($type.hasValue(config.series) && $type.isArray(config.series)) {\r\n\t\t\t\tfor (let i = 0, len = config.series.length; i < len; i++) {\r\n\t\t\t\t\tconfig.series[i].type = config.series[i].type || \"ColumnSeries3D\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t}\r\n\r\n\tprotected maskColumns() {\r\n\t\tlet w: number = this.plotContainer.pixelWidth;\r\n\t\tlet h: number = this.plotContainer.pixelHeight;\r\n\r\n\t\tlet dx: number = this.dx3D;\r\n\t\tlet dy: number = this.dy3D;\r\n\r\n\t\tlet path = $path.moveTo({ x: 0, y: 0 }) + $path.lineTo({ x: dx, y: dy }) + $path.lineTo({ x: w + dx, y: dy }) + $path.lineTo({ x: w + dx, y: h + dy }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: w, y: h }) + $path.lineTo({ x: 0, y: h }) + $path.closePath();\r\n\r\n\t\tlet columnsContainer = this.columnsContainer;\r\n\t\tif (columnsContainer && columnsContainer.mask) {\r\n\t\t\tcolumnsContainer.mask.path = path;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"XYChart3D\"] = XYChart3D;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/types/XYChart3D.ts","/**\r\n * Module that defines everything related to building Candlesticks.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Candlestick]].\r\n */\r\nexport interface ICandlestickProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[Candlestick]].\r\n */\r\nexport interface ICandlestickEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[Candlestick]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickAdapters extends IColumnAdapters, ICandlestickProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates Candlesticks.\r\n *\r\n * @see {@link ICandlestickEvents} for a list of available events\r\n * @see {@link ICandlestickAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class Candlestick extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICandlestickProperties}\r\n\t */\r\n\tpublic _properties!: ICandlestickProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICandlestickAdapters}\r\n\t */\r\n\tpublic _adapter!: ICandlestickAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICandlestickEvents}\r\n\t */\r\n\tpublic _events!: ICandlestickEvents;\r\n\r\n\t/**\r\n\t * Low line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic lowLine: Line;\r\n\r\n\t/**\r\n\t * High line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic highLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"Candlestick\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tsuper.createAssets();\r\n\r\n\t\tthis.lowLine = this.createChild(Line);\r\n\t\tthis.lowLine.shouldClone = false;\r\n\r\n\t\tthis.highLine = this.createChild(Line);\r\n\t\tthis.highLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Candlestick]].\r\n\t *\r\n\t * @param {Candlestick} source Source Candlestick\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.lowLine) {\r\n\t\t\tthis.lowLine.copyFrom(source.lowLine);\r\n\t\t}\r\n\t\tif (this.highLine) {\r\n\t\t\tthis.highLine.copyFrom(source.highLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Candlestick\"] = Candlestick;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/Candlestick.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, ColumnSeriesDataItem, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents } from \"./ColumnSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Candlestick } from \"../elements/Candlestick\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport { LegendDataItem } from \"../../charts/Legend\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CandlestickSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CandlestickSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {Candlestick}\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {CandlestickSeries}\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: CandlestickSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.values.lowValueX = {};\r\n\t\tthis.values.lowValueY = {};\r\n\t\tthis.values.highValueX = {};\r\n\t\tthis.values.highValueY = {};\r\n\r\n\t\tthis.className = \"CandlestickSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for horizontal axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set lowValueX(value: number) {\r\n\t\tthis.setValue(\"lowValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get lowValueX(): number {\r\n\t\treturn this.values.lowValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Low value for vertical axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set lowValueY(value: number) {\r\n\t\tthis.setValue(\"lowValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get lowValueY(): number {\r\n\t\treturn this.values.lowValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for horizontal axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set highValueX(value: number) {\r\n\t\tthis.setValue(\"highValueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get highValueX(): number {\r\n\t\treturn this.values.highValueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * High value for vertical axis.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set highValueY(value: number) {\r\n\t\tthis.setValue(\"highValueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get highValueY(): number {\r\n\t\treturn this.values.highValueY.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for horizontal axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set closeValueX(value: number) {\r\n\t\tthis.setValue(\"valueX\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get closeValueX(): number {\r\n\t\treturn this.values.valueX.value;\r\n\t}\r\n\r\n\t/**\r\n\t * Close value for vertical axis.\r\n\t *\r\n\t * This is an alias for `valueX` added for convenience only.\r\n\t *\r\n\t * @param {number} value Value\r\n\t */\r\n\tpublic set closeValueY(value: number) {\r\n\t\tthis.setValue(\"valueY\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Value\r\n\t */\r\n\tpublic get closeValueY(): number {\r\n\t\treturn this.values.valueY.value;\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesDataFields extends IColumnSeriesDataFields {\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for horizontal axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlowValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlowValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high numeric value for horizontal axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\thighValueX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low numeric value for vertical axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\thighValueY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for horizontal axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlowDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds low date for vertical axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\tlowDateY?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for horizontal axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\thighDateX?: string;\r\n\r\n\t/**\r\n\t * Field name in data which holds high date for vertical axis.\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\thighDateY?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CandlestickSeries]].\r\n */\r\nexport interface ICandlestickSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CandlestickSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICandlestickSeriesAdapters extends IColumnSeriesAdapters, ICandlestickSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link ICandlestickSeriesEvents} for a list of available Events\r\n * @see {@link ICandlestickSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class CandlestickSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {CandlestickSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: CandlestickSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: Candlestick;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {ICandlestickSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ICandlestickSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICandlestickSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ICandlestickSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICandlestickSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ICandlestickSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICandlestickSeriesEvents}\r\n\t */\r\n\tpublic _events!: ICandlestickSeriesEvents;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t */\r\n\tprotected _xLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t */\r\n\tprotected _yLowField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t */\r\n\tprotected _xHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t */\r\n\tprotected _yHighField: $type.Keyof;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CandlestickSeries\";\r\n\r\n\t\tthis.strokeOpacity = 1;\r\n\r\n\t\tlet interfaceColors = new InterfaceColorSet();\r\n\t\tlet positiveColor = interfaceColors.getFor(\"positive\");\r\n\t\tlet negativeColor = interfaceColors.getFor(\"negative\");\r\n\r\n\t\tthis.dropFromOpenState.properties.fill = negativeColor;\r\n\t\tthis.dropFromOpenState.properties.stroke = negativeColor;\r\n\r\n\t\tthis.riseFromOpenState.properties.fill = positiveColor;\r\n\t\tthis.riseFromOpenState.properties.stroke = positiveColor;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Candlestick Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {CandlestickSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new CandlestickSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {CandlestickSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tthis.validateCandlestick(dataItem);\r\n\t}\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"dataItem\"]) {\r\n\t\tlet column: Candlestick = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet lowLine = column.lowLine;\r\n\t\t\tlet highLine = column.highLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\r\n\t\t\t\tlowLine.x = x;\r\n\t\t\t\thighLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\tlowLine.y1 = yLow - pixelY;\r\n\t\t\t\thighLine.y1 = yHigh - pixelY;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.y2 = yOpen - pixelY;\r\n\t\t\t\t\thighLine.y2 = yClose - pixelY;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.y2 = yClose - pixelY;\r\n\t\t\t\t\thighLine.y2 = yOpen - pixelY;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\tlowLine.y = y;\r\n\t\t\t\thighLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\tlowLine.x1 = xLow - pixelX;\r\n\t\t\t\thighLine.x1 = xHigh - pixelX;\r\n\r\n\t\t\t\tif (open < close) {\r\n\t\t\t\t\tlowLine.x2 = xOpen - pixelX;\r\n\t\t\t\t\thighLine.x2 = xClose - pixelX;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tlowLine.x2 = xClose - pixelX;\r\n\t\t\t\t\thighLine.x2 = xOpen - pixelX;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\t// LOW LINE\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeLowLine = rangeColumn.lowLine;\r\n\t\t\t\t\trangeLowLine.x = lowLine.x;\r\n\t\t\t\t\trangeLowLine.y = lowLine.y;\r\n\t\t\t\t\trangeLowLine.x1 = lowLine.x1;\r\n\t\t\t\t\trangeLowLine.x2 = lowLine.x2;\r\n\t\t\t\t\trangeLowLine.y1 = lowLine.y1;\r\n\t\t\t\t\trangeLowLine.y2 = lowLine.y2;\r\n\r\n\t\t\t\t\t// HIGH LINE\r\n\t\t\t\t\tlet rangehighLine = rangeColumn.highLine;\r\n\t\t\t\t\trangehighLine.x = highLine.x;\r\n\t\t\t\t\trangehighLine.y = highLine.y;\r\n\t\t\t\t\trangehighLine.x1 = highLine.x1;\r\n\t\t\t\t\trangehighLine.x2 = highLine.x2;\r\n\t\t\t\t\trangehighLine.y1 = highLine.y1;\r\n\t\t\t\t\trangehighLine.y2 = highLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic get xLowField(): string {\r\n\t\treturn this._xLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"low\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic get yLowField(): string {\r\n\t\treturn this._yLowField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for horizontal axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic get xHighField(): string {\r\n\t\treturn this._xHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * A data field to look for \"high\" value for vertical axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return {string} Field name\r\n\t */\r\n\tpublic get yHighField(): string {\r\n\t\treturn this._yHighField;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up which data fields to use for data access.\r\n\t */\r\n\tprotected defineFields() {\r\n\t\tsuper.defineFields();\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\tlet yAxisFieldName: string = $utils.capitalize(this.yAxis.axisFieldName);\r\n\t\t\tthis._yLowField = <$type.Keyof>(\"low\" + yAxisFieldName + \"Y\");\r\n\t\t\tthis._yHighField = <$type.Keyof>(\"high\" + yAxisFieldName + \"Y\");\r\n\t\t}\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tlet xAxisFieldName: string = $utils.capitalize(this.xAxis.axisFieldName);\r\n\t\t\tthis._xLowField = <$type.Keyof>(\"low\" + xAxisFieldName + \"X\");\r\n\t\t\tthis._xHighField = <$type.Keyof>(\"high\" + xAxisFieldName + \"X\");\r\n\t\t}\r\n\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xLowField);\r\n\t\tthis.addValueField(this.xAxis, this._xValueFields, this._xHighField);\r\n\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yLowField);\r\n\t\tthis.addValueField(this.yAxis, this._yValueFields, this._yHighField);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: Candlestick = marker.createChild(Candlestick);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet highLine: Line = column.lowLine;\r\n\t\tlet lowLine: Line = column.highLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLine.y = h / 2;\r\n\t\t\tlowLine.y = h / 2;\r\n\r\n\t\t\thighLine.x2 = w / 3;\r\n\t\t\tlowLine.x2 = w / 3;\r\n\t\t\tlowLine.x = w / 3 * 2;\r\n\t\t\tcolumn.column.x = w / 3;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\t\t\thighLine.x = w / 2;\r\n\t\t\tlowLine.x = w / 2;\r\n\r\n\t\t\thighLine.y2 = h / 3;\r\n\t\t\tlowLine.y2 = h / 3;\r\n\t\t\tlowLine.y = h / 3 * 2;\r\n\t\t\tcolumn.column.y = h / 3;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\t\tcolumn.fill = column.stroke;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.fill;\r\n\t\tlegendDataItem.colorOrig = column.fill;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new Candlestick();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CandlestickSeries\"] = CandlestickSeries;\r\nregistry.registeredClasses[\"CandlestickSeriesDataItem\"] = CandlestickSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CandlestickSeries.ts","/**\r\n * Module that defines everything related to building OHLCs.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Candlestick, ICandlestickProperties, ICandlestickAdapters, ICandlestickEvents } from \"./Candlestick\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[OHLC]].\r\n */\r\nexport interface IOHLCProperties extends ICandlestickProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLC]].\r\n */\r\nexport interface IOHLCEvents extends ICandlestickEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLC]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCAdapters extends ICandlestickAdapters, IOHLCProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates OHLCs.\r\n *\r\n * @see {@link IOHLCEvents} for a list of available events\r\n * @see {@link IOHLCAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class OHLC extends Candlestick {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IOHLCProperties}\r\n\t */\r\n\tpublic _properties!: IOHLCProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IOHLCAdapters}\r\n\t */\r\n\tpublic _adapter!: IOHLCAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IOHLCEvents}\r\n\t */\r\n\tpublic _events!: IOHLCEvents;\r\n\r\n\r\n\t/**\r\n\t * Open line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic openLine: Line;\r\n\r\n\t/**\r\n\t * Close line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic closeLine: Line;\r\n\r\n\t/**\r\n\t * High-low line element\r\n\t * @type {Line}\r\n\t */\r\n\tpublic highLowLine: Line;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLC\";\r\n\t\tthis.layout = \"none\";\r\n\t}\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\t//super.createAssets();\r\n\r\n\t\tthis.openLine = this.createChild(Line);\r\n\t\tthis.openLine.shouldClone = false;\r\n\r\n\t\tthis.highLowLine = this.createChild(Line);\r\n\t\tthis.highLowLine.shouldClone = false;\r\n\r\n\t\tthis.closeLine = this.createChild(Line);\r\n\t\tthis.closeLine.shouldClone = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[OHLC]].\r\n\t *\r\n\t * @param {OHLC} source Source OHLC\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.openLine) {\r\n\t\t\tthis.openLine.copyFrom(source.openLine);\r\n\t\t}\r\n\t\tif (this.highLowLine) {\r\n\t\t\tthis.highLowLine.copyFrom(source.highLowLine);\r\n\t\t}\r\n\t\tif (this.closeLine) {\r\n\t\t\tthis.closeLine.copyFrom(source.closeLine);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLC\"] = OHLC;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/OHLC.ts","/**\r\n * Candlestick Series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { CandlestickSeries, CandlestickSeriesDataItem, ICandlestickSeriesDataFields, ICandlestickSeriesProperties, ICandlestickSeriesAdapters, ICandlestickSeriesEvents } from \"./CandlestickSeries\";\r\nimport { visualProperties } from \"../../core/Sprite\";\r\nimport { Line } from \"../../core/elements/Line\";\r\nimport { ListTemplate } from \"../../core/utils/List\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { OHLC } from \"../elements/OHLC\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { InterfaceColorSet } from \"../../core/utils/InterfaceColorSet\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $type from \"../../core/utils/Type\";\r\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 * @type {OHLC}\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for\r\n\t * @type {OHLCSeries}\r\n\t * @todo Disabled to work around TS bug (see if we can re-enable it again)\r\n\t */\r\n\t//public _component!: OHLCSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"OHLCSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesDataFields extends ICandlestickSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesProperties extends ICandlestickSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[OHLCSeries]].\r\n */\r\nexport interface IOHLCSeriesEvents extends ICandlestickSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[OHLCSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IOHLCSeriesAdapters extends ICandlestickSeriesAdapters, IOHLCSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a candlestick graph.\r\n *\r\n * @see {@link IOHLCSeriesEvents} for a list of available Events\r\n * @see {@link IOHLCSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class OHLCSeries extends CandlestickSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {OHLCSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: OHLCSeriesDataItem;\r\n\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: OHLC;\r\n\r\n\t/**\r\n\t * Defines available data fields.\r\n\t *\r\n\t * @type {IOHLCSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IOHLCSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IOHLCSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IOHLCSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IOHLCSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IOHLCSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IOHLCSeriesEvents}\r\n\t */\r\n\tpublic _events!: IOHLCSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"OHLCSeries\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"OHLC Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {OHLCSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new OHLCSeriesDataItem();\r\n\t}\r\n\r\n\r\n\tprotected validateCandlestick(dataItem: this[\"_dataItem\"]) {\r\n\t\tlet column: OHLC = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet openLine = column.openLine;\r\n\t\t\tlet highLowLine = column.highLowLine;\r\n\t\t\tlet closeLine = column.closeLine;\r\n\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tlet x: number = column.pixelWidth / 2;\r\n\t\t\t\thighLowLine.x = x;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.yOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.yField);\r\n\r\n\t\t\t\tlet yOpen = this.yAxis.getY(dataItem, this.yOpenField);\r\n\t\t\t\tlet yClose = this.yAxis.getY(dataItem, this.yField);\r\n\t\t\t\tlet yLow = this.yAxis.getY(dataItem, this.yLowField);\r\n\t\t\t\tlet yHigh = this.yAxis.getY(dataItem, this.yHighField);\r\n\r\n\t\t\t\tlet pixelY = column.pixelY;\r\n\r\n\t\t\t\topenLine.y1 = yOpen - pixelY;\r\n\t\t\t\topenLine.y2 = yOpen - pixelY;\r\n\t\t\t\topenLine.x1 = 0;\r\n\t\t\t\topenLine.x2 = x;\r\n\r\n\t\t\t\tcloseLine.y1 = yClose - pixelY;\r\n\t\t\t\tcloseLine.y2 = yClose - pixelY;\r\n\t\t\t\tcloseLine.x1 = x;\r\n\t\t\t\tcloseLine.x2 = 2 * x;\r\n\r\n\t\t\t\thighLowLine.y1 = yHigh - pixelY;\r\n\t\t\t\thighLowLine.y2 = yLow - pixelY;\r\n\r\n\t\t\t}\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tlet y: number = column.pixelHeight / 2;\r\n\r\n\t\t\t\thighLowLine.y = y;\r\n\r\n\t\t\t\tlet open = dataItem.getWorkingValue(this.xOpenField);\r\n\t\t\t\tlet close = dataItem.getWorkingValue(this.xField);\r\n\r\n\t\t\t\tlet xOpen = this.xAxis.getX(dataItem, this.xOpenField);\r\n\t\t\t\tlet xClose = this.xAxis.getX(dataItem, this.xField);\r\n\t\t\t\tlet xLow = this.xAxis.getX(dataItem, this.xLowField);\r\n\t\t\t\tlet xHigh = this.xAxis.getX(dataItem, this.xHighField);\r\n\r\n\t\t\t\tlet pixelX = column.pixelX;\r\n\r\n\t\t\t\topenLine.x1 = xOpen - pixelX;\r\n\t\t\t\topenLine.x2 = xOpen - pixelX;\r\n\t\t\t\topenLine.y1 = y;\r\n\t\t\t\topenLine.y2 = 2 * y;\r\n\r\n\t\t\t\tcloseLine.x1 = xClose - pixelX;\r\n\t\t\t\tcloseLine.x2 = xClose - pixelX;\r\n\t\t\t\tcloseLine.y1 = 0;\r\n\t\t\t\tcloseLine.y2 = y;\r\n\r\n\t\t\t\thighLowLine.x1 = xHigh - pixelX;\r\n\t\t\t\thighLowLine.x2 = xLow - pixelX;\r\n\t\t\t}\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (rangeColumn) {\r\n\t\t\t\t\tlet rangeOpenLine = rangeColumn.openLine;\r\n\t\t\t\t\trangeOpenLine.x = openLine.x;\r\n\t\t\t\t\trangeOpenLine.y = openLine.y;\r\n\t\t\t\t\trangeOpenLine.x1 = openLine.x1;\r\n\t\t\t\t\trangeOpenLine.x2 = openLine.x2;\r\n\t\t\t\t\trangeOpenLine.y1 = openLine.y1;\r\n\t\t\t\t\trangeOpenLine.y2 = openLine.y2;\r\n\r\n\t\t\t\t\tlet rangeCloseLine = rangeColumn.closeLine;\r\n\t\t\t\t\trangeCloseLine.x = closeLine.x;\r\n\t\t\t\t\trangeCloseLine.y = closeLine.y;\r\n\t\t\t\t\trangeCloseLine.x1 = closeLine.x1;\r\n\t\t\t\t\trangeCloseLine.x2 = closeLine.x2;\r\n\t\t\t\t\trangeCloseLine.y1 = closeLine.y1;\r\n\t\t\t\t\trangeCloseLine.y2 = closeLine.y2;\r\n\r\n\t\t\t\t\tlet rangeHighLowLine = rangeColumn.highLowLine;\r\n\t\t\t\t\trangeHighLowLine.x = highLowLine.x;\r\n\t\t\t\t\trangeHighLowLine.y = highLowLine.y;\r\n\t\t\t\t\trangeHighLowLine.x1 = highLowLine.x1;\r\n\t\t\t\t\trangeHighLowLine.x2 = highLowLine.x2;\r\n\t\t\t\t\trangeHighLowLine.y1 = highLowLine.y1;\r\n\t\t\t\t\trangeHighLowLine.y2 = highLowLine.y2;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Creates elements in related legend container, that mimics the look of this\r\n\t * Series.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {Container} marker Legend item container\r\n\t */\r\n\tpublic createLegendMarker(marker: Container): void {\r\n\r\n\t\tlet w: number = marker.pixelWidth;\r\n\t\tlet h: number = marker.pixelHeight;\r\n\r\n\t\tmarker.removeChildren();\r\n\r\n\t\tlet column: OHLC = marker.createChild(OHLC);\r\n\t\tcolumn.shouldClone = false;\r\n\t\tcolumn.copyFrom(this.columns.template);\r\n\r\n\t\tlet cw: number;\r\n\t\tlet ch: number;\r\n\r\n\t\tlet openLine: Line = column.openLine;\r\n\t\tlet closeLine: Line = column.closeLine;\r\n\t\tlet highLowLine: Line = column.highLowLine;\r\n\r\n\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\tcw = w / 3;\r\n\t\t\tch = h;\r\n\r\n\t\t\thighLowLine.y = h / 2;\r\n\t\t\thighLowLine.x2 = w;\r\n\r\n\t\t\topenLine.x = w / 3 * 2;\r\n\t\t\topenLine.y2 = h / 2;\r\n\r\n\t\t\tcloseLine.x = w / 3;\r\n\t\t\tcloseLine.y2 = h;\r\n\t\t\tcloseLine.y1 = h / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tcw = w;\r\n\t\t\tch = h / 3;\r\n\r\n\t\t\thighLowLine.x = w / 2;\r\n\t\t\thighLowLine.y2 = h;\r\n\r\n\t\t\topenLine.y = h / 3 * 2;\r\n\t\t\topenLine.x2 = w / 2;\r\n\r\n\t\t\tcloseLine.y = h / 3;\r\n\t\t\tcloseLine.x2 = w;\r\n\t\t\tcloseLine.x1 = w / 2;\r\n\t\t}\r\n\t\tcolumn.width = cw;\r\n\t\tcolumn.height = ch;\r\n\r\n\t\t$object.copyProperties(this, marker, visualProperties);\r\n\t\t$object.copyProperties(this.columns.template, column, visualProperties);\r\n\r\n\t\tcolumn.stroke = this.riseFromOpenState.properties.stroke;\r\n\r\n\t\tlet legendDataItem = marker.dataItem;\r\n\t\tlegendDataItem.color = column.stroke;\r\n\t\tlegendDataItem.colorOrig = column.stroke;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new OHLC();\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"OHLCSeries\"] = OHLCSeries;\r\nregistry.registeredClasses[\"OHLCSeriesDataItem\"] = OHLCSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/OHLCSeries.ts","/**\r\n * Line series segment module.\r\n * @todo Add description about what this is\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ILineSeriesSegmentAdapters, ILineSeriesSegmentEvents, ILineSeriesSegmentProperties, LineSeriesSegment } from \"./LineSeriesSegment\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentProperties extends ILineSeriesSegmentProperties { }\r\n\r\n/**\r\n * Defines events for [[StepLineSeriesSegment]].\r\n */\r\nexport interface IStepLineSeriesSegmentEvents extends ILineSeriesSegmentEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeriesSegment]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesSegmentAdapters extends ILineSeriesSegmentAdapters, IStepLineSeriesSegmentProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Represents a line series segment.\r\n *\r\n * A line segment can be used to apply different properties to a part of the\r\n * line series, between two data points.\r\n *\r\n * @see {@link IStepLineSeriesSegmentEvents} for a list of available events\r\n * @see {@link IStepLineSeriesSegmentAdapters} for a list of available Adapters\r\n * @todo Example\r\n */\r\nexport class StepLineSeriesSegment extends LineSeriesSegment {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IStepLineSeriesSegmentProperties}\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesSegmentProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IStepLineSeriesSegmentAdapters}\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesSegmentAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IStepLineSeriesSegmentEvents}\r\n\t */\r\n\tpublic _events!: IStepLineSeriesSegmentEvents;\r\n\r\n\t/**\r\n\t * Segment's line element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic strokeSprite: Sprite;\r\n\r\n\t/**\r\n\t * Segment's fill element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic fillSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesSegment\";\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the series segment.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {IPoint[]} points Points to connect\r\n\t * @param {IPoint[]} closePoints ?\r\n\t * @param {number} smoothnessX Horizontal bezier setting (?)\r\n\t * @param {number} smoothnessY Vertical bezier setting (?)\r\n\t */\r\n\tpublic drawSegment(points: IPoint[], closePoints: IPoint[], smoothnessX: number, smoothnessY: number, noRisers?: boolean, vertical?: boolean): void {\r\n\t\tif (points.length > 0 && closePoints.length > 0) {\r\n\r\n\t\t\tif (noRisers) {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]);\r\n\t\t\t\tif (points.length > 0) {\r\n\t\t\t\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\t\t\t\tlet point = points[i];\r\n\t\t\t\t\t\tif (i / 2 == Math.round(i / 2)) {\r\n\t\t\t\t\t\t\tpath += $path.moveTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tpath += $path.lineTo(point);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath = $path.moveTo(points[0]) + $path.polyline(points);\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet path: string = $path.moveTo(points[0]) + $path.polyline(points);\r\n\r\n\t\t\t\tthis.strokeSprite.path = path;\r\n\r\n\t\t\t\tif (this.fillOpacity > 0 || this.fillSprite.fillOpacity > 0) { // helps to avoid drawing fill object if fill is not visible\r\n\t\t\t\t\tpath += $path.lineTo(closePoints[0]) + $path.polyline(closePoints);\r\n\t\t\t\t\tpath += $path.lineTo(points[0]);\r\n\t\t\t\t\tpath += $path.closePath();\r\n\r\n\t\t\t\t\tthis.fillSprite.path = path;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeriesSegment\"] = StepLineSeriesSegment;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeriesSegment.ts","/**\r\n * Step line series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { LineSeries, LineSeriesDataItem, ILineSeriesDataFields, ILineSeriesProperties, ILineSeriesAdapters, ILineSeriesEvents } from \"./LineSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { StepLineSeriesSegment } from \"./StepLineSeriesSegment\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $math from \"../../core/utils/Math\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[StepLineSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class StepLineSeriesDataItem extends LineSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {StepLineSeries}\r\n\t */\r\n\tpublic _component!: StepLineSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesDataFields extends ILineSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesProperties extends ILineSeriesProperties {\r\n\tnoRisers?: boolean;\r\n\r\n\tstartLocation?: number;\r\n\r\n\tendLocation?: number;\r\n}\r\n\r\n/**\r\n * Defines events for [[StepLineSeries]].\r\n */\r\nexport interface IStepLineSeriesEvents extends ILineSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[StepLineSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IStepLineSeriesAdapters extends ILineSeriesAdapters, IStepLineSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a step line graph.\r\n *\r\n * @see {@link IStepLineSeriesEvents} for a list of available Events\r\n * @see {@link IStepLineSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class StepLineSeries extends LineSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IStepLineSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IStepLineSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IStepLineSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IStepLineSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IStepLineSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IStepLineSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IStepLineSeriesEvents}\r\n\t */\r\n\tpublic _events!: IStepLineSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {StepLineSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: StepLineSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _segment: StepLineSeriesSegment;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"StepLineSeries\";\r\n\t\tthis.applyTheme();\r\n\t\tthis.startLocation = 0;\r\n\t\tthis.endLocation = 1;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {StepLineSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new StepLineSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * [addPoints description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {IPoint[]} points [description]\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t * @param {string} xField [description]\r\n\t * @param {string} yField [description]\r\n\t * @param {boolean} backwards [description]\r\n\t */\r\n\tprotected addPoints(points: IPoint[], dataItem: this[\"_dataItem\"], xField: string, yField: string, backwards?: boolean): void {\r\n\r\n\t\tlet startLocation = this.startLocation;\r\n\t\tlet endLocation = this.endLocation;\r\n\r\n\t\tlet x0: number = this.xAxis.getX(dataItem, xField, startLocation);\r\n\t\tlet y0: number = this.yAxis.getY(dataItem, yField, startLocation);\r\n\r\n\t\tlet x1: number = this.xAxis.getX(dataItem, xField, endLocation);\r\n\t\tlet y1: number = this.yAxis.getY(dataItem, yField, endLocation);\r\n\r\n\t\tx0 = $math.fitToRange(x0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty0 = $math.fitToRange(y0, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\tx1 = $math.fitToRange(x1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\t\ty1 = $math.fitToRange(y1, -20000, 20000); // from geometric point of view this is not right, but practically it's ok. this is done to avoid too big objects.\r\n\r\n\t\t// this might make an impression that points are duplicated, and they indeed are, but this is needed to handle gaps in data\r\n\t\tif (!this.noRisers && this.connect) {\r\n\t\t\tif (points.length > 1) {\r\n\t\t\t\tlet prevPoint: IPoint = points[points.length - 1];\r\n\t\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y1 });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: x0, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\t\tif (backwards) {\r\n\t\t\t\t\t\tpoints.push({ x: x1, y: prevPoint.y });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tpoints.push({ x: prevPoint.x, y: y0 });\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet point0: IPoint = { x: x0, y: y0 };\r\n\t\tlet point1: IPoint = { x: x1, y: y1 };\r\n\r\n\t\tif (backwards) {\r\n\t\t\tpoints.push(point1, point0);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tpoints.push(point0, point1);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Draws the line segment.\r\n\t *\r\n\t * @param {LineSeriesSegment} segment Segment\r\n\t * @param {IPoint[]} points Segment points\r\n\t * @param {IPoint[]} closePoints Segment close points\r\n\t */\r\n\tprotected drawSegment(segment: StepLineSeriesSegment, points: IPoint[], closePoints: IPoint[]): void {\r\n\t\tlet vertical = false;\r\n\t\tif (this.yAxis == this.baseAxis) {\r\n\t\t\tvertical = true;\r\n\t\t}\r\n\t\tsegment.drawSegment(points, closePoints, this.tensionX, this.tensionY, this.noRisers, vertical);\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createSegment(): this[\"_segment\"] {\r\n\t\treturn new StepLineSeriesSegment();\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if step line series should draw only horizontal (or only\r\n\t * vertical, depending on base axis) lines, instead of connecting them with\r\n\t * vertical (or horizontal) lines.\r\n\t *\r\n\t * @default false\r\n\t * @param {boolean} value No risers\r\n\t */\r\n\tpublic set noRisers(value: boolean) {\r\n\t\tthis.setPropertyValue(\"noRisers\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean} No risers\r\n\t */\r\n\tpublic get noRisers(): boolean {\r\n\t\treturn this.getPropertyValue(\"noRisers\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * start location of the step\r\n\t *\r\n\t * @param {number} value Location (0-1)\r\n\t * @default 0\r\n\t */\r\n\tpublic set startLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"startLocation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Location (0-1)\r\n\t */\r\n\tpublic get startLocation(): number {\r\n\t\treturn this.getPropertyValue(\"startLocation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Step end location.\r\n\t *\r\n\t * @param {number} value Location (0-1)\r\n\t * #default 1\r\n\t */\r\n\tpublic set endLocation(value: number) {\r\n\t\tthis.setPropertyValue(\"endLocation\", value, true);\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Location (0-1)\r\n\t */\r\n\tpublic get endLocation(): number {\r\n\t\treturn this.getPropertyValue(\"endLocation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"StepLineSeries\"] = StepLineSeries;\r\nregistry.registeredClasses[\"StepLineSeriesDataItem\"] = StepLineSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/StepLineSeries.ts","/**\r\n * Module that defines everything related to building RadarColumns.\r\n * It is a container which has radarColumn element which is a Slice.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Slice } from \"../../core/elements/Slice\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $type from \"../../core/utils/Type\";\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumn]].\r\n */\r\nexport interface IRadarColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnAdapters extends IColumnAdapters, IRadarColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates RadarColumns.\r\n *\r\n * @see {@link IRadarColumnEvents} for a list of available events\r\n * @see {@link IRadarColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class RadarColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarColumnProperties}\r\n\t */\r\n\tpublic _properties!: IRadarColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarColumnEvents}\r\n\t */\r\n\tpublic _events!: IRadarColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Radar column element\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic radarColumn: Slice;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createAssets() {\r\n\t\tthis.radarColumn = this.createChild(Slice);\r\n\t\tthis.radarColumn.shouldClone = false;\r\n\t\tthis.radarColumn.strokeOpacity = undefined;\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.radarColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[RadarColumn]].\r\n\t *\r\n\t * @param {RadarColumn} source Source RadarColumn\r\n\t */\r\n\tpublic copyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.radarColumn) {\r\n\t\t\tthis.radarColumn.copyFrom(source.radarColumn);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * X coordinate for the slice tooltip.\r\n\t *\r\n\t * @return {number} X\r\n\t */\r\n\tprotected getTooltipX(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.radarColumn.tooltipX;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate for the slice tooltip.\r\n\t *\r\n\t * @return {number} Y\r\n\t */\r\n\tprotected getTooltipY(): number {\r\n\t\tlet value = this.getPropertyValue(\"tooltipX\");\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.radarColumn.tooltipY;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumn\"] = RadarColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/RadarColumn.ts","/**\r\n * Radar column series module.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesProperties, IColumnSeriesDataFields, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"../series/ColumnSeries\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent, visualProperties } from \"../../core/Sprite\";\r\nimport { RadarChart } from \"../types/RadarChart\";\r\nimport { AxisRendererRadial } from \"../axes/AxisRendererRadial\";\r\nimport { RadarColumn } from \"../elements/RadarColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $array from \"../../core/utils/Array\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[RadarColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class RadarColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {Slice}\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {RadarColumnSeries}\r\n\t */\r\n\tpublic _component!: RadarColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[RadarColumnSeries]].\r\n */\r\nexport interface IRadarColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[RadarColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IRadarColumnSeriesAdapters extends IColumnSeriesAdapters, IRadarColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a 3D column graph.\r\n *\r\n * @see {@link IRadarColumnSeriesEvents} for a list of available Events\r\n * @see {@link IRadarColumnSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class RadarColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: RadarColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _column: RadarColumn;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IRadarColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IRadarColumnSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IRadarColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IRadarColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IRadarColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IRadarColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IRadarColumnSeriesEvents}\r\n\t */\r\n\tpublic _events!: IRadarColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * A chart series belongs to.\r\n\t *\r\n\t * @type {RadarChart}\r\n\t */\r\n\tpublic _chart: RadarChart;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"RadarColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and returns a RadarColumn element to use as column in radar chart.\r\n\t *\r\n\t * @return {this[\"_column\"]} RadarColumn.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new RadarColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\r\n\t\t// so that radius would be updated\r\n\t\tif (this.chart.invalid) {\r\n\t\t\tthis.chart.validate();\r\n\t\t}\r\n\r\n\t\tsuper.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates data item's element, effectively redrawing it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {RadarColumnSeriesDataItem} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet startAngle = this.chart.startAngle;\r\n\t\tlet endAngle = this.chart.endAngle;\r\n\r\n\t\tlet yField: string = this.yField;\r\n\t\tlet yOpenField: string = this.yOpenField;\r\n\t\tlet xField: string = this.xField;\r\n\t\tlet xOpenField: string = this.xOpenField;\r\n\r\n\t\tlet lAngle: number;\r\n\t\tlet rAngle: number;\r\n\r\n\t\tlet tRadius: number;\r\n\t\tlet bRadius: number;\r\n\r\n\t\tlet startLocation = this.getStartLocation(dataItem);\r\n\t\tlet endLocation = this.getEndLocation(dataItem);\r\n\r\n\t\tlet cellAngle = (endAngle - startAngle) / (this.dataItems.length * (this.end - this.start));\r\n\r\n\t\tstartAngle = startAngle + startLocation * cellAngle;\r\n\t\tendAngle = endAngle - (1 - endLocation) * cellAngle;\r\n\r\n\t\tlet template: Sprite = this.columns.template;\r\n\r\n\t\tlet percentWidth: number = template.percentWidth;\r\n\r\n\t\tif ($type.isNaN(percentWidth)) {\r\n\t\t\tpercentWidth = 100;\r\n\t\t}\r\n\r\n\t\tlet offset: number = $math.round((endLocation - startLocation) * (1 - percentWidth / 100) / 2, 5);\r\n\t\tstartLocation += offset;\r\n\t\tendLocation -= offset;\r\n\r\n\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, dataItem.locations[yField], \"valueY\"), y: this.yAxis.getY(dataItem, yField, dataItem.locations[yField], \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, dataItem.locations[yOpenField], \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xOpenField, startLocation, \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xField, endLocation, \"valueX\");\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yField, startLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yField, startLocation, \"valueY\") });\r\n\t\t\tbRadius = $math.getDistance({ x: this.yAxis.getX(dataItem, yOpenField, endLocation, \"valueY\"), y: this.yAxis.getY(dataItem, yOpenField, endLocation, \"valueY\") });\r\n\r\n\t\t\tlAngle = this.xAxis.getAngle(dataItem, xField, dataItem.locations[xField], \"valueX\");\r\n\t\t\trAngle = this.xAxis.getAngle(dataItem, xOpenField, dataItem.locations[xOpenField], \"valueX\");\r\n\t\t}\r\n\r\n\t\tif (rAngle < lAngle) {\r\n\t\t\tlet temp = rAngle;\r\n\t\t\trAngle = lAngle;\r\n\t\t\tlAngle = temp;\r\n\t\t}\r\n\r\n\t\tlAngle = $math.fitToRange(lAngle, startAngle, endAngle);\r\n\t\trAngle = $math.fitToRange(rAngle, startAngle, endAngle);\r\n\r\n\t\tlet radarColumn = dataItem.column;\r\n\t\tif (!radarColumn) {\r\n\t\t\tradarColumn = this.columns.create();\r\n\t\t\tdataItem.column = radarColumn;\r\n\t\t\t$object.forceCopyProperties(this.columns.template, radarColumn, visualProperties);\r\n\t\t\tdataItem.addSprite(radarColumn);\r\n\t\t\tthis.setColumnStates(radarColumn);\r\n\t\t}\r\n\r\n\t\tlet slice = radarColumn.radarColumn;\r\n\r\n\t\tslice.startAngle = lAngle;\r\n\r\n\t\tlet arc = rAngle - lAngle;\r\n\r\n\t\tif (arc > 0) {\r\n\t\t\tslice.arc = arc;\r\n\t\t\tslice.radius = tRadius;\r\n\t\t\tslice.innerRadius = bRadius;\r\n\t\t\tradarColumn.__disabled = false;\r\n\r\n\t\t\tradarColumn.parent = this.columnsContainer;\r\n\r\n\t\t\t$iter.each(this.axisRanges.iterator(), (axisRange) => {\r\n\t\t\t\tlet rangeColumn = dataItem.rangesColumns.getKey(axisRange.uid);\r\n\t\t\t\tif (!rangeColumn) {\r\n\t\t\t\t\trangeColumn = this.columns.create();\r\n\r\n\t\t\t\t\t$object.forceCopyProperties(this.columns.template, rangeColumn, visualProperties);\r\n\t\t\t\t\t$object.copyProperties(axisRange.contents, rangeColumn, visualProperties); // need this because 3d columns are not in the same container\r\n\r\n\t\t\t\t\tif (rangeColumn.dataItem) {\r\n\t\t\t\t\t\t$array.remove(rangeColumn.dataItem.sprites, rangeColumn);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataItem.addSprite(rangeColumn);\r\n\t\t\t\t\tthis.setColumnStates(rangeColumn);\r\n\t\t\t\t\tdataItem.rangesColumns.setKey(axisRange.uid, rangeColumn);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet slice = radarColumn.radarColumn;\r\n\t\t\t\tslice.startAngle = lAngle;\r\n\t\t\t\tslice.arc = arc;\r\n\t\t\t\tslice.radius = tRadius;\r\n\t\t\t\tslice.innerRadius = bRadius;\r\n\r\n\t\t\t\tif (slice.invalid) {\r\n\t\t\t\t\tslice.validate(); // validate as if it was used previously, it will flicker with previous dimensions\r\n\t\t\t\t}\r\n\r\n\t\t\t\trangeColumn.__disabled = false;\r\n\t\t\t\trangeColumn.parent = this.columnsContainer;\r\n\t\t\t});\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.disableUnusedColumns(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [getPoint description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {RadarColumnSeriesDataItem} dataItem [description]\r\n\t * @param {string} xKey [description]\r\n\t * @param {string} yKey [description]\r\n\t * @param {number} locationX [description]\r\n\t * @param {number} locationY [description]\r\n\t * @param {string} stackKeyX [description]\r\n\t * @param {string} stackKeyY [description]\r\n\t */\r\n\tprotected getPoint(dataItem: RadarColumnSeriesDataItem, xKey: string, yKey: string, locationX?: number, locationY?: number, stackKeyX?: string, stackKeyY?: string) {\r\n\r\n\t\tif (!stackKeyX) {\r\n\t\t\tstackKeyX = \"valueX\";\r\n\t\t}\r\n\t\tif (!stackKeyY) {\r\n\t\t\tstackKeyY = \"valueY\";\r\n\t\t}\r\n\r\n\t\tlet x: number = this.yAxis.getX(dataItem, yKey, locationY, stackKeyY);\r\n\t\tlet y: number = this.yAxis.getY(dataItem, yKey, locationY, stackKeyY);\r\n\r\n\t\tlet radius: number = $math.getDistance({ x: x, y: y });\r\n\t\t// hack to be able to determine angle later\r\n\t\tif(radius == 0){\r\n\t\t\tradius = 0.00001;\r\n\t\t}\r\n\r\n\t\tlet angle: number = this.xAxis.getAngle(dataItem, xKey, locationX, stackKeyX);\r\n\r\n\t\treturn { x: radius * $math.cos(angle), y: radius * $math.sin(angle) };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns an SVG path to be used as a mask for the series.\r\n\t *\r\n\t * @return {string} SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet renderer: AxisRendererRadial = this.yAxis.renderer;\r\n\t\treturn $path.arc(renderer.startAngle, renderer.endAngle - renderer.startAngle, renderer.pixelRadius, renderer.pixelInnerRadius);\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"RadarColumnSeries\"] = RadarColumnSeries;\r\nregistry.registeredClasses[\"RadarColumnSeriesDataItem\"] = RadarColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/RadarColumnSeries.ts","/**\r\n * Defines Pyramid Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IFunnelSeriesAdapters, IFunnelSeriesDataFields, IFunnelSeriesEvents, IFunnelSeriesProperties, FunnelSeries, FunnelSeriesDataItem } from \"./FunnelSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Bullet } from \"../elements/Bullet\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { Color, color } from \"../../core/utils/Color\";\r\nimport { LinearGradient } from \"../../core/rendering/fills/LinearGradient\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PyramidSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PyramidSeriesDataItem extends FunnelSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PyramidSeries}\r\n\t */\r\n\tpublic _component!: PyramidSeries;\r\n\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PyramidSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesDataFields extends IFunnelSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesProperties extends IFunnelSeriesProperties {\r\n\r\n\t/**\r\n\t * Bottom width in pixels or percent\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tbottomWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Top width in pixels or percent\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\ttopWidth?: number | Percent;\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t *\r\n\t * @type {number | Percent}\r\n\t */\r\n\tpyramidHeight?: number | Percent;\r\n\r\n\t/**\r\n\t * Indicates whether slice value should sould influence its height or area\r\n\t * size.\r\n\t *\r\n\t * @default \"area\"\r\n\t * @type {\"height\" | \"area\"}\r\n\t */\r\n\tvalueIs?: \"height\" | \"area\";\r\n}\r\n\r\n/**\r\n * Defines events for [[PyramidSeries]].\r\n */\r\nexport interface IPyramidSeriesEvents extends IFunnelSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PyramidSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPyramidSeriesAdapters extends IFunnelSeriesAdapters, IPyramidSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a FunnelSlice series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPyramidSeriesEvents} for a list of available Events\r\n * @see {@link IPyramidSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PyramidSeries extends FunnelSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPyramidSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPyramidSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPyramidSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPyramidSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPyramidSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPyramidSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPyramidSeriesEvents}\r\n\t */\r\n\tpublic _events!: IPyramidSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PyramidSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: PyramidSeriesDataItem;\r\n\r\n\t/**\r\n\t * [_nextWidth description]\r\n\t *\r\n\t * @todo Description\r\n\t * @type {number}\r\n\t */\r\n\tprotected _nextWidth: number;\r\n\r\n\tprotected _pyramidHeight: number;\r\n\r\n\tprotected _pyramidWidth: number;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PyramidSeries\";\r\n\t\tthis.topWidth = percent(0);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.pyramidHeight = percent(100);\r\n\t\tthis.valueIs = \"area\";\r\n\r\n\t\tthis.sliceLinks.template.width = 0;\r\n\t\tthis.sliceLinks.template.height = 0;\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {PyramidSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PyramidSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates the whole series, effectively causing it to redraw.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tsuper.validate();\r\n\t\tthis._nextWidth = undefined;\r\n\t}\r\n\r\n\t/**\r\n\t * [getNextValue description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {FunnelSeriesDataItem} dataItem [description]\r\n\t * @return {number} [description]\r\n\t */\r\n\tprotected getNextValue(dataItem: FunnelSeriesDataItem): number {\r\n\t\tlet index = dataItem.index;\r\n\t\tlet nextValue: number = dataItem.getWorkingValue(\"value\");\r\n\t\tif (index < this.dataItems.length - 1) {\r\n\t\t\tlet nextItem = this.dataItems.getIndex(index + 1);\r\n\t\t\tnextValue = nextItem.getWorkingValue(\"value\");\r\n\t\t}\r\n\t\tif (nextValue == 0) {\r\n\t\t\tnextValue = 0.000001;\r\n\t\t}\r\n\t\treturn nextValue;\r\n\t}\r\n\r\n\t/**\r\n\t * [validateDataElements description]\r\n\t * \r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataElements() {\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tthis.dataItems.each((dataItem) => {\r\n\t\t\tlet relValue = dataItem.getWorkingValue(\"value\") / dataItem.value;\r\n\t\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\t\tif (this.orientation == \"vertical\") {\r\n\t\t\t\tmaxHeight -= (sliceLink.pixelHeight * relValue);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tmaxWidth -= (sliceLink.pixelWidth * relValue);\r\n\t\t\t}\r\n\r\n\t\t})\r\n\r\n\t\tthis._pyramidHeight = $utils.relativeToValue(this.pyramidHeight, maxHeight);\r\n\t\tthis._pyramidWidth = $utils.relativeToValue(this.pyramidHeight, maxWidth);\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet y = (maxHeight - this._pyramidHeight) / 2;\r\n\t\t\tthis.slicesContainer.y = y\r\n\t\t\tthis.labelsContainer.y = y;\r\n\t\t\tthis.ticksContainer.y = y;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet x = (maxWidth - this._pyramidWidth) / 2;\r\n\t\t\tthis.slicesContainer.x = x;\r\n\t\t\tthis.labelsContainer.x = x;\r\n\t\t\tthis.ticksContainer.x = x;\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElements();\r\n\t}\r\n\r\n\t/**\r\n\t * [decorateSlice description]\r\n\t *\r\n\t * @todo Description\r\n\t * @param {this[\"_dataItem\"]} dataItem [description]\r\n\t */\r\n\tprotected decorateSlice(dataItem: this[\"_dataItem\"]) {\r\n\r\n\t\tlet sum = this.dataItem.values.value.sum;\r\n\r\n\t\tif(sum == 0){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet slice = dataItem.slice;\r\n\t\tlet sliceLink = dataItem.sliceLink;\r\n\t\tlet label = dataItem.label;\r\n\t\tlet tick = dataItem.tick;\r\n\r\n\t\tlet nextValue = this.getNextValue(dataItem);\r\n\t\tlet workingValue = dataItem.getWorkingValue(\"value\");\r\n\r\n\t\tif (workingValue == 0) {\r\n\t\t\tworkingValue = 0.000001;\r\n\t\t}\r\n\r\n\t\tlet pyramidWidth = this._pyramidWidth;\r\n\t\tlet pyramidHeight = this._pyramidHeight;\r\n\r\n\t\tlet maxWidth = this.slicesContainer.innerWidth;\r\n\t\tlet maxHeight = this.slicesContainer.innerHeight;\r\n\r\n\t\tlet linkWidth = sliceLink.pixelWidth;\r\n\t\tlet linkHeight = sliceLink.pixelHeight;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxWidth);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxWidth);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidHeight, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceHeight: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidHeight;\r\n\t\t\t\tlet square = totalSquare * workingValue / sum;\r\n\r\n\t\t\t\tlet s = Math.abs(sliceTopWidth * sliceTopWidth - 2 * square * c);\r\n\r\n\t\t\t\tsliceHeight = (sliceTopWidth - Math.sqrt(s)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceHeight * sliceTopWidth) / sliceHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet sum = this.dataItem.values.value.sum;\r\n\t\t\t\tsliceHeight = pyramidHeight * workingValue / sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceHeight * c;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tslice.height = sliceHeight;\r\n\t\t\tslice.width = maxWidth;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.y = this._nextY;\r\n\t\t\t//slice.x = maxWidth / 2;\t\t\t\r\n\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.x = maxWidth / 2;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlabel.x = 0;\r\n\t\t\t}\r\n\r\n\t\t\tlabel.y = slice.pixelY + slice.pixelHeight * tick.locationY;\r\n\r\n\t\t\tthis._nextY += slice.pixelHeight + linkHeight * workingValue / dataItem.value;\r\n\t\t\tsliceLink.y = this._nextY - linkHeight;\r\n\t\t\tsliceLink.x = maxWidth / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet topWidth = $utils.relativeToValue(this.topWidth, maxHeight);\r\n\r\n\t\t\tif (!$type.isNumber(this._nextWidth)) {\r\n\t\t\t\tthis._nextWidth = topWidth;\r\n\t\t\t}\r\n\r\n\t\t\tlet bottomWidth = $utils.relativeToValue(this.bottomWidth, maxHeight);\r\n\t\t\tlet sliceTopWidth = this._nextWidth;\r\n\r\n\t\t\tlet angle = Math.atan2(pyramidWidth, topWidth - bottomWidth);\r\n\t\t\tlet c = Math.tan(Math.PI / 2 - angle);\r\n\t\t\tif (c == 0) {\r\n\t\t\t\tc = 0.00000001;\r\n\t\t\t}\r\n\r\n\t\t\tlet sliceWidth: number;\r\n\t\t\tlet sliceBottomWidth: number;\r\n\r\n\t\t\tif (this.valueIs == \"area\") {\r\n\t\t\t\tlet totalSquare = (topWidth + bottomWidth) / 2 * pyramidWidth;\r\n\t\t\t\tlet square = totalSquare * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceWidth = (sliceTopWidth - Math.sqrt(sliceTopWidth * sliceTopWidth - 2 * square * c)) / c;\r\n\t\t\t\tsliceBottomWidth = (2 * square - sliceWidth * sliceTopWidth) / sliceWidth;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tsliceWidth = pyramidWidth * workingValue / this.dataItem.values.value.sum;\r\n\t\t\t\tsliceBottomWidth = sliceTopWidth - sliceWidth * c;\r\n\t\t\t}\r\n\r\n\t\t\tslice.width = sliceWidth;\r\n\t\t\tslice.height = maxHeight;\r\n\t\t\tslice.bottomWidth = sliceBottomWidth;\r\n\t\t\tslice.topWidth = sliceTopWidth;\r\n\r\n\t\t\tsliceLink.topWidth = slice.bottomWidth;\r\n\t\t\tsliceLink.bottomWidth = slice.bottomWidth;\r\n\r\n\t\t\tslice.x = this._nextY;\r\n\t\t\t\r\n\t\t\tif (!this.alignLabels) {\r\n\t\t\t\tlabel.y = maxHeight / 2;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tlabel.y = this.labelsContainer.measuredHeight;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlabel.x = slice.pixelX + slice.pixelWidth * tick.locationX;\r\n\r\n\t\t\tthis._nextY += slice.pixelWidth + linkWidth * workingValue / dataItem.value;\r\n\t\t\tsliceLink.x = this._nextY - linkWidth;\r\n\t\t\tsliceLink.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tthis._nextWidth = slice.bottomWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's tip in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` (default) means the pyramid will be perfectly pointy.\r\n\t * `50%` will have a cut off / blunt top that is half the width of the chart.\r\n\t * `100%` will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t *\r\n\t * @default 0%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set topWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"topWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get topWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"topWidth\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Height of pyramid\r\n\t *\r\n\t *\r\n\t * @default 100%\r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set pyramidHeight(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"pyramidHeight\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get pyramidHeight(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"pyramidHeight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Width of the pyramid's bottom (bsae) in pixels or relative (`Percent`).\r\n\t *\r\n\t * `0%` means the pyramid's botto will be pointy.\r\n\t * `50%` will have a cut off / blunt bottom that is half the width of the chart.\r\n\t * `100%` (default) will take the whole width of the chart.\r\n\t *\r\n\t * If you need the downward-pointing pyramid, you might want to `topWidth` to\r\n\t * `100%` and `bottomWidth` to `0%`.\r\n\t * \r\n\t * @param {number | Percent}\r\n\t */\r\n\tpublic set bottomWidth(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"bottomWidth\", value, false, false, 10, false)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number | Percent}\r\n\t */\r\n\tpublic get bottomWidth(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"bottomWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates how slice's value will influence its size.\r\n\t *\r\n\t * `\"area\"` (default) means that the whole area of the pyramid (counting in\r\n\t * modifications by `topWidth` and `bottomWidth`) will be divvied up between\r\n\t * slices based on their value.\r\n\t *\r\n\t * With this setting at `\"area\"` the area of the trapezoids of each slice\r\n\t * will represent their value relatively to values of the other slices.\r\n\t *\r\n\t * This is a correct way to depict \"weight\" of each slice based on their\r\n\t * values.\r\n\t *\r\n\t * `\"height\"` means whole height (as opposed to area) of the pyramid will be\r\n\t * divvied up between slices. Actual slice width or area is not counted in.\r\n\t *\r\n\t * From the data-viz standpoint this does not make a lot of sense, since\r\n\t * slices with lesser values might appear more prominent if they are placed\r\n\t * towards thick end of the pyramid since their areas will be bigger.\r\n\t *\r\n\t * @default \"area\"\r\n\t * @param {\"area\" | \"height\"}\r\n\t */\r\n\tpublic set valueIs(value: \"area\" | \"height\") {\r\n\t\tif (this.setPropertyValue(\"valueIs\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {\"area\" | \"height\"}\r\n\t */\r\n\tpublic get valueIs(): \"area\" | \"height\" {\r\n\t\treturn this.getPropertyValue(\"valueIs\");\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PyramidSeries\"] = PyramidSeries;\r\nregistry.registeredClasses[\"PyramidSeriesDataItem\"] = PyramidSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PyramidSeries.ts","/**\r\n * Defines Pictorial Stacked Series.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { IPyramidSeriesAdapters, IPyramidSeriesDataFields, IPyramidSeriesEvents, IPyramidSeriesProperties, PyramidSeries, PyramidSeriesDataItem } from \"./PyramidSeries\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { FunnelSlice } from \"../elements/FunnelSlice\";\r\nimport { Label } from \"../../core/elements/Label\";\r\nimport { FunnelTick } from \"../elements/FunnelTick\";\r\nimport { ListTemplate, ListDisposer } from \"../../core/utils/List\";\r\nimport { DataItem, IDataItemEvents } from \"../../core/DataItem\";\r\nimport { Container } from \"../../core/Container\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\nimport { LegendDataItem, LegendSettings } from \"../../charts/Legend\";\r\nimport { Sprite } from \"../../core/Sprite\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"../../core/utils/Dictionary\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IRectangle } from \"../../core/defs/IRectangle\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $ease from \"../../core/utils/Ease\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { Percent, percent } from \"../../core/utils/Percent\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport { Color, color } from \"../../core/utils/Color\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n//@todo: sequenced?\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class PictorialStackedSeriesDataItem extends PyramidSeriesDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {PictorialStackedSeries}\r\n\t */\r\n\tpublic _component!: PictorialStackedSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"PictorialStackedSeriesDataItem\";\r\n\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesDataFields extends IPyramidSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesProperties extends IPyramidSeriesProperties {\r\n\tpicture?: Sprite;\r\n}\r\n\r\n/**\r\n * Defines events for [[PictorialStackedSeries]].\r\n */\r\nexport interface IPictorialStackedSeriesEvents extends IPyramidSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[PictorialStackedSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IPictorialStackedSeriesAdapters extends IPyramidSeriesAdapters, IPictorialStackedSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a PictorialStacked series on a [[SlicedChart]].\r\n *\r\n * @see {@link IPictorialStackedSeriesEvents} for a list of available Events\r\n * @see {@link IPictorialStackedSeriesAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/chart-types/sliced-chart/} for documentation\r\n * @important\r\n */\r\nexport class PictorialStackedSeries extends PyramidSeries {\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IPictorialStackedSeriesDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IPictorialStackedSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IPictorialStackedSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IPictorialStackedSeriesEvents}\r\n\t */\r\n\tpublic _events!: IPictorialStackedSeriesEvents;\r\n\r\n\t/**\r\n\t * Defines the type of data item.\r\n\t *\r\n\t * @type {PictorialStackedSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: PictorialStackedSeriesDataItem;\r\n\r\n\t/**\r\n\t * Holds a Sprite that acts as an intelligent mask for the serries.\r\n\t * \r\n\t * @type {Sprite}\r\n\t */\r\n\tprotected _maskSprite: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"PictorialStackedSeries\";\r\n\t\tthis.topWidth = percent(100);\r\n\t\tthis.bottomWidth = percent(100);\r\n\t\tthis.valueIs = \"height\";\r\n\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis._maskSprite = this.slicesContainer.createChild(Sprite);\r\n\t\tthis._maskSprite.visible = false;\r\n\t\tthis._maskSprite.zIndex = 100;\r\n\t}\r\n\r\n\t/**\r\n\t * Sizes the mask to fit the series.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic validateDataElements(): void {\r\n\r\n\t\tlet maxWidth = this.slicesContainer.maxWidth;\r\n\t\tlet maxHeight = this.slicesContainer.maxHeight;\r\n\r\n\t\tlet maskSprite = this._maskSprite;\r\n\t\t//maskSprite.validatePosition(); // for some reason size of the maskSprite is 0x0 after we removed validatePosition in afterdraw\r\n\r\n\t\tlet pictureWidth = maskSprite.measuredWidth / maskSprite.scale;\r\n\t\tlet pictureHeight = maskSprite.measuredHeight / maskSprite.scale;\r\n\r\n\t\tlet scale = $math.min(maxHeight / pictureHeight, maxWidth / pictureWidth);\r\n\r\n\t\tif(scale == Infinity){\r\n\t\t\tscale = 1; // can't return here, won't draw legend properly\r\n\t\t}\r\n\r\n\t\tscale = $math.max(0.001, scale);\r\n\r\n\t\tlet newWidth = $math.min(maxWidth, pictureWidth * scale);\r\n\t\tlet newHeight = $math.min(maxHeight, pictureHeight * scale);\r\n\r\n\t\tmaskSprite.scale = scale;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\r\n\t\t\tthis.topWidth = newWidth + 4;\r\n\t\t\tthis.bottomWidth = newWidth + 4;\r\n\t\t\tthis.pyramidHeight = newHeight;\r\n\t\t\tmaskSprite.x = maxWidth / 2;\r\n\t\t\tmaskSprite.y = newHeight / 2;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.topWidth = newHeight + 4;\r\n\t\t\tthis.bottomWidth = newHeight + 4;\r\n\t\t\tthis.pyramidHeight = newWidth;\r\n\t\t\tmaskSprite.valign = \"middle\";\r\n\t\t\tmaskSprite.x = newWidth / 2;\r\n\t\t\tmaskSprite.y = maxHeight / 2;\r\n\t\t}\r\n\r\n\t\tmaskSprite.verticalCenter = \"middle\";\r\n\t\tmaskSprite.horizontalCenter = \"middle\";\r\n\r\n\t\tthis.slicesContainer.mask = this._maskSprite;\r\n\r\n\t\tsuper.validateDataElements();\t\t\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\t\tif (!$type.hasValue(this.readerTitle)) {\r\n\t\t\tthis.readerTitle = this.language.translate(\"Pyramid Series\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty DataItem of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return {PictorialStackedSeriesDataItem} Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new PictorialStackedSeriesDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Sprite]] element that is used as a series mask.\r\n\t *\r\n\t * If set, this element's shape will be used to apply shape to the whole\r\n\t * stacked pictorial series.\r\n\t *\r\n\t * You can use this element's `path` property to set an SVG path for the\r\n\t * shape:\r\n\t *\r\n\t * ```TypeScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * series.maskSprite.path = iconPath;\r\n\t * ```\r\n\t * ```JSON\r\n\t * let iconPath = \"M511.82,329.991c-0.256-1.212-1.064-2.244-2.192-2.784l-24.396-11.684c17.688-29.776,11.804-68.912-15.58-91.88 c-53.756-45.084-131.696-70.936-213.828-70.936c-82.128,0-160.068,25.856-213.82,70.936c-27.416,22.992-33.28,62.18-15.524,91.972 L2.276,327.203c-1.128,0.54-1.936,1.572-2.192,2.792c-0.256,1.22,0.08,2.496,0.896,3.436l21.204,24.388 c0.764,0.88,1.868,1.376,3.02,1.376c0.084,0,0.172,0,0.26-0.008c1.244-0.084,2.384-0.74,3.072-1.776l14.852-22.376 c12.648,10.112,28.392,15.776,44.916,15.776c16.872,0,33.284-5.98,46.232-16.836c27.828-23.34,73.172-37.272,121.288-37.272 c48.12,0,93.464,13.932,121.296,37.272c12.944,10.856,29.36,16.836,46.228,16.836c16.596,0,32.4-5.724,45.08-15.916l14.94,22.512 c0.692,1.04,1.824,1.696,3.076,1.776c0.084,0.008,0.172,0.008,0.256,0.008c1.156,0,2.256-0.496,3.02-1.376l21.2-24.388C511.74,332.487,512.068,331.211,511.82,329.991z\";\r\n\t * // ...\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * \"type\": \"PictorialStackedSeries\",\r\n\t * // ...\r\n\t * \"maskSprite\": {\r\n\t * \"path\": iconPath\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @return {Sprite} Mask sprite\r\n\t */\r\n\tpublic get maskSprite(): Sprite {\r\n\t\treturn this._maskSprite;\r\n\t}\r\n\r\n\t/**\r\n\t * Inits FunnelSlice.\r\n\t *\r\n\t * @param {FunnelSlice} slice to init\r\n\t */\r\n\tprotected initSlice(slice: this[\"_slice\"]) {\r\n\t\tsuper.initSlice(slice);\r\n\r\n\t\tlet hs = slice.states.getKey(\"hover\");\r\n\t\tif (hs) {\r\n\t\t\ths.properties.expandDistance = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * bboxter class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"PictorialStackedSeries\"] = PictorialStackedSeries;\r\nregistry.registeredClasses[\"PictorialStackedSeriesDataItem\"] = PictorialStackedSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/PictorialStackedSeries.ts","/**\r\n * Module that defines everything related to building Cone Columns.\r\n * It is a container which has coneColumn element which is a Cone.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { Cone } from \"../../core/elements/3d/Cone\";\r\nimport { registry } from \"../../core/Registry\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnProperties extends IColumnProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeColumn]].\r\n */\r\nexport interface IConeColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeColumnAdapters extends IColumnAdapters, IConeColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates ConeColumns.\r\n *\r\n * @see {@link IConeColumnEvents} for a list of available events\r\n * @see {@link IConeColumnAdapters} for a list of available Adapters\r\n * @todo Usage example\r\n * @important\r\n */\r\nexport class ConeColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IConeColumnProperties}\r\n\t */\r\n\tpublic _properties!: IConeColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IConeColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: IConeColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IConeColumnEvents}\r\n\t */\r\n\tpublic _events!: IConeColumnEvents;\r\n\r\n\r\n\t/**\r\n\t * Cone column element\r\n\t * @type {Cone}\r\n\t */\r\n\tpublic coneColumn: Cone;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tcreateAssets() {\r\n\t\tthis.coneColumn = this.createChild(Cone);\r\n\t\tthis.coneColumn.shouldClone = false;\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.coneColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[ConeColumn]].\r\n\t *\r\n\t * @param {ConeColumn} source Source ConeColumn\r\n\t */\r\n\tcopyFrom(source: this) {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.coneColumn) {\r\n\t\t\tthis.coneColumn.copyFrom(source.coneColumn);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeColumn\"] = ConeColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/ConeColumn.ts","/**\r\n * ConeSeries module\r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { ConeColumn } from \"../elements/ConeColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[ConeSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class ConeSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {ConeColumn}\r\n\t */\r\n\tpublic _column: ConeColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {ConeSeries}\r\n\t */\r\n\tpublic _component!: ConeSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"ConeSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[ConeSeries]].\r\n */\r\nexport interface IConeSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[ConeSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IConeSeriesAdapters extends IColumnSeriesAdapters, IConeSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a cone graph.\r\n *\r\n * @see {@link IConeSeriesEvents} for a list of available Events\r\n * @see {@link IConeSeriesAdapters} for a list of available Adapters\r\n * @todo Example\r\n * @important\r\n */\r\nexport class ConeSeries extends ColumnSeries {\r\n\r\n\tpublic _column: ConeColumn;\r\n\r\n\t/**\r\n\t */\r\n\tpublic _dataItem: ConeSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {IConeSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: IConeSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IConeSeriesProperties}\r\n\t */\r\n\tpublic _properties!: IConeSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IConeSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: IConeSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {IConeSeriesEvents}\r\n\t */\r\n\tpublic _events!: IConeSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"ConeSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for Candlestick\r\n\t * @ignore\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new ConeColumn();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an SVG path to use as series mask.\r\n\t *\r\n\t * @return {string} SVG path\r\n\t */\r\n\tprotected getMaskPath(): string {\r\n\t\tlet dx = 0;\r\n\t\tlet dy = 0;\r\n\t\tlet column = this.columns.getIndex(0);\r\n\t\tif(column){\r\n\t\t\tif (this.baseAxis == this.xAxis) {\r\n\t\t\t\tdy = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tdx = column.coneColumn.bottom.radiusY + 1;\r\n\t\t\t}\r\n\r\n\t\t\treturn $path.rectToPath({\r\n\t\t\t\tx: -dx,\r\n\t\t\t\ty: 0,\r\n\t\t\t\twidth: this.xAxis.axisLength + dx,\r\n\t\t\t\theight: this.yAxis.axisLength + dy\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t\tlet column = dataItem.column;\r\n\t\tif(column){\r\n\t\t\tlet coneColumn = dataItem.column.coneColumn;\r\n\r\n\t\t\tconeColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tconeColumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tconeColumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"ConeSeries\"] = ConeSeries;\r\nregistry.registeredClasses[\"ConeSeriesDataItem\"] = ConeSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/ConeSeries.ts","/**\r\n * Module that defines everything related to building Curved Columns.\r\n * It is a container which has CurvedColumn element which is a Sprite.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Column, IColumnProperties, IColumnAdapters, IColumnEvents } from \"./Column\";\r\nimport { Sprite, SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $smoothing from \"../../core/rendering/Smoothing\";\r\nimport { Orientation } from \"../../core/defs/Orientation\";\r\nimport { IPoint } from \"../../core/defs/IPoint\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnProperties extends IColumnProperties {\r\n\r\n\t/**\r\n\t * Horizontal tension setting of the line (0-1).\r\n\t *\r\n\t * Used for smoothed lines.\r\n\t *\r\n\t * @default 1\r\n\t * @type {number}\r\n\t */\r\n\ttensionX?: number;\r\n\r\n\t/**\r\n\t * Tension\r\n\t *\r\n\t * @type {number}\r\n\t */\r\n\ttension?: number;\r\n\r\n\t/**\r\n\t * Orientation of the column\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @type {Orientation}\r\n\t */\r\n\torientation?: Orientation;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[CurvedColumn]].\r\n */\r\nexport interface ICurvedColumnEvents extends IColumnEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumn]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnAdapters extends IColumnAdapters, ICurvedColumnProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Class used to creates CurvedColumns.\r\n *\r\n * @see {@link ICurvedColumnEvents} for a list of available events\r\n * @see {@link ICurvedColumnAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumn extends Column {\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICurvedColumnProperties}\r\n\t */\r\n\tpublic _properties!: ICurvedColumnProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICurvedColumnAdapters}\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICurvedColumnEvents}\r\n\t */\r\n\tpublic _events!: ICurvedColumnEvents;\r\n\r\n\t/**\r\n\t * The element that holds curved column shape.\r\n\t * \r\n\t * @type {Sprite}\r\n\t */\r\n\tpublic curvedColumn: Sprite;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumn\";\r\n\t}\r\n\r\n\t/**\r\n\t * [createAssets description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected createAssets(): void {\r\n\t\tthis.curvedColumn = this.createChild(Sprite);\r\n\t\tthis.curvedColumn.shouldClone = false;\r\n\r\n\t\tthis.setPropertyValue(\"tension\", 0.7);\r\n\r\n\t\tthis.width = percent(120);\r\n\t\tthis.height = percent(120);\r\n\r\n\t\t// some dirty hack so that if user access column, it won't get error\r\n\t\tthis.column = this.curvedColumn;\r\n\t}\r\n\r\n\t/**\r\n\t * Draws the element.\r\n\t * \r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic draw(): void {\r\n\t\tsuper.draw();\r\n\t\tlet w = this.realWidth;\r\n\t\tlet h = this.realHeight;\r\n\t\tlet x = this.realX - this.pixelX;\r\n\t\tlet y = this.realY - this.pixelY;\r\n\r\n\t\tlet points: IPoint[];\r\n\r\n\t\tlet ww = this.width;\r\n\t\tlet pw = 0.8;\r\n\r\n\t\tlet tensionX = 1;\r\n\t\tlet tensionY = 1;\r\n\r\n\t\tif (this.orientation == \"vertical\") {\r\n\t\t\ttensionX = this.tension;\r\n\t\t\tpoints = [{ x: 0, y: h + y }, { x: w / 2, y: y }, { x: w, y: h + y }];\r\n\t\t}\r\n\t\telse {\r\n\t\t\ttensionY = this.tension;\r\n\t\t\tpoints = [{ x: x, y: 0 }, { x: x + w, y: h / 2 }, { x: x, y: h }];\r\n\t\t}\r\n\r\n\t\tlet path = $path.moveTo(points[0]) + new $smoothing.Tension(tensionX, tensionY).smooth(points);\r\n\t\tthis.column.path = path;\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[CurvedColumn]].\r\n\t * \r\n\t * @param {CurvedColumn} source Source CurvedColumn\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source)\r\n\t\tif (this.curvedColumn) {\r\n\t\t\tthis.curvedColumn.copyFrom(source.curvedColumn);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Horizontal tension of the curve.\r\n\t *\r\n\t * Tension defines how \"lose\" the line will be.\r\n\t *\r\n\t * 1 is the maximum tension which would result in pointy columns with\r\n\t * straight edges.\r\n\t *\r\n\t * The smaller the tension th wider the column will be.\r\n\t *\r\n\t * @default 0.7\r\n\t * @param {number} value tension (0-1)\r\n\t */\r\n\tpublic set tension(value: number) {\r\n\t\tthis.setPropertyValue(\"tension\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return {number} Tension (0-1)\r\n\t */\r\n\tpublic get tension(): number {\r\n\t\treturn this.getPropertyValue(\"tension\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the column.\r\n\t *\r\n\t * Available options: \"vertical\" (default) and \"horizontal\".\r\n\t *\r\n\t * @default \"vertical\"\r\n\t * @param {Orientation} value Orientation\r\n\t */\r\n\tpublic set orientation(value: Orientation) {\r\n\t\tthis.setPropertyValue(\"orientation\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @type {Orientation} Orientation\r\n\t */\r\n\tpublic get orientation(): Orientation {\r\n\t\treturn this.getPropertyValue(\"orientation\");\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumn\"] = CurvedColumn;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/elements/CurvedColumn.ts","/**\r\n * CurvedColumnSeries module.\r\n * \r\n * Not recommended using if you use scrollbars or your chart is zoomable in some other way.\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ColumnSeries, IColumnSeriesDataFields, IColumnSeriesProperties, IColumnSeriesAdapters, IColumnSeriesEvents, ColumnSeriesDataItem } from \"./ColumnSeries\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { CurvedColumn } from \"../elements/CurvedColumn\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $path from \"../../core/rendering/Path\";\r\nimport { percent, Percent } from \"../../core/utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines a [[DataItem]] for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class CurvedColumnSeriesDataItem extends ColumnSeriesDataItem {\r\n\r\n\t/**\r\n\t * A sprite used to draw the column.\r\n\t * @type {ConeColumn}\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {CurvedColumnSeries}\r\n\t */\r\n\tpublic _component!: CurvedColumnSeries;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"CurvedColumnSeriesDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesDataFields extends IColumnSeriesDataFields { }\r\n\r\n/**\r\n * Defines properties for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesProperties extends IColumnSeriesProperties { }\r\n\r\n/**\r\n * Defines events for [[CurvedColumnSeries]].\r\n */\r\nexport interface ICurvedColumnSeriesEvents extends IColumnSeriesEvents { }\r\n\r\n/**\r\n * Defines adapters for [[CurvedColumnSeries]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface ICurvedColumnSeriesAdapters extends IColumnSeriesAdapters, ICurvedColumnSeriesProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines [[Series]] for a curved columns graph.\r\n *\r\n * @see {@link ICurvedColumnSeriesEvents} for a list of available Events\r\n * @see {@link ICurvedColumnSeriesAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class CurvedColumnSeries extends ColumnSeries {\r\n\r\n\t/**\r\n\t * Dfines type of the column.\r\n\t * \r\n\t * @type {CurvedColumn}\r\n\t */\r\n\tpublic _column: CurvedColumn;\r\n\r\n\t/**\r\n\t * Defines type of the data item.\r\n\t *\r\n\t * @type {CurvedColumnSeriesDataItem}\r\n\t */\r\n\tpublic _dataItem: CurvedColumnSeriesDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of data fields used for the series.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesDataFields}\r\n\t */\r\n\tpublic _dataFields: ICurvedColumnSeriesDataFields\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesProperties}\r\n\t */\r\n\tpublic _properties!: ICurvedColumnSeriesProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesAdapters}\r\n\t */\r\n\tpublic _adapter!: ICurvedColumnSeriesAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t *\r\n\t * @type {ICurvedColumnSeriesEvents}\r\n\t */\r\n\tpublic _events!: ICurvedColumnSeriesEvents;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"CurvedColumnSeries\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an element to use for the curved column.\r\n\t * \r\n\t * @ignore Exclude from docs\r\n\t * @return {this[\"_column\"]} Element.\r\n\t */\r\n\tprotected createColumnTemplate(): this[\"_column\"] {\r\n\t\treturn new CurvedColumn();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Validates data item's elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param {this[\"_dataItem\"]} dataItem Data item\r\n\t */\r\n\tpublic validateDataElementReal(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\tlet column = dataItem.column;\r\n\t\tif (column) {\r\n\t\t\tlet curvedColumn = dataItem.column.curvedColumn;\r\n\r\n\t\t\tcurvedColumn.fill = dataItem.column.fill;\r\n\r\n\t\t\tif (this.baseAxis == this.yAxis) {\r\n\t\t\t\tcolumn.orientation = \"horizontal\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tcolumn.orientation = \"vertical\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.validateDataElementReal(dataItem);\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"CurvedColumnSeries\"] = CurvedColumnSeries;\r\nregistry.registeredClasses[\"CurvedColumnSeriesDataItem\"] = CurvedColumnSeriesDataItem;\r\n\n\n\n// WEBPACK FOOTER //\n// ../../../../../src/.internal/charts/series/CurvedColumnSeries.ts","/**\r\n * DurationAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { SpriteEventDispatcher, AMEvent } from \"../../core/Sprite\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { ValueAxisBreak } from \"./ValueAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport { IDisposer, Disposer, MultiDisposer } from \"../../core/utils/Disposer\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $object from \"../../core/utils/Object\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DurationAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DurationAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t *\r\n\t * @type {DurationAxis}\r\n\t */\r\n\tpublic _component!: DurationAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DurationAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data fields for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisDataFields extends IValueAxisDataFields { }\r\n\r\n/**\r\n * Defines properties for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisProperties extends IValueAxisProperties { }\r\n\r\n/**\r\n * Defines events for [[DurationAxis]].\r\n */\r\nexport interface IDurationAxisEvents extends IValueAxisEvents { }\r\n\r\n/**\r\n * Defines adapters for [[DurationAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDurationAxisAdapters extends IValueAxisAdapters, IDurationAxisProperties { }\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Used to create an axis that shows time durations.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DurationAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DurationAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/} for mor information about duration formatters.\r\n * @see {@link IDurationAxisEvents} for a list of available Events\r\n * @see {@link IDurationAxisAdapters} for a list of available Adapters\r\n * @important\r\n */\r\nexport class DurationAxis extends ValueAxis {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t *\r\n\t * @type {IDurationAxisDataFields}\r\n\t */\r\n\tpublic _dataFields: IDurationAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t *\r\n\t * @type {IDurationAxisProperties}\r\n\t */\r\n\tpublic _properties!: IDurationAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t *\r\n\t * @type {IDurationAxisAdapters}\r\n\t */\r\n\tpublic _adapter!: IDurationAxi