{"version":3,"file":"kendo.dataviz.chart.min.js","names":["global","factory","exports","module","require","define","amd","globalThis","self","kendodataviz","chart","js","this","$","window","kendo","dataviz","Class","isNumber","datavizConstants","constants","MAX_VALUE","MIN_VALUE","VALUE","DATE","CENTER","TOP","BOTTOM","LEFT","WHITE","CIRCLE","X","Y","RIGHT","BLACK","COORD_PRECISION","END","START","DEFAULT_PRECISION","ARC","defined","getter","isArray","ChartElement","Point","Box","alignPathToPixel","setDefaultOptions","isString","inArray","isFunction","valueOrDefault","isObject","parseDate","deepExtend","last","eventElement","TextBox","getTemplate","ShapeElement","getSpacing","CurveProcessor","append","styleValue","CategoryAxis","BoxElement","Title","round","limitValue","cycleIndex","grep","elementStyles","autoTextColor","rad","bindEvents","services","unbindEvents","support","drawing","Path","Animation","AnimationFactory","Group","Circle","MultiPath","Color","geometry","GeometryPoint","GeometryCircle","transform","ChartAxis","extend","init","axis","_axis","options","value","point","getCategory","getValue","slot","from","to","limit","range","valueRange","findAxisByName","name","axes","idx","length","prepareUserOptions","ChartPane","pane","visual","chartsVisual","chartContainer","_pane","ChartPlotArea","plotArea","_plotArea","backgroundVisual","_bgVisual","countNumbers","values","count","i","num","Aggregates","min","Math","max","sum","sumOrNull","result","avg","first","getField","field","row","get","SeriesBinder","_valueFields","_otherFields","_nullValue","_undefinedValue","register","seriesTypes","valueFields","otherFields","this$1$1","type","_makeValue","undefined","canonicalFields","series","concat","bindPoint","pointIx","item","fields","data","pointData","Array","fieldData","slice","_bindFromArray","srcValueFields","sourceFields","srcPointFields","_bindFromObject","initialValue","array","object","srcFields","fieldName","srcFieldName","sourceFieldName","push","current","percentRegex","standardDeviationRegex","RegExp","ErrorRangeCalculator","errorValue","initGlobalRanges","deviationMatch","exec","valueGetter","createValueGetter","average","getAverage","deviation","getStandardDeviation","multiple","parseFloat","errorRange","low","high","globalRange","indexOf","standardError","getStandardError","binder","index","OBJECT","getErrorRange","pointValue","Error","percentValue","abs","sqrt","isSample","total","squareDifferenceSum","pow","browser","INITIAL_ANIMATION_DURATION","FADEIN","BORDER_BRIGHTNESS","START_SCALE","msie","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","X_ERROR_LOW_FIELD","X_ERROR_HIGH_FIELD","Y_ERROR_LOW_FIELD","Y_ERROR_HIGH_FIELD","ZERO","INTERPOLATE","GAP","ABOVE","BELOW","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","PYRAMID","HEATMAP","HORIZONTAL_WATERFALL","LINE","OHLC","PIE","POLAR_AREA","POLAR_LINE","POLAR_SCATTER","RADAR_AREA","RADAR_COLUMN","RADAR_LINE","RANGE_AREA","RANGE_BAR","RANGE_COLUMN","SCATTER","SCATTER_LINE","VERTICAL_AREA","VERTICAL_BOX_PLOT","VERTICAL_BULLET","VERTICAL_LINE","VERTICAL_RANGE_AREA","WATERFALL","EQUALLY_SPACED_SERIES","TRENDLINE_EXPONENTIAL","TRENDLINE_LINEAR","TRENDLINE_LOGARITHMIC","TRENDLINE_MOVING_AVERAGE","TRENDLINE_POLYNOMIAL","TRENDLINE_POWER","TRENDLINE_SERIES","LEGEND_ITEM_CLICK","LEGEND_ITEM_HOVER","LEGEND_ITEM_LEAVE","SERIES_CLICK","SERIES_HOVER","SERIES_OVER","SERIES_LEAVE","PLOT_AREA_CLICK","PLOT_AREA_HOVER","PLOT_AREA_LEAVE","DRAG","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT","SELECT_END","RENDER","SHOW_TOOLTIP","HIDE_TOOLTIP","PANE_RENDER","CHART_POINT_ROLE","CHART_POINT_CLASSNAME","CHART_POINT_ROLE_DESCRIPTION","LEGEND_ITEM_ROLE","LEGEND_ITEM_CLASSNAME","LEGEND_ITEM_ARIA_ROLE_DESCRIPTION","LOGARITHMIC","CATEGORY","INSIDE_END","INSIDE_BASE","OUTSIDE_END","MOUSEWHEEL","MOUSEWHEEL_DELAY","DRILLDOWN","DRILLDOWN_FIELD","MIN_MOVING_AVERAGE_PERIOD","GLASS","TOOLTIP_OFFSET","LINE_MARKER_SIZE","MOUSEWHEEL_ZOOM_RATE","ErrorBarBase","isVertical","fn","call","reflow","targetBox","linePoints","endCaps","valueBox","getAxis","getSlot","centerBox","center","capsWidth","getCapsWidth","capValue","x","y","capStart","capEnd","y1","y2","box","x1","x2","boxSize","width","height","floor","createVisual","rect","toRect","sender","getSender","color","line","createDefaultVisual","defaultVisual","lineOptions","stroke","dashType","moveTo","lineTo","animation","delay","zIndex","CategoricalErrorBar","seriesValueAxis","anyHasZIndex","elements","appendIfNotNull","element","areNumbers","segmentVisible","visible","pointVisibility","bindSegments","points","categoriesCount","seriesCount","categories","equalsIgnoreCase","a","b","toLowerCase","evalOptions","context","state","dryRun","defaults","depth","needsEval","excluded","property","hasOwnProperty","propValue","filterSeriesByType","types","currentSeries","dateCache","WeakMap","parseDateCategory","category","intlService","date","set","hasGradientOverlay","overlay","gradient","hasValue","isDateAxis","axisOptions","sampleCategory","dateCategory","Date","singleItemOrArray","AREA_REGEX","hasValue$1","convertableToNumber","findNext","ref","pointHasValue","outPoint","start","dir","getter$$1","hasItem","createOutOfRangePoints","hasMinPoint","hasMaxPoint","minPoint","maxPoint","missingValues","test","stack","seriesMissingValues","_outOfRangeMinPoint","_outOfRangeMaxPoint","CategoricalChart","chartService","categoryAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","render","traverseDataPoints","addValue","bind","pointOptions","seriesIx","pointType","prototype","vertical","invertAxes","plotValue","isStacked100","categoryIx","otherValues","categorySum","other","otherStack","group","plotRange","startValue","isStacked","positive","prevValue","isStackedBar","defaultStack","isNonGroupStack","STRING","otherValue","valueAxis","axisCrossingValue","categoryAxisCrossingValue","stackLimits","axisName","stackName","pIx","isFinite","updateStackRange","chartSeries","limitsCache","key","limits","errorTotals","negative","sparseArrayLimits","addErrorBar","errorBars","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","updateRange","errorBar","createPoint","owner","noteText","dataItem","evalPointOptions","_defaults","doEval","axisRange","namedValueAxes","categorySlots","chartPoints","categorySlot","valueSlot","pointSlot","aboveAxis","stackValue","percentage","reflowPoint","reflowCategories","clip","limitPoints","limitPoint","limitedSlot","limitSlot","equals","reverse","axisCrossingValues","axisIndex","slotX","slotY","callback","_outOfRangeCallback","seriesIx$1","currentCategory","categoryAt","seriesIx$2","outOfRangePoint","formatPointValue","format","auto","PointEventsMixin","click","e","trigger","eventArgs","hover","over","out","runningTotal","originalEvent","NoteMixin","createNote","notes","text","label","note","Note","guid","random","id","toString","LinePoint","tooltipTracking","_id","markers","_rendered","size","marker","createMarker","createLabel","labels","createLabelElement","getLabelText","align","vAlign","margin","left","right","labelTemplate","formatValue","getAriaLabelText","ariaTemplate","getAriaTemplate","markerBorder","background","border","brightness","toHex","rotation","opacity","accessibilityOptions","ariaLabel","accessibility","markerBox","_childBox","childBox","clone","reflowLabel","noteTargetBox","anchor","position","alignTo","createHighlight","highlight","defaultColor","shadow","getElement","highlightVisual","highlightVisualArgs","paddingBox","halfSize","Rect","createFocusHighlight","markerOptions","highlightOptions","padding","tooltipAnchor","clipBox","overlaps","verticalAlign","horizontalAlign","horizontal","overlapsBox","unclipElements","noclip","focusVisual","toggleFocusHighlight","clearFocusFromVisual","getIndex","HIGHLIGHT_ZINDEX","tabIndex","role","className","ariaRoleDescription","LineSegment","toGeometryPoints","customVisual","segmentVisual","fromPoints","closed","close","aliasFor","coords","parent","getNearestPoint","StepLineMixin","calculateStepPoints","justified","stepAxis","stepDir","previousPoint","toGeometryPoint","stepPoint","lintPoint","StepLineSegment","SplineSegment","segments","process","curve","apply","LineChartMixin","renderSegments","lastSegment","_segments","sortedPoints","sortPoints","pointCount","createSegment","_addSegment","children","unshift","segment","nearestPoint","target","allPoints","nearestPointDistance","pointDistance","distanceTo","ClipAnimation","setup","_setEnd","step","pos","interpolateValue","topRight","bottomRight","suspend","setX","resume","duration","ClipAnimationMixin","createAnimation","root","getRoot","transitions","clipPath","fromRect","_setChildrenAnimation","animationPoints","LineChart","style","supportsPointInactiveOpacity","AreaSegment","prevSegment","stackPoints","createFill","fill","createStroke","lineCap","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","map","Segment","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","end","StepAreaSegment","SplineAreaSegment","curveProcessor","controlOut","controlIn","AreaChart","previousSegment","_gapStackPoints","_stackPoints","stackPoint","startIdx","endIdx","pointOffset","currentSeriesIx","_previousSegmentPoint","gapStackPoint","_createGapStackPoint","segmentIx","seriesIdx","AxisGroupRangeTracker","axisRanges","update","chartAxisRanges","chartRange","reset","query","BarLabel","content","textBox","textOptions","labelBox","contentBox","top","bottom","alignToClipBox","parentBox","addAccessibilityAttributesToVisual","ariaChecked","AccessibilityAttributesMixin","Bar","rectVisual","createRect","strokeOpacity","path","getBorderColor","lineJoin","createGradientOverlay","baseColor","borderWidth","pad","_brightness","borderColor","forEach","forEachReverse","ClusterLayout","rtl","gap","spacing","slots","slotSize","child","StackWrap","positionAxis","childrenCount","currentChild","snapTo","wrap","BarChart","clusterType","stackType","stackOrDefault","labelOptions","negativeColor","cluster","getStackWrap","stackWrap","stackGroup","wraps","_stackGroup","zeroSlot","stackAxis","childrenLength","_setAnimationOptions","pointVisual","origin","Candlestick","ocSlot","open","lhSlot","realBody","mid","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","container","body","drawLines","lineStyle","normalColor","meanPoints","medianPoints","whiskerPoints","tooltip","CandlestickChart","splitValue","downColor","parts","BoxPlot","whiskerSlot","boxSlot","q1","q3","reflowBoxSlot","lower","upper","reflowWhiskerSlot","medianSlot","median","mean","meanSlot","calcMeanPoints","calcWhiskerPoints","calcMedianPoints","renderOutliers","outliers","outerFence","outlierValue","extremes","markersBorder","shape","reflowOutliers","move","whiskers","CROSS","VerticalBoxPlot","BoxPlotChart","filterOutliers","items","ScatterErrorBar","seriesAxes","ScatterChart","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","intl","xAxisName","xAxis","yAxisName","yAxis","xAxisRange","yAxisRange","namedXAxes","axisX","namedYAxes","axisY","ref$1","Bubble","radius","highlightGroup","createGradient","stops","offset","BubbleChart","_maxSize","negativeValues","updateBubblesSize","pointsCount","animationOptions","minR","minSize","maxR","maxSize","minArea","PI","areaRatio","area","Target","Bullet","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","create","BulletChart","seriesItem","wrapData","bulletOptions","bullet","isNaN","BaseTooltip","getStyle","pointColor","backgroundColor","font","paddingTop","paddingBottom","paddingLeft","paddingRight","show","tooltipOptions","isDark","notify","hide","destroy","CrosshairTooltip","crosshair","formatService","initAxisName","showAt","stickyMode","formattedValue","dateFormats","baseUnit","getAnchor","ref_options","lineBox","bbox","bottomLeft","translate","topLeft","Crosshair","moveLine","lineEnd","getBox","dim","lineStart","pointCategoryIndex","axisLineBox","currentAxis","ChartContainer","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","stackRoot","charts","j","isStackRoot","Pane","ID","createTitle","titleOptions","title","buildTitle","appendAxis","appendAxisAt","splice","appendChart","empty","removeAxis","i$1","removeChart","pop","visualStyle","renderComplete","createGridLines","clipRoot","allAxes","vGridLines","hGridLines","gridLines","altAxis","refresh","clear","renderVisual","notifyRender","axisValueField","length$1","idx$1","axis$1","lineBox$1","service","getService","paneIndex","shrinkToFit","PlotAreaBase","initFields","initSeries","legend","crosshairs","originalOptions","originalSeries","_bindCache","createPanes","createCrosshairs","cached","paneDefaults","paneOptions","panes","panesLength","currentPane","crosshairOptions","currentCrosshair","removeCrosshairs","hideCrosshairs","findPane","matchingPane","findPointPane","containsPoint","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","inactiveItems","inactiveItemsLabels","seriesVisible","visibleInLegend","itemLabelOptions","markerColor","active","groupAxes","xAxes","yAxes","paneIx","paneAxes","axisIx","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","unpad","reflowPanes","detachLabels","reflowAxes","reflowCharts","redraw","panesArray","cleanGradients","crossingAxes","crossingValues","valuesToAdd","defaultValue","alignAxisTo","targetAxis","targetCrossingValue","slotEdge","targetEdge","axisBox","alignAxes","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","paneId","paneAnchor","anchorCrossings","_overlap","_mirrored","mirror","paneYAnchor","pane$1","paneId$1","visible$1","anchor$1","anchorCrossings$1","shrinkAxisWidth","axisGroupBox","overflowX","shrink","shrinkAxisHeight","shrinked","overflowY","fitAxes","offsetX","paneBox","offsetY","currentAxis$1","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","rotated","allPaneAxes","autoRotateLabels","chartPane","remainingHeight","autoHeightPanes","percents","parseInt","currentPane$1","i$2","currentPane$2","backgroundBox","axesCount","axisA","axisB","chartsBoxes","boxes","addBackgroundPaths","multipath","paths","backgroundContainsPoint","bg","appendVisual","pointsByCategoryIndex","categoryIndex","pointsBySeriesIndex","seriesIndex","filterPoints","pointsByPointIndex","pointIndex","pointsBySeriesName","findPoint","paneByPoint","detachAxisGroupLabels","labelAxisCount","labelAxis","createLabelAxis","onAxis","edge","plotBands","isTrendline","trendlineFactory","createTrendlineSeries","modifiedSeries","forSeries","seriesByName","for","trendlineSeries","INHERIT","filter","find","getFirstPoint","getPointBelow","_getNextPoint","_pointsByVertical","getPointAbove","getPointToTheRight","_pointsByHorizontal","getPointToTheLeft","getPointsFunc","increment","nextIndex","loopPoints","direction","at","basePoint","isSingleAxis","some","reduce","acc","PlotAreaEventsMixin","_dispatchEvent","SeriesAggregator","defaultAggregates","seriesFields","_seriesFields","rootAggregate","aggregate","_series","_binder","fieldAggregate","canonicalName","aggregatePoints","srcPoints","_bindPoints","firstDataItem","dataItems","srcValues","_bindField","setValue","parentObj","split","shift","DefaultAggregates","aggregates","seriesType","RangeBar","fromOptions","toOptions","labelFrom","labelTo","RangeBarChart","plotLimits","RangeLinePoint","AUTO","RangeAreaPoint","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","RangeAreaSegment","toPoints","fromSegments","toPath","fromPath","SplineRangeAreaSegment","createCurveSegments","StepRangeAreaSegment","RangeAreaChart","fromSlot","toSlot","OHLCPoint","oPoints","cPoints","lhPoints","oSlot","cSlot","OHLCChart","WaterfallSegment","WaterfallChart","createSegments","totalCategories","summary","prevPoint","registry","impl","String","calculateSlope","sourceValues","slope","intercept","xy","xMin","Number","xMax","xValue","yValue","checkAllPositive","every","getTrendlineData","valueMapper","totalRange","totalRangeIndices","currentRange","currentRangeIndices","ceil","log","valueGetter$1","valueGetter$2","calculateMovingAverage","period","averagePoints","lastValue","valueGetter$3","MIN_ORDER","MAX_ORDER","calculatePolynomial","order","k","X$$1","Matrix","Y$$1","coefficients","Xt","transpose","B","multiply","inverse","linearRegression","n","valueGetter$4","valueGetter$5","seriesValues","exp","getData","categoryField","getData$1","getData$2","trendline","calculatePoints","getData$3","getData$4","getData$5","AREA_SERIES","OUT_OF_RANGE_SERIES","CategoricalPlotArea","namedCategoryAxes","valueAxisRangeTracker","_seriesPointsCache","_currentPointsCache","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","filterSeries","trendlineAggregateForecast","forecast","before","after","srcSeries","aggregateSeries","paneSeries","visibleSeries","groups","groupSeriesByCategoryAxis","groupIx","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","processedSeries","axisPane","dataLength","_seriesMax","outOfRangePoints","clearSeriesPointsCache","seriesSourcePoints","categoriesHash","srcCategories","dateAxis","srcData","indexCategories","totalIndex","aggregator","categoryItem","categoryIdx","totalCount","categoriesToAdd","defaultPaneName","stackableChartOptions","anyStackedSeries","s","categoryAxes","unique","axisSeries","groupSeries","firstSeries","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","centeredSeries","seriesAxis","aggregatedAxis","createLabels","definitions","isJustified","_forecast","DateCategoryAxis","primaryAxis","tracker","defaultRange","baseOptions","roundToMajorUnit","defaultAxisRange","LogarithmicAxis","NumericAxis","eventType","_eventCoordinates","pointPane","updateAxisOptions","_siblingsBySeriesIndex","_siblingsByPointIndex","siblings","sort","_getSeriesCompareFn","_isInStackedSeries","sortableSeries","stackableSeries","targetOptions","axesOptions","Highlight","_points","arrayPoints","toggleHighlight","hasHighlight","togglePointHighlight","toggleHandler","toggle","preventDefault","_defaultPrevented","isHighlighted","acceptKey","mouseKey","event","ctrlKey","shiftKey","altKey","toChartAxisRanges","ranges","Pannable","_active","_panAxes","pan","delta","lock","updatedAxes","limitRange","ZoomSelection","createElement","marquee","_marquee","document","marqueeColor","appendChild","removeElement","parentNode","removeChild","setStyles","styles","zoomPane","_zoomPane","_elementOffset","_zoomPaneClipBox","pageX","pageY","chartElement","elementOffset","_selectionPosition","elementOffset$$1","selectionPosition","_updateAxisRanges","zoom","pointsRange","startLocation","location","util","limitValue$1","valueOrDefault$1","MousewheelZoom","rate","updateRanges","zoomRange","LegendLayout","Layout","lineSpacing","orientation","VERTICAL","HORIZONTAL","alignItems","legendItem","clippedBBox","rectToBox","addVisual","DEFAULT_MARKER_SIZE","LegendItemMarker","cursor","markerHighlightOptions","ChartElement$1","initUserOptions","translateChildren","dx","dy","arguments$1","arguments","renderChildren","childVisual","stackVisual","visuals","sibling","insert","traverse","closest","match","matched","_highlight","focusHighlight","_focusHighlight","rootBackground","highlightColor","focusHighlightOptions","gradientOptions","Point$1","rotate","degrees","theta","cosT","cos","sinT","sin","cx","cy","onCircle","angle","radians","Box$1","wrapPoint","arrayPoint","targetCenter","dw","dh","expand","getHash","join","r1","rotatePoint","r2","r3","r4","hasSize","alignment","c1","c2","sizeFunc","WIDTH","HEIGHT","BoxElement$1","hasSetSize","reflowPaddingBox","hasBox","ShapeElement$1","halfWidth","halfHeight","TRIANGLE","ROUNDED_RECT","borderRadius","setCornerRadius","visualOptions","MarkerLineArea","LegendItemLine","centerY","createHighlightLine","createHighlightMarker","highlightLine","highlightMarker","RECT","LegendItemSquare","LegendItem","createContainer","FloatElement","markerWrap","createMarkerArea","_marker","_createMarker","_createLine","_createMarkerLine","_createSquare","_highlightOptions","_line","_markerLineArea","_square","_highlightMarkers","_toggleHighlight","_restoreMarkers","h","eventSink","_itemOverlay","widget","args","_legendItemHover","_unsetActivePoint","CUSTOM","Legend","createContainers","createLegendTitle","createItems","userAlign","hasTitle","itemsContainer","innerElement","markersOptions","itemOptions","hasItems","getItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","layout","Boolean","POINTER","SQUARE","PlotAreaFactory","_registry","entry","trendlines","createDiv","classNames","closestHandle","hasClasses","Selection","observer","_dateAxis","initOptions","offsetHeight","createElements","_index","onPane","wrapper","selection","leftMask","rightMask","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","borderLeftWidth","borderRightWidth","cssText","obj","mousewheel","_mousewheelHandler","_mousewheel","_domEvents","DomEventsBuilder","stopPropagation","_start","_move","_end","tap","_tap","press","_press","gesturestart","_gesturestart","gesturechange","_gesturechange","gestureend","_gestureend","clearTimeout","_mwTimeout","_state","_rangeEventArgs","_value","_pointInPane","modelCoords","_toModelCoordinates","eventCoordinates","handle","bodyRect","getBoundingClientRect","inBody","moveTarget","addClass","oldRange","span","scale","removeClass","rightClick","which","mousewheelDelta","setTimeout","touch","touches","p0","p1","_slot","leftMaskWidth","rightMaskWidth","distance","fromValue","toValue","zDir","relative","minDelta","maxDelta","Tooltip","_current","SharedTooltip","tooltipPoints","_slotAnchor","_defaultAnchor","shared","categoryText","categoryFormat","slotCenter","BarChartAnimation","fromScale","abort","scaleX","scaleY","BubbleAnimation","easing","FadeInAnimation","fadeTo","PieAnimation","ScatterLineChart","missingValue","getScatterTrendlineData","samplingInterval","diff","relativeValue","autoMajorUnit","valueGetter$6","scatterValueGetter","xValueLimits","valueGetter$7","logValueGetter","valueGetter$8","scatterRegistry","getData$6","getData$7","getData$8","getData$9","getData$10","getData$11","XYPlotArea","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","xAxisOptions","yAxisOptions","createXYAxis","inferredDate","namedAxes","isLog","typeSamples","seriesAxisName","firstPointValue","DateValueAxis","xAxesOptions","yAxesOptions","axisPane$1","xValues","yValues","currentValue","updateAxisOptions$1","PieSegment","sector","labelText","themeLabels","theme","seriesDefaults","animationDelay","labelsOptions","labelsDistance","middle","lp","labelHeight","labelWidth","startAngle","innerRadius","endAngle","createSegmentVisual","borderOptions","fallbackFill","userSpace","singleSegment","ShapeBuilder","createRing","midAndle","tooltipAlignment","RAD_30","RAD_60","sine","cosine","DEFAULT_FONT","PieChartMixin","createLegendItem","legendOptions","pointVisible","legendItems","PieChart","seriesColors","colorsCount","anglePerValue","constantAngle","currentAngle","explode","Ring","evalSegmentOptions","segmentOptions","seriesConfigs","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","boxCenter","leftSideLabels","rightSideLabels","seriesConfig","setRadius","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","lr","firstBox","secondBox","remaining","_takeDistance","reflowLabels","amount","available","boxX","labelsCount","labelDistance","boxY","hAlignLabel","connectors","_connectorLines","connectorsColor","connectorLine","centerPoint","sr","crossing","intersection","pointInCircle","space","autoFit","pieCenter","bboxBottom","reverseValue","originalX","sector_center","t","a1","a2","b1","b2","uat","ub","ua","PiePlotArea","createPieChart","pieChart","DonutSegment","DonutChart","holeSize","totalSize","seriesWithoutSize","currentSeries$1","DonutPlotArea","createDonutChart","donutChart","PolarPlotAreaBase","createPolarAxis","createValueAxis","polarAxis","axisType","axisDefaultRange","valueAxisOptions","RadarLogarithmicAxis","RadarNumericAxis","valueAxisBox","heightDiff","PolarScatterChart","valueRadius","PolarLineChart","SplinePolarAreaSegment","_polarAxisCenter","PolarAreaSegment","centerSegment","PolarAreaChart","_hasMissingValuesGap","xComparer","PolarPlotArea","PolarAxis","majorGridLines","minorGridLines","scatterChart","RadarLineChart","seriesSegments","groupBySeriesIx","isFirstDataPoint","isLastDataPoint","SplineRadarAreaSegment","RadarAreaSegment","RadarAreaChart","RadarSegment","RadarClusterLayout","slotAngle","slotSector","RadarStackLayout","childSector","RadarBarChart","RadarPlotArea","RadarCategoryAxis","_hasBarCharts","_isStacked100","chartOptions","FunnelSegment","chartBox","createPath","FunnelChart","labelPadding","dynamicSlopeReflow","totalHeight","firstSegment","maxSegment","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","finalNarrow","dynamicSlope","dynamicHeight","PyramidChart","FunnelPlotArea","createChart","chartType","HeatmapPoint","labelColor","isRoundRect","halfBorderWidth","HeatmapChart","setRange","minLightnessOffset","parseColor","hsl","toHSL","l","toCss","colorScale","indexX","indexY","xRange","yRange","ref$2","xIndex","yIndex","xIn","yIn","HeatmapPlotArea","bindCategories","createAxisLabels","xCategories","createHashSet","yCategories","has","add","createHeatmapChart","firstCategory","updateAxisOptions$2","normalizedOffset","axisXItems","_getPointAxisXIndex","targetXValue","compareValues","_getPointAxisYIndex","axisYItems","targetYValue","_getPointAxisIndex","findIndex","axisItem","dateEquals","COLOR","FIRST","MAX","MIN","NOTE_TEXT","errorLow","errorHigh","AXIS_NAMES","MOUSEMOVE","CONTEXTMENU","MOUSELEAVE","KEYDOWN","FOCUS","BLUR","Chart","userOptions","themeOptions","observers","addObserver","ChartService","_initElement","_originalOptions","_theme","_initTheme","_focusState","_initHandlers","_initSurface","FontLoader","preloadFonts","fontLoaded","_destroyed","_redraw","_attachEvents","_setElementClass","getAttribute","setAttribute","firstChild","seriesCopies","aliases","alias","resolveAxisAliases","applyDefaults","applySeriesColors","getSize","chartArea","offsetWidth","resize","force","currentSize","_size","_resize","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","paneName","_model","findPaneByName","findPaneByIndex","seriesName","categoryName","pointByCategoryName","togglePointsHighlight","showTooltip","_sharedTooltip","_tooltip","hideTooltip","surface","_surfaceWrap","elementSize","renderAs","_destroySurface","Surface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","model","_getModel","_destroyView","_setElementAccessibilityAttributes","_legend","draw","play","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","triggerPaneRender","_navState","_cancelDomEvents","_redrawFocusHighlight","ref_focusState","legendInFocus","preserveHighlight","_focusElement","_getFocusedLegendItem","description","exportVisual","exportOptions","currentOptions","clearMissingValues","pannable","_pannable","zoomable","_zoomSelection","_mousewheelZoom","_toggleDragZoomEvents","allowDrag","requiresHandlers","allowZoom","_dragZoomEnabled","touchAction","_touchAction","_toggleDomEvents","drag","domEvents","toggleDrag","toggleZoom","_createSharedTooltip","axisDefaults","themeAxisDefaults","mapAxisOptions","axisColor","applyAxisDefaults","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","applySeriesDefaults","colors","seriesColor","_createPlotArea","RootElement","_modelOptions","subtitle","orderTitles","DEFAULT_WIDTH","DEFAULT_HEIGHT","skipSeries","selections","select","_selectStart","_select","_selectEnd","_clickHandler","_click","_keydownHandler","_keydown","_focusHandler","_focus","_blurHandler","_blur","_mousedownHandler","_mousedown","_mouseleaveHandler","_mouseleave","_mouseover","_mouseout","_mousemove","throttle","removeObserver","eventNames","_toDocumentCoordinates","_updateDrilldownPoint","_resetDrilldownPoint","_focusPoint","_startDrilldown","_focusLegendItem","isDefaultPrevented","obj$1","_shouldAttachMouseMove","_hoveredPoint","_plotAreaHovered","_hasInactiveOpacity","_activeChartInstance","_applySeriesOpacity","_updateSeriesOpacity","cancel","_stopChartHandlers","_gestureDistance","_clearFocusedElement","suspendTracking","_zooming","resumeTracking","mousewheelZoom","previousGestureDistance","scaleDelta","_drawingChartElement","leave","_startNavigation","_suppressHover","panning","ranges$1","translateRange","_endNavigation","_mousewheelZoomRate","totalDelta","scaleRange","chartEvent","_getChartElement","eventTarget","coordinates","_elementPadding","_padding","clientX","clientY","inverseTransform","elementScale","invert","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","_isLegendBeforeChart","legendPosition","_preventInitialPointFocus","_focusFirstLegendItem","_focusFirstPoint","focusedElement","TAB","isLegendBeforeChart","_navigatePoints","_navigateLegend","ESCAPE","_hideTooltip","ENTER","focusState","moveFocus","focusedPoint","_displayTooltip","ARROW_RIGHT","ARROW_LEFT","ARROW_DOWN","ARROW_UP","itemsLength","cycleFunc","focusedLegendItemIndex","cycleUp","cycleDown","_hasFocus","ownerDocument","activeElement","_focusChart","focus","omitHighlight","_setElementActiveDescendant","_showSeriesInactiveOpacity","_showInactiveOpacity","_clearElementActiveDescendant","_pseudoFocusedElement","_createPseudoFocusedElement","ARIA_ACTIVE_DESCENDANT","remove","removeAttribute","pseudoElement","checked","_hideInactiveOpacity","activePoint","_activePoint","_updateHoveredPoint","_displayInactiveOpacity","multipleSeries","highlightPoints","chartInstance","_chartInstanceFromPoint","inactivePoints","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","constructor","hoveredPoint","drilldown","_drilldownState","resetOpacity","currSeries","defaultOpacity","_getDefaultOpacityForSeries","inactiveOpacity","activeSeries","hasDefaultInactiveOpacity","hasInactiveOpacity","defaultInactiveOpacity","DEFAULT_SERIES_OPACITY","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","overPlotArea","_tooltipCategoryIx","_sharedHighlight","pointArgs","hoverArgs","hideElements","keepTooltipOpen","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","clearInterval","autoBind","bindCategoryAxisFromSeries","uniqueCategories","Set","seriesOnAxis","hasCategoryBinding","seriesWithData","categorySamples","getTime","time","_isBindable","transitionsState","updateMouseMoveHandler","applyOptions","setOptions","setDirection","setIntlService","noTransitionsRedraw","unbind","bar","column","rangeColumn","verticalLine","pie","donut","verticalArea","scatter","scatterLine","bubble","candlestick","ohlc","boxPlot","verticalBullet","polarArea","polarLine","radarArea","radarLine","waterfall","DATA_FIELDS","fieldValue","originalValue","nullValue","jQuery","undefined$1","Widget","ui","ChartBreadcrumb","_attachChartEvents","_renderBreadcrumb","events","rootItem","icon","showIcon","breadcrumb","_onChartDrilldown","_onChartDrilldownLevelChange","deferred","resetDrilldownLevel","getKendoChart","breadcrumbElement","Breadcrumb","_onBreadcrumbClick","level","plugin","NS","outerWidth","_outerWidth","outerHeight","_outerHeight","KendoChart","DataSource","InstanceObserver","template","encode","htmlEncode","MOUSELEAVE_NS","AXIS_LABEL_CLICK","DRILLDOWN_LEVEL_CHANGE","NOTE_CLICK","NOTE_HOVER","NOTE_LEAVE","DOCUMENT_ELEMENT","documentElement","CHANGE","DATABOUND","LEAVE","Observable","UserEvents","multiTouch","fastTap","ChartInstanceObserver","handlerMap","legendItemClick","dataSource","_seriesVisibility","SeriesVisibilityState","_initDataSource","_showWatermarkOverlay","instance","_instance","_bindSeries","_bindCategories","dimensions","_setEvents","_getThemeOptions","_sourceSeries","setDataSource","_hasDataSource","_onDataChanged","_dataChangeHandler","_hasData","fetch","off","_destroyCrosshairTooltips","findSeries","ChartSeries","findSeriesByName","_createSeries","findSeriesByIndex","originalChartArea","_seriesOptions","on","relatedTarget","autoHide","themeName","SASS_THEMES","autoTheme","themes","_initChart","_createChart","_isRtl","_onInit","_initTooltip","tooltips","_crosshairTooltips","_getCrosshairTooltip","_showTooltip","_onRender","_copyMembers","names","_events","_tooltipleave","_onLegendItemClick","_legendItemClick","save","_onDrilldown","drilldownSeriesFactory","Promise","then","resolved","_onDrilldownData","drilldownSeries","Object","assign","_bindData","groupedSeries","view","grouped","seriesVisibility","read","applyByGroup","applyByIndex","seriesData","_groupIx","categoriesData","_bindCategoryAxis","isRtl","css","proxyMembers","createProxyMember","nameTemplate","seriesClone","legacyTemplate","groupNameTemplate","logToConsole","_groupValue","ExportMixin","PDFMixin","action","persistSeriesVisibility","saveState","geom","attr","applyStylesFromKendoAttributes","mobileScrollerSelector","_mobileScroller","downEvent","applyEventMap","_closeTooltipHandler","_closeTooltip","_clearShowTimeout","sharedTemplate","colspan","colorMarker","nameColumn","sharedTemplateIterator","_offset","_ensureElement","stop","animate","showTimeout","_measure","zoomLevel","viewport","scrollTop","pageYOffset","scrollLeft","pageXOffset","movable","_fit","fakeContainer","normalizeStyle","toggleClass","_sharedContent","_pointContent","html","forceHide","_hideElement","is","appendTo","contains","fadeOut","always","tooltipTemplate","xLow","xHigh","yLow","yHigh","viewPortSize","output","_chart","_options","_filterPoints","_clearFields","toggleVisibility","_filterData"],"sources":["kendo.dataviz.chart.js"],"mappings":"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","sourcesContent":["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('kendo.core.js'), require('kendo.color.js'), require('kendo.drawing.js'), require('kendo.dataviz.core.js'), require('kendo.breadcrumb.js'), require('kendo.data.js'), require('kendo.dataviz.themes.js'), require('kendo.userevents.js'), require('kendo.icons.js')) :\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.color', 'kendo.drawing', 'kendo.dataviz.core', 'kendo.breadcrumb', 'kendo.data', 'kendo.dataviz.themes', 'kendo.userevents', 'kendo.icons'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (global.kendodataviz = global.kendodataviz || {}, global.kendodataviz.chart = global.kendodataviz.chart || {}, global.kendodataviz.chart.js = factory()));\n})(this, (function () {\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-charts` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable */\n\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var Class = dataviz.Class;\n var isNumber = dataviz.isNumber;\n var datavizConstants = dataviz.constants;\n var MAX_VALUE = datavizConstants.MAX_VALUE;\n var MIN_VALUE = datavizConstants.MIN_VALUE;\n var VALUE = datavizConstants.VALUE;\n var DATE = datavizConstants.DATE;\n var CENTER = datavizConstants.CENTER;\n var TOP = datavizConstants.TOP;\n var BOTTOM = datavizConstants.BOTTOM;\n var LEFT = datavizConstants.LEFT;\n var WHITE = datavizConstants.WHITE;\n var CIRCLE = datavizConstants.CIRCLE;\n var X = datavizConstants.X;\n var Y = datavizConstants.Y;\n var RIGHT = datavizConstants.RIGHT;\n var BLACK = datavizConstants.BLACK;\n var COORD_PRECISION = datavizConstants.COORD_PRECISION;\n var END = datavizConstants.END;\n var START = datavizConstants.START;\n var DEFAULT_PRECISION = datavizConstants.DEFAULT_PRECISION;\n var ARC = datavizConstants.ARC;\n var defined = dataviz.defined;\n var getter = dataviz.getter;\n var isArray = dataviz.isArray;\n var ChartElement = dataviz.ChartElement;\n var Point = dataviz.Point;\n var Box = dataviz.Box;\n var alignPathToPixel = dataviz.alignPathToPixel;\n var setDefaultOptions = dataviz.setDefaultOptions;\n var isString = dataviz.isString;\n var inArray = dataviz.inArray;\n var isFunction = dataviz.isFunction;\n var valueOrDefault = dataviz.valueOrDefault;\n var isObject = dataviz.isObject;\n var parseDate = dataviz.parseDate;\n var deepExtend = dataviz.deepExtend;\n var last = dataviz.last;\n var eventElement = dataviz.eventElement;\n var TextBox = dataviz.TextBox;\n var getTemplate = dataviz.getTemplate;\n var ShapeElement = dataviz.ShapeElement;\n var getSpacing = dataviz.getSpacing;\n var CurveProcessor = dataviz.CurveProcessor;\n var append = dataviz.append;\n var styleValue = dataviz.styleValue;\n var CategoryAxis = dataviz.CategoryAxis;\n var BoxElement = dataviz.BoxElement;\n var Title = dataviz.Title;\n var round = dataviz.round;\n var limitValue = dataviz.limitValue;\n var cycleIndex = dataviz.cycleIndex;\n var grep = dataviz.grep;\n var elementStyles = dataviz.elementStyles;\n var autoTextColor = dataviz.autoTextColor;\n var rad = dataviz.rad;\n var bindEvents = dataviz.bindEvents;\n var services = dataviz.services;\n var unbindEvents = dataviz.unbindEvents;\n var support = kendo.support;\n var drawing = kendo.drawing;\n var Path = drawing.Path;\n var Animation = drawing.Animation;\n var AnimationFactory = drawing.AnimationFactory;\n var Group = drawing.Group;\n var Circle = drawing.Circle;\n var MultiPath = drawing.MultiPath;\n var Color = kendo.Color;\n var geometry = kendo.geometry;\n var GeometryPoint = geometry.Point;\n var GeometryCircle = geometry.Circle;\n var transform = geometry.transform;\n\n var ChartAxis = Class.extend({\n init: function(axis) {\n\n this._axis = axis;\n this.options = axis.options;\n },\n\n value: function(point) {\n var axis = this._axis;\n var value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n\n return value;\n },\n\n slot: function(from, to, limit) {\n if (limit === void 0) { limit = true; }\n\n return this._axis.slot(from, to, limit);\n },\n\n range: function() {\n return this._axis.range();\n },\n\n valueRange: function() {\n return this._axis.valueRange();\n }\n });\n\n function findAxisByName(name, axes) {\n for (var idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n axes[idx].prepareUserOptions();\n return new ChartAxis(axes[idx]);\n }\n }\n }\n\n var ChartPane = kendo.Class.extend({\n init: function(pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this._pane = pane;\n },\n\n findAxisByName: function(name) {\n return findAxisByName(name, this._pane.axes);\n }\n });\n\n var ChartPlotArea = Class.extend({\n init: function(plotArea) {\n\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n });\n\n function countNumbers(values) {\n var length = values.length;\n var count = 0;\n\n for (var i = 0; i < length; i++) {\n var num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n\n return count;\n }\n\n var Aggregates = {\n min: function(values) {\n var length = values.length;\n var min = MAX_VALUE;\n\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n min = Math.min(min, value);\n }\n }\n\n return min === MAX_VALUE ? values[0] : min;\n },\n\n max: function(values) {\n var length = values.length;\n var max = MIN_VALUE;\n\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n max = Math.max(max, value);\n }\n }\n\n return max === MIN_VALUE ? values[0] : max;\n },\n\n sum: function(values) {\n var length = values.length;\n var sum = 0;\n\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n\n return sum;\n },\n\n sumOrNull: function(values) {\n var result = null;\n\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n\n return result;\n },\n\n count: function(values) {\n var length = values.length;\n var count = 0;\n\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n\n return count;\n },\n\n avg: function(values) {\n var count = countNumbers(values);\n var result = values[0];\n\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n\n return result;\n },\n\n first: function(values) {\n var length = values.length;\n\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n return value;\n }\n }\n\n return values[0];\n }\n };\n\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n\n var get = getter(field, true);\n return get(row);\n }\n\n var SeriesBinder = Class.extend({\n init: function() {\n\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n },\n\n register: function(seriesTypes, valueFields, otherFields) {\n var this$1$1 = this;\n if (valueFields === void 0) { valueFields = [ VALUE ]; }\n if (otherFields === void 0) { otherFields = {}; }\n\n for (var i = 0; i < seriesTypes.length; i++) {\n var type = seriesTypes[i];\n\n this$1$1._valueFields[type] = valueFields;\n this$1$1._otherFields[type] = otherFields;\n this$1$1._nullValue[type] = this$1$1._makeValue(valueFields, null);\n this$1$1._undefinedValue[type] = this$1$1._makeValue(valueFields, undefined);\n }\n },\n\n canonicalFields: function(series) {\n return this.valueFields(series).concat(this.otherFields(series));\n },\n\n valueFields: function(series) {\n return this._valueFields[series.type] || [ VALUE ];\n },\n\n otherFields: function(series) {\n return this._otherFields[series.type] || [ VALUE ];\n },\n\n bindPoint: function(series, pointIx, item) {\n var data = series.data;\n var pointData = defined(item) ? item : data[pointIx];\n var result = { valueFields: { value: pointData } };\n var valueFields = this.valueFields(series);\n var otherFields = this._otherFields[series.type];\n var fields, value;\n\n if (pointData === null) {\n value = this._nullValue[series.type];\n } else if (!defined(pointData)) {\n value = this._undefinedValue[series.type];\n } else if (Array.isArray(pointData)) {\n var fieldData = pointData.slice(valueFields.length);\n value = this._bindFromArray(pointData, valueFields);\n fields = this._bindFromArray(fieldData, otherFields);\n } else if (typeof pointData === \"object\") {\n var srcValueFields = this.sourceFields(series, valueFields);\n var srcPointFields = this.sourceFields(series, otherFields);\n\n value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\n }\n\n if (defined(value)) {\n if (valueFields.length === 1) {\n result.valueFields.value = value[valueFields[0]];\n } else {\n result.valueFields = value;\n }\n }\n\n result.fields = fields || {};\n\n return result;\n },\n\n _makeValue: function(fields, initialValue) {\n var value = {};\n var length = fields.length;\n\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n\n return value;\n },\n\n _bindFromArray: function(array, fields) {\n var value = {};\n\n if (fields) {\n var length = Math.min(fields.length, array.length);\n\n for (var i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n\n return value;\n },\n\n _bindFromObject: function(object, fields, srcFields) {\n if (srcFields === void 0) { srcFields = fields; }\n\n var value = {};\n\n if (fields) {\n var length = fields.length;\n\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n var srcFieldName = srcFields[i];\n if (srcFieldName !== null) {\n value[fieldName] = getField(srcFieldName, object);\n }\n }\n }\n\n return value;\n },\n\n sourceFields: function(series, canonicalFields) {\n var sourceFields = [];\n\n if (canonicalFields) {\n var length = canonicalFields.length;\n\n for (var i = 0; i < length; i++) {\n var fieldName = canonicalFields[i];\n var sourceFieldName = fieldName === VALUE ? \"field\" : fieldName + \"Field\";\n\n sourceFields.push(series[sourceFieldName] !== null ? (series[sourceFieldName] || fieldName) : null);\n }\n }\n\n return sourceFields;\n }\n });\n\n SeriesBinder.current = new SeriesBinder();\n\n var STD_ERR = \"stderr\";\n var STD_DEV = \"stddev\";\n var percentRegex = /percent(?:\\w*)\\((\\d+)\\)/;\n var standardDeviationRegex = new RegExp(\"^\" + STD_DEV + \"(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$\");\n\n var ErrorRangeCalculator = Class.extend({\n init: function(errorValue, series, field) {\n\n this.initGlobalRanges(errorValue, series, field);\n },\n\n initGlobalRanges: function(errorValue, series, field) {\n var data = series.data;\n var deviationMatch = standardDeviationRegex.exec(errorValue);\n\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\n\n var average = this.getAverage(data);\n var deviation = this.getStandardDeviation(data, average, false);\n var multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1;\n var errorRange = { low: average.value - deviation * multiple, high: average.value + deviation * multiple };\n\n this.globalRange = function() {\n return errorRange;\n };\n } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\n this.valueGetter = this.createValueGetter(series, field);\n var standardError = this.getStandardError(data, this.getAverage(data));\n\n this.globalRange = function(value) {\n return { low: value - standardError, high: value + standardError };\n };\n }\n },\n\n createValueGetter: function(series, field) {\n var data = series.data;\n var binder = SeriesBinder.current;\n var valueFields = binder.valueFields(series);\n var item = defined(data[0]) ? data[0] : {};\n var valueGetter;\n\n if (isArray(item)) {\n var index = field ? valueFields.indexOf(field) : 0;\n valueGetter = getter(\"[\" + index + \"]\");\n } else if (isNumber(item)) {\n valueGetter = getter();\n } else if (typeof item === datavizConstants.OBJECT) {\n var srcValueFields = binder.sourceFields(series, valueFields);\n valueGetter = getter(srcValueFields[valueFields.indexOf(field)]);\n }\n\n return valueGetter;\n },\n\n getErrorRange: function(pointValue, errorValue) {\n var low, high, value;\n\n if (!defined(errorValue)) {\n return null;\n }\n\n if (this.globalRange) {\n return this.globalRange(pointValue);\n }\n\n if (isArray(errorValue)) {\n low = pointValue - errorValue[0];\n high = pointValue + errorValue[1];\n } else if (isNumber(value = parseFloat(errorValue))) {\n low = pointValue - value;\n high = pointValue + value;\n } else if ((value = percentRegex.exec(errorValue))) {\n var percentValue = pointValue * (parseFloat(value[1]) / 100);\n low = pointValue - Math.abs(percentValue);\n high = pointValue + Math.abs(percentValue);\n } else {\n throw new Error(\"Invalid ErrorBar value: \" + errorValue);\n }\n\n return { low: low, high: high };\n },\n\n getStandardError: function(data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n },\n\n getStandardDeviation: function(data, average, isSample) {\n var this$1$1 = this;\n\n var length = data.length;\n var total = isSample ? average.count - 1 : average.count;\n var squareDifferenceSum = 0;\n\n for (var idx = 0; idx < length; idx++) {\n var value = this$1$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n\n return Math.sqrt(squareDifferenceSum / total);\n },\n\n getAverage: function(data) {\n var this$1$1 = this;\n\n var length = data.length;\n var sum = 0;\n var count = 0;\n\n for (var idx = 0; idx < length; idx++) {\n var value = this$1$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n\n return {\n value: sum / count,\n count: count\n };\n }\n });\n\n var browser = support.browser || {};\n\n var INITIAL_ANIMATION_DURATION = 600;\n var FADEIN = \"fadeIn\";\n\n var GLASS = \"glass\";\n var BORDER_BRIGHTNESS = 0.8;\n var TOOLTIP_OFFSET = 5;\n var START_SCALE = browser.msie ? 0.001 : 0;\n var ERROR_LOW_FIELD = \"errorLow\";\n var ERROR_HIGH_FIELD = \"errorHigh\";\n var X_ERROR_LOW_FIELD = \"xErrorLow\";\n var X_ERROR_HIGH_FIELD = \"xErrorHigh\";\n var Y_ERROR_LOW_FIELD = \"yErrorLow\";\n var Y_ERROR_HIGH_FIELD = \"yErrorHigh\";\n var LINE_MARKER_SIZE = 8;\n var ZERO = \"zero\";\n var INTERPOLATE = \"interpolate\";\n var GAP = \"gap\";\n var ABOVE = \"above\";\n var BELOW = \"below\";\n\n var SMOOTH = \"smooth\";\n var STEP = \"step\";\n\n var AREA = \"area\";\n var BAR = \"bar\";\n var BOX_PLOT = \"boxPlot\";\n var BUBBLE = \"bubble\";\n var BULLET = \"bullet\";\n var CANDLESTICK = \"candlestick\";\n var COLUMN = \"column\";\n var DONUT = \"donut\";\n var FUNNEL = \"funnel\";\n var PYRAMID = \"pyramid\";\n var HEATMAP = \"heatmap\";\n var HORIZONTAL_WATERFALL = \"horizontalWaterfall\";\n var LINE = \"line\";\n var OHLC = \"ohlc\";\n var PIE = \"pie\";\n var POLAR_AREA = \"polarArea\";\n var POLAR_LINE = \"polarLine\";\n var POLAR_SCATTER = \"polarScatter\";\n var RADAR_AREA = \"radarArea\";\n var RADAR_COLUMN = \"radarColumn\";\n var RADAR_LINE = \"radarLine\";\n var RANGE_AREA = \"rangeArea\";\n var RANGE_BAR = \"rangeBar\";\n var RANGE_COLUMN = \"rangeColumn\";\n var SCATTER = \"scatter\";\n var SCATTER_LINE = \"scatterLine\";\n var VERTICAL_AREA = \"verticalArea\";\n var VERTICAL_BOX_PLOT = \"verticalBoxPlot\";\n var VERTICAL_BULLET = \"verticalBullet\";\n var VERTICAL_LINE = \"verticalLine\";\n var VERTICAL_RANGE_AREA = \"verticalRangeArea\";\n var WATERFALL = \"waterfall\";\n var EQUALLY_SPACED_SERIES = [\n BAR, COLUMN, OHLC, CANDLESTICK, BOX_PLOT, VERTICAL_BOX_PLOT,\n BULLET, RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL\n ];\n\n var TRENDLINE_EXPONENTIAL = 'exponentialTrendline';\n var TRENDLINE_LINEAR = 'linearTrendline';\n var TRENDLINE_LOGARITHMIC = 'logarithmicTrendline';\n var TRENDLINE_MOVING_AVERAGE = 'movingAverageTrendline';\n var TRENDLINE_POLYNOMIAL = 'polynomialTrendline';\n var TRENDLINE_POWER = 'powerTrendline';\n var TRENDLINE_SERIES = [\n TRENDLINE_EXPONENTIAL,\n TRENDLINE_LINEAR,\n TRENDLINE_LOGARITHMIC,\n TRENDLINE_MOVING_AVERAGE,\n TRENDLINE_POLYNOMIAL,\n TRENDLINE_POWER\n ];\n\n var LEGEND_ITEM_CLICK = \"legendItemClick\";\n var LEGEND_ITEM_HOVER = \"legendItemHover\";\n var LEGEND_ITEM_LEAVE = \"legendItemLeave\";\n var SERIES_CLICK = \"seriesClick\";\n var SERIES_HOVER = \"seriesHover\";\n var SERIES_OVER = \"seriesOver\";\n var SERIES_LEAVE = \"seriesLeave\";\n var PLOT_AREA_CLICK = \"plotAreaClick\";\n var PLOT_AREA_HOVER = \"plotAreaHover\";\n var PLOT_AREA_LEAVE = \"plotAreaLeave\";\n var DRAG = \"drag\";\n var DRAG_END = \"dragEnd\";\n var DRAG_START = \"dragStart\";\n var ZOOM_START = \"zoomStart\";\n var ZOOM = \"zoom\";\n var ZOOM_END = \"zoomEnd\";\n var SELECT_START = \"selectStart\";\n var SELECT = \"select\";\n var SELECT_END = \"selectEnd\";\n var RENDER = \"render\";\n var SHOW_TOOLTIP = \"showTooltip\";\n var HIDE_TOOLTIP = \"hideTooltip\";\n var PANE_RENDER = \"paneRender\";\n\n var CHART_POINT_ROLE = \"graphics-symbol\";\n var CHART_POINT_CLASSNAME = \"k-chart-point\";\n var CHART_POINT_ROLE_DESCRIPTION = \"Point\";\n var LEGEND_ITEM_ROLE = \"checkbox\";\n var LEGEND_ITEM_CLASSNAME = \"k-chart-legend-item\";\n var LEGEND_ITEM_ARIA_ROLE_DESCRIPTION = \"Legend item\";\n\n var LOGARITHMIC = \"log\";\n var CATEGORY = \"category\";\n\n var INSIDE_END = \"insideEnd\";\n var INSIDE_BASE = \"insideBase\";\n var OUTSIDE_END = \"outsideEnd\";\n\n var MOUSEWHEEL = \"wheel\";\n var MOUSEWHEEL_DELAY = 150;\n var MOUSEWHEEL_ZOOM_RATE = 0.3;\n\n var DRILLDOWN = \"drilldown\";\n var DRILLDOWN_FIELD = \"drilldown\";\n\n var MIN_MOVING_AVERAGE_PERIOD = 2;\n\n var constants = {\n \tINITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n \tFADEIN: FADEIN,\n \tLEGEND_ITEM_CLICK: LEGEND_ITEM_CLICK,\n \tLEGEND_ITEM_HOVER: LEGEND_ITEM_HOVER,\n \tLEGEND_ITEM_LEAVE: LEGEND_ITEM_LEAVE,\n \tSERIES_CLICK: SERIES_CLICK,\n \tSERIES_HOVER: SERIES_HOVER,\n \tSERIES_OVER: SERIES_OVER,\n \tSERIES_LEAVE: SERIES_LEAVE,\n \tGLASS: GLASS,\n \tBORDER_BRIGHTNESS: BORDER_BRIGHTNESS,\n \tTOOLTIP_OFFSET: TOOLTIP_OFFSET,\n \tSTART_SCALE: START_SCALE,\n \tERROR_LOW_FIELD: ERROR_LOW_FIELD,\n \tERROR_HIGH_FIELD: ERROR_HIGH_FIELD,\n \tX_ERROR_LOW_FIELD: X_ERROR_LOW_FIELD,\n \tX_ERROR_HIGH_FIELD: X_ERROR_HIGH_FIELD,\n \tY_ERROR_LOW_FIELD: Y_ERROR_LOW_FIELD,\n \tY_ERROR_HIGH_FIELD: Y_ERROR_HIGH_FIELD,\n \tLINE_MARKER_SIZE: LINE_MARKER_SIZE,\n \tINTERPOLATE: INTERPOLATE,\n \tZERO: ZERO,\n \tSMOOTH: SMOOTH,\n \tSTEP: STEP,\n \tCATEGORY: CATEGORY,\n \tFUNNEL: FUNNEL,\n \tPYRAMID: PYRAMID,\n \tBAR: BAR,\n \tCANDLESTICK: CANDLESTICK,\n \tPIE: PIE,\n \tCOLUMN: COLUMN,\n \tAREA: AREA,\n \tVERTICAL_BULLET: VERTICAL_BULLET,\n \tBOX_PLOT: BOX_PLOT,\n \tOHLC: OHLC,\n \tWATERFALL: WATERFALL,\n \tLINE: LINE,\n \tBULLET: BULLET,\n \tVERTICAL_LINE: VERTICAL_LINE,\n \tVERTICAL_AREA: VERTICAL_AREA,\n \tRANGE_AREA: RANGE_AREA,\n \tVERTICAL_RANGE_AREA: VERTICAL_RANGE_AREA,\n \tRANGE_COLUMN: RANGE_COLUMN,\n \tVERTICAL_BOX_PLOT: VERTICAL_BOX_PLOT,\n \tRANGE_BAR: RANGE_BAR,\n \tHORIZONTAL_WATERFALL: HORIZONTAL_WATERFALL,\n \tSCATTER: SCATTER,\n \tSCATTER_LINE: SCATTER_LINE,\n \tBUBBLE: BUBBLE,\n \tRADAR_AREA: RADAR_AREA,\n \tRADAR_LINE: RADAR_LINE,\n \tRADAR_COLUMN: RADAR_COLUMN,\n \tPOLAR_LINE: POLAR_LINE,\n \tPOLAR_AREA: POLAR_AREA,\n \tPOLAR_SCATTER: POLAR_SCATTER,\n \tRENDER: RENDER,\n \tPLOT_AREA_CLICK: PLOT_AREA_CLICK,\n \tPLOT_AREA_HOVER: PLOT_AREA_HOVER,\n \tPLOT_AREA_LEAVE: PLOT_AREA_LEAVE,\n \tLOGARITHMIC: LOGARITHMIC,\n \tDRAG: DRAG,\n \tDRAG_START: DRAG_START,\n \tDRAG_END: DRAG_END,\n \tZOOM_START: ZOOM_START,\n \tZOOM: ZOOM,\n \tZOOM_END: ZOOM_END,\n \tSELECT_START: SELECT_START,\n \tSELECT: SELECT,\n \tSELECT_END: SELECT_END,\n \tPANE_RENDER: PANE_RENDER,\n \tGAP: GAP,\n \tDONUT: DONUT,\n \tINSIDE_END: INSIDE_END,\n \tINSIDE_BASE: INSIDE_BASE,\n \tOUTSIDE_END: OUTSIDE_END,\n \tMOUSEWHEEL: MOUSEWHEEL,\n \tMOUSEWHEEL_DELAY: MOUSEWHEEL_DELAY,\n \tMOUSEWHEEL_ZOOM_RATE: MOUSEWHEEL_ZOOM_RATE,\n \tSHOW_TOOLTIP: SHOW_TOOLTIP,\n \tHIDE_TOOLTIP: HIDE_TOOLTIP,\n \tEQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n \tABOVE: ABOVE,\n \tBELOW: BELOW,\n \tHEATMAP: HEATMAP,\n \tDRILLDOWN: DRILLDOWN,\n \tDRILLDOWN_FIELD: DRILLDOWN_FIELD,\n \tMIN_MOVING_AVERAGE_PERIOD: MIN_MOVING_AVERAGE_PERIOD,\n \tTRENDLINE_SERIES: TRENDLINE_SERIES,\n \tTRENDLINE_EXPONENTIAL: TRENDLINE_EXPONENTIAL,\n \tTRENDLINE_LINEAR: TRENDLINE_LINEAR,\n \tTRENDLINE_LOGARITHMIC: TRENDLINE_LOGARITHMIC,\n \tTRENDLINE_MOVING_AVERAGE: TRENDLINE_MOVING_AVERAGE,\n \tTRENDLINE_POLYNOMIAL: TRENDLINE_POLYNOMIAL,\n \tTRENDLINE_POWER: TRENDLINE_POWER,\n \tCHART_POINT_ROLE: CHART_POINT_ROLE,\n \tCHART_POINT_CLASSNAME: CHART_POINT_CLASSNAME,\n \tCHART_POINT_ROLE_DESCRIPTION: CHART_POINT_ROLE_DESCRIPTION,\n \tLEGEND_ITEM_ROLE: LEGEND_ITEM_ROLE,\n \tLEGEND_ITEM_CLASSNAME: LEGEND_ITEM_CLASSNAME,\n \tLEGEND_ITEM_ARIA_ROLE_DESCRIPTION: LEGEND_ITEM_ARIA_ROLE_DESCRIPTION\n };\n\n var DEFAULT_ERROR_BAR_WIDTH = 4;\n\n var ErrorBarBase = ChartElement.extend({\n init: function(low, high, isVertical, chart, series, options) {\n ChartElement.fn.init.call(this, options);\n\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\n },\n\n reflow: function(targetBox) {\n var endCaps = this.options.endCaps;\n var isVertical = this.isVertical;\n var axis = this.getAxis();\n var valueBox = axis.getSlot(this.low, this.high);\n var centerBox = targetBox.center();\n var capsWidth = this.getCapsWidth(targetBox, isVertical);\n var capValue = isVertical ? centerBox.x : centerBox.y;\n var capStart = capValue - capsWidth;\n var capEnd = capValue + capsWidth;\n var linePoints;\n\n if (isVertical) {\n linePoints = [\n new Point(centerBox.x, valueBox.y1),\n new Point(centerBox.x, valueBox.y2)\n ];\n if (endCaps) {\n linePoints.push(new Point(capStart, valueBox.y1),\n new Point(capEnd, valueBox.y1),\n new Point(capStart, valueBox.y2),\n new Point(capEnd, valueBox.y2));\n }\n this.box = new Box(capStart, valueBox.y1, capEnd, valueBox.y2);\n } else {\n linePoints = [\n new Point(valueBox.x1, centerBox.y),\n new Point(valueBox.x2, centerBox.y)\n ];\n if (endCaps) {\n linePoints.push(new Point(valueBox.x1, capStart),\n new Point(valueBox.x1, capEnd),\n new Point(valueBox.x2, capStart),\n new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n\n this.linePoints = linePoints;\n },\n\n getCapsWidth: function(box, isVertical) {\n var boxSize = isVertical ? box.width() : box.height();\n var capsWidth = Math.min(Math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n\n return capsWidth;\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var visual = options.visual;\n\n if (visual) {\n this.visual = visual({\n low: this.low,\n high: this.high,\n rect: this.box.toRect(),\n sender: this.getSender(),\n options: {\n endCaps: options.endCaps,\n color: options.color,\n line: options.line\n },\n createVisual: function () {\n this$1$1.createDefaultVisual();\n var defaultVisual = this$1$1.visual;\n delete this$1$1.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n },\n\n createDefaultVisual: function() {\n var this$1$1 = this;\n\n var ref = this;\n var options = ref.options;\n var linePoints = ref.linePoints;\n var lineOptions = {\n stroke: {\n color: options.color,\n width: options.line.width,\n dashType: options.line.dashType\n }\n };\n\n ChartElement.fn.createVisual.call(this);\n\n for (var idx = 0; idx < linePoints.length; idx += 2) {\n var line = new Path(lineOptions)\n .moveTo(linePoints[idx].x, linePoints[idx].y)\n .lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n\n alignPathToPixel(line);\n this$1$1.visual.append(line);\n }\n }\n });\n\n setDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: {\n width: 2\n },\n zIndex: 1\n });\n\n var CategoricalErrorBar = ErrorBarBase.extend({\n getAxis: function() {\n var axis = this.chart.seriesValueAxis(this.series);\n\n return axis;\n }\n });\n\n function anyHasZIndex(elements) {\n for (var idx = 0; idx < elements.length; idx++) {\n if (defined(elements[idx].zIndex)) {\n return true;\n }\n }\n }\n\n function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n }\n\n function areNumbers(values) {\n return countNumbers(values) === values.length;\n }\n\n function segmentVisible(series, fields, index) {\n var visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n\n var pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n }\n\n function bindSegments(series) {\n var data = series.data;\n var points = [];\n var sum = 0;\n var count = 0;\n\n for (var idx = 0; idx < data.length; idx++) {\n var pointData = SeriesBinder.current.bindPoint(series, idx);\n var value = pointData.valueFields.value;\n\n if (isString(value)) {\n value = parseFloat(value);\n }\n\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n\n pointData.value = Math.abs(value);\n points.push(pointData);\n\n if (pointData.visible) {\n sum += pointData.value;\n }\n\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n\n return {\n total: sum,\n points: points,\n count: count\n };\n }\n\n function categoriesCount(series) {\n var seriesCount = series.length;\n var categories = 0;\n\n for (var i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n\n return categories;\n }\n\n function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n\n return a === b;\n }\n\n var MAX_EXPAND_DEPTH = 5;\n\n function evalOptions(options, context, state, dryRun) {\n if (state === void 0) { state = {}; }\n if (dryRun === void 0) { dryRun = false; }\n\n var defaults = state.defaults = state.defaults || {};\n var depth = state.depth = state.depth || 0;\n var needsEval = false;\n\n state.excluded = state.excluded || [];\n\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\n\n for (var property in options) {\n if (!inArray(property, state.excluded) && dataviz.hasOwnProperty(options, property)) {\n var propValue = options[property];\n if (isFunction(propValue)) {\n needsEval = true;\n if (!dryRun) {\n options[property] = valueOrDefault(propValue(context), defaults[property]);\n }\n } else if (isObject(propValue)) {\n if (!dryRun) {\n state.defaults = defaults[property];\n }\n state.depth++;\n needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\n state.depth--;\n }\n }\n }\n\n return needsEval;\n }\n\n function filterSeriesByType(series, types) {\n var result = [];\n\n var seriesTypes = [].concat(types);\n for (var idx = 0; idx < series.length; idx++) {\n var currentSeries = series[idx];\n if (inArray(currentSeries.type, seriesTypes)) {\n result.push(currentSeries);\n }\n }\n\n return result;\n }\n\n var dateCache = new WeakMap();\n\n function parseDateCategory(category, row, intlService) {\n if (row === null || typeof row !== 'object') {\n return parseDate(intlService, category);\n }\n\n var date = dateCache.get(row);\n if (!date) {\n date = parseDate(intlService, category);\n dateCache.set(row, date);\n }\n\n return date;\n }\n\n function hasGradientOverlay(options) {\n var overlay = options.overlay;\n\n return overlay && overlay.gradient && overlay.gradient !== \"none\";\n }\n\n function hasValue(value) {\n return defined(value) && value !== null;\n }\n\n function isDateAxis(axisOptions, sampleCategory) {\n var type = axisOptions.type;\n var dateCategory = sampleCategory instanceof Date;\n\n return (!type && dateCategory) || equalsIgnoreCase(type, DATE);\n }\n\n function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n }\n\n var AREA_REGEX = /area/i;\n\n function seriesMissingValues(series) {\n if (series.missingValues) {\n return series.missingValues;\n }\n\n return AREA_REGEX.test(series.type) || series.stack ? ZERO : INTERPOLATE;\n }\n\n function hasValue$1(series, item) {\n var fields = SeriesBinder.current.bindPoint(series, null, item);\n var valueFields = fields.valueFields;\n\n for (var field in valueFields) {\n if (dataviz.convertableToNumber(valueFields[field])) {\n return true;\n }\n }\n }\n\n function findNext(ref) {\n var start = ref.start;\n var dir = ref.dir;\n var min = ref.min;\n var max = ref.max;\n var getter$$1 = ref.getter;\n var hasItem = ref.hasItem;\n var series = ref.series;\n\n var pointHasValue, outPoint;\n var idx = start;\n do {\n idx += dir;\n //aggregating and binding the item takes too much time for large number of categories\n //will assume that if the aggregation does not create value for a missing item for one it will not create for others\n if (hasItem(idx)) {\n outPoint = getter$$1(idx);\n pointHasValue = hasValue$1(series, outPoint.item);\n }\n } while (min <= idx && idx <= max && !pointHasValue);\n\n if (pointHasValue) {\n return outPoint;\n }\n }\n\n function createOutOfRangePoints(series, range, count, getter$$1, hasItem) {\n var min = range.min;\n var max = range.max;\n var hasMinPoint = min > 0 && min < count;\n var hasMaxPoint = max + 1 < count;\n\n if (hasMinPoint || hasMaxPoint) {\n var missingValues = seriesMissingValues(series);\n var minPoint, maxPoint;\n if (missingValues !== INTERPOLATE) {\n if (hasMinPoint) {\n minPoint = getter$$1(min - 1);\n }\n\n if (hasMaxPoint) {\n maxPoint = getter$$1(max + 1);\n }\n } else {\n var outPoint, pointHasValue;\n if (hasMinPoint) {\n outPoint = getter$$1(min - 1);\n pointHasValue = hasValue$1(series, outPoint.item);\n if (!pointHasValue) {\n minPoint = findNext({\n start: min,\n dir: -1,\n min: 0,\n max: count - 1,\n getter: getter$$1,\n hasItem: hasItem,\n series: series\n });\n } else {\n minPoint = outPoint;\n }\n }\n\n if (hasMaxPoint) {\n outPoint = getter$$1(max + 1);\n pointHasValue = hasValue$1(series, outPoint.item);\n if (!pointHasValue) {\n maxPoint = findNext({\n start: max,\n dir: 1,\n min: 0,\n max: count - 1,\n getter: getter$$1,\n hasItem: hasItem,\n series: series\n });\n } else {\n maxPoint = outPoint;\n }\n }\n }\n\n if (minPoint) {\n series._outOfRangeMinPoint = minPoint;\n }\n\n if (maxPoint) {\n series._outOfRangeMaxPoint = maxPoint;\n }\n }\n }\n\n var CategoricalChart = ChartElement.extend({\n init: function(plotArea, options) {\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n\n // Value axis ranges grouped by axis name, e.g.:\n // primary: { min: 0, max: 1 }\n this.valueAxisRanges = {};\n\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n\n this.render();\n },\n\n render: function() {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n\n pointOptions: function(series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({ }, defaults, {\n vertical: !this.options.invertAxes\n }, series);\n }\n\n return options;\n },\n\n plotValue: function(point) {\n if (!point) {\n return 0;\n }\n\n if (this.options.isStacked100 && isNumber(point.value)) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n var otherValues = [];\n var categorySum = 0;\n\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (other) {\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n\n if ((stack && otherStack) && stack.group !== otherStack.group) {\n continue;\n }\n\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n\n return point.value;\n },\n\n plotRange: function(point, startValue) {\n var this$1$1 = this;\n if (startValue === void 0) { startValue = 0; }\n\n var categoryPoints = this.categoryPoints[point.categoryIx];\n\n if (this.options.isStacked) {\n var plotValue = this.plotValue(point);\n var positive = plotValue >= 0;\n var prevValue = startValue;\n var isStackedBar = false;\n var stack = defined(point.series.stack) ? point.series.stack : this.options.defaultStack;\n var isNonGroupStack = function (stack) { return stack === true || typeof stack === datavizConstants.OBJECT && !stack.group; };\n\n if (stack) {\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n\n if (point === other) {\n break;\n }\n\n var otherStack = defined(other.series.stack) ? other.series.stack : this$1$1.options.defaultStack;\n\n if (!otherStack) {\n continue;\n }\n\n if (typeof stack === datavizConstants.STRING && stack !== otherStack) {\n continue;\n }\n\n if (isNonGroupStack(stack) && !isNonGroupStack(otherStack)) {\n continue;\n }\n\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n\n var otherValue = this$1$1.plotValue(other);\n if ((otherValue >= 0 && positive) ||\n (otherValue < 0 && !positive)) {\n // zero values should be skipped for log axis (startValue !== 0)\n if (startValue === 0 || otherValue !== 0) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n\n if (this$1$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n }\n }\n\n if (isStackedBar) {\n prevValue -= startValue;\n }\n\n return [ prevValue, plotValue ];\n }\n\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n return [ axisCrossingValue, dataviz.convertableToNumber(point.value) ? point.value : axisCrossingValue ];\n },\n\n stackLimits: function(axisName, stackName) {\n var this$1$1 = this;\n\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n\n for (var i = 0; i < this.categoryPoints.length; i++) {\n var categoryPoints = this$1$1.categoryPoints[i];\n if (!categoryPoints) {\n continue;\n }\n\n for (var pIx = 0; pIx < categoryPoints.length; pIx++) {\n var point = categoryPoints[pIx];\n if (point) {\n if (point.series.stack === stackName || point.series.axis === axisName) {\n var to = this$1$1.plotRange(point, 0)[1];\n if (defined(to) && isFinite(to)) {\n max = Math.max(max, to);\n min = Math.min(min, to);\n }\n }\n }\n }\n }\n\n return { min: min, max: max };\n },\n\n updateStackRange: function() {\n var this$1$1 = this;\n\n var ref = this.options;\n var isStacked = ref.isStacked;\n var chartSeries = ref.series;\n var limitsCache = {};\n\n if (isStacked) {\n for (var i = 0; i < chartSeries.length; i++) {\n var series = chartSeries[i];\n var axisName = series.axis;\n var key = axisName + series.stack;\n\n var limits = limitsCache[key];\n if (!limits) {\n limits = this$1$1.stackLimits(axisName, series.stack);\n\n var errorTotals = this$1$1.errorTotals;\n if (errorTotals) {\n if (errorTotals.negative.length) {\n limits.min = Math.min(limits.min, dataviz.sparseArrayLimits(errorTotals.negative).min);\n }\n if (errorTotals.positive.length) {\n limits.max = Math.max(limits.max, dataviz.sparseArrayLimits(errorTotals.positive).max);\n }\n }\n\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n\n if (limits) {\n this$1$1.valueAxisRanges[axisName] = limits;\n }\n }\n }\n },\n\n addErrorBar: function(point, data, categoryIx) {\n var value = point.value;\n var series = point.series;\n var seriesIx = point.seriesIx;\n var errorBars = point.options.errorBars;\n var lowValue = data.fields[ERROR_LOW_FIELD];\n var highValue = data.fields[ERROR_HIGH_FIELD];\n var errorRange;\n\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = { low: lowValue, high: highValue };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] ||\n new ErrorRangeCalculator(errorBars.value, series, VALUE);\n\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\n }\n },\n\n addPointErrorBar: function(point, categoryIx) {\n var isVertical = !this.options.invertAxes;\n var options = point.options.errorBars;\n var series = point.series;\n var low = point.low;\n var high = point.high;\n\n if (this.options.isStacked) {\n var stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n low = stackedErrorRange.low;\n high = stackedErrorRange.high;\n } else {\n var fields = { categoryIx: categoryIx, series: series };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n\n var errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [ errorBar ];\n point.append(errorBar);\n },\n\n stackedErrorRange: function(point, categoryIx) {\n var plotValue = this.plotRange(point, 0)[1] - point.value;\n var low = point.low + plotValue;\n var high = point.high + plotValue;\n\n this.errorTotals = this.errorTotals || { positive: [], negative: [] };\n\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n\n return { low: low, high: high };\n },\n\n addValue: function(data, fields) {\n var categoryIx = fields.categoryIx;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n\n var categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n var seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n\n var point = this.createPoint(data, fields);\n if (point) {\n $.extend(point, fields);\n\n point.owner = this;\n point.noteText = data.fields.noteText;\n if (!defined(point.dataItem)) {\n point.dataItem = series.data[categoryIx];\n }\n this.addErrorBar(point, data, categoryIx);\n }\n\n this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n\n this.updateRange(data.valueFields, fields);\n },\n\n evalPointOptions: function(options, value, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = {\n defaults: series._defaults,\n excluded: [\n \"data\", \"aggregate\", \"_events\", \"tooltip\", \"content\", \"template\",\n \"visual\", \"toggle\", \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\",\n \"drilldownSeriesFactory\", \"ariaTemplate\", \"ariaContent\"\n ]\n };\n\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, pointOptions);\n evalOptions(pointOptions, {\n value: value,\n category: category,\n index: categoryIx,\n series: series,\n dataItem: series.data[categoryIx]\n }, state);\n }\n\n return pointOptions;\n },\n\n updateRange: function(data, fields) {\n var axisName = fields.series.axis;\n var value = data.value;\n var axisRange = this.valueAxisRanges[axisName];\n\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\n }\n },\n\n seriesValueAxis: function(series) {\n var plotArea = this.plotArea;\n var axisName = series.axis;\n var axis = axisName ? plotArea.namedValueAxes[axisName] : plotArea.valueAxis;\n\n if (!axis) {\n throw new Error(\"Unable to locate value axis with name \" + axisName);\n }\n\n return axis;\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var categorySlots = this.categorySlots = [];\n var chartPoints = this.points;\n var categoryAxis = this.categoryAxis;\n var pointIx = 0;\n\n this.traverseDataPoints(function (data, fields) {\n var categoryIx = fields.categoryIx;\n var currentSeries = fields.series;\n\n var valueAxis = this$1$1.seriesValueAxis(currentSeries);\n var point = chartPoints[pointIx++];\n\n var categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot =\n this$1$1.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n\n if (point) {\n var plotRange = this$1$1.plotRange(point, valueAxis.startValue());\n var valueSlot = this$1$1.valueSlot(valueAxis, plotRange);\n if (valueSlot) {\n var pointSlot = this$1$1.pointSlot(categorySlot, valueSlot);\n\n point.aboveAxis = this$1$1.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n\n if (this$1$1.options.isStacked100) {\n point.percentage = this$1$1.plotValue(point);\n }\n\n this$1$1.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.reflowCategories(categorySlots);\n if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n\n this.box = targetBox;\n },\n\n valueSlot: function(valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n },\n\n limitPoints: function() {\n var this$1$1 = this;\n\n var categoryPoints = this.categoryPoints;\n var points = categoryPoints[0].concat(last(categoryPoints));\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx]) {\n this$1$1.limitPoint(points[idx]);\n }\n }\n },\n\n limitPoint: function(point) {\n var limitedSlot = this.categoryAxis.limitSlot(point.box);\n if (!limitedSlot.equals(point.box)) {\n point.reflow(limitedSlot);\n }\n },\n\n aboveAxis: function(point, valueAxis) {\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n var value = point.value;\n\n return valueAxis.options.reverse ?\n value < axisCrossingValue : value >= axisCrossingValue;\n },\n\n categoryAxisCrossingValue: function(valueAxis) {\n var categoryAxis = this.categoryAxis;\n var options = valueAxis.options;\n var crossingValues = [].concat(\n options.axisCrossingValues || options.axisCrossingValue\n );\n\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n },\n\n reflowPoint: function(point, pointSlot) {\n point.reflow(pointSlot);\n },\n\n reflowCategories: function() { },\n\n pointSlot: function(categorySlot, valueSlot) {\n var options = this.options;\n var invertAxes = options.invertAxes;\n var slotX = invertAxes ? valueSlot : categorySlot;\n var slotY = invertAxes ? categorySlot : valueSlot;\n\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n\n categorySlot: function(categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var series = this.options.series;\n var count = categoriesCount(series);\n var seriesCount = series.length;\n\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this$1$1._outOfRangeCallback(series[seriesIx], \"_outOfRangeMinPoint\", seriesIx, callback);\n }\n\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n for (var seriesIx$1 = 0; seriesIx$1 < seriesCount; seriesIx$1++) {\n var currentSeries = series[seriesIx$1];\n var currentCategory = this$1$1.categoryAxis.categoryAt(categoryIx);\n var pointData = this$1$1.plotArea.bindPoint(currentSeries, categoryIx);\n\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n categoriesCount: count,\n series: currentSeries,\n seriesIx: seriesIx$1\n });\n }\n }\n\n for (var seriesIx$2 = 0; seriesIx$2 < seriesCount; seriesIx$2++) {\n this$1$1._outOfRangeCallback(series[seriesIx$2], \"_outOfRangeMaxPoint\", seriesIx$2, callback);\n }\n },\n\n _outOfRangeCallback: function(series, field, seriesIx, callback) {\n var outOfRangePoint = series[field];\n if (outOfRangePoint) {\n var categoryIx = outOfRangePoint.categoryIx;\n var pointData = this.plotArea.bindPoint(series, categoryIx, outOfRangePoint.item);\n\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n },\n\n formatPointValue: function(point, format) {\n if (point.value === null) {\n return \"\";\n }\n\n return this.chartService.format.auto(format, point.value);\n },\n\n pointValue: function(data) {\n return data.valueFields.value;\n }\n });\n\n setDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true,\n limitPoints: true\n });\n\n var PointEventsMixin = {\n click: function(chart, e) {\n return chart.trigger(\n SERIES_CLICK,\n this.eventArgs(e)\n );\n },\n\n hover: function(chart, e) {\n return chart.trigger(\n SERIES_HOVER,\n this.eventArgs(e)\n );\n },\n\n over: function(chart, e) {\n return chart.trigger(\n SERIES_OVER,\n this.eventArgs(e)\n );\n },\n\n out: function(chart, e) {\n return chart.trigger(\n SERIES_LEAVE,\n this.eventArgs(e)\n );\n },\n\n eventArgs: function(e) {\n return {\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n category: this.category,\n series: this.series,\n dataItem: this.dataItem,\n runningTotal: this.runningTotal,\n total: this.total,\n element: eventElement(e),\n originalEvent: e,\n point: this\n };\n }\n };\n\n var NoteMixin = {\n createNote: function() {\n var options = this.options.notes;\n var text = this.noteText || options.label.text;\n\n if (options.visible !== false && defined(text) && text !== null) {\n this.note = new dataviz.Note({\n value: this.value,\n text: text,\n dataItem: this.dataItem,\n category: this.category,\n series: this.series\n }, this.options.notes, this.owner.chartService);\n\n this.append(this.note);\n }\n }\n };\n\n function guid() {\n var id = \"\";\n var i;\n var random;\n\n for (i = 0; i < 32; i++) {\n random = Math.random() * 16 | 0;\n\n if (i === 8 || i === 12 || i === 16 || i === 20) {\n id += \"-\";\n }\n\n id += (i === 12 ? 4 : (i === 16 ? (random & 3 | 8) : random)).toString(16); // eslint-disable-line no-nested-ternary\n }\n\n return id;\n }\n\n var LinePoint = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this);\n\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n this._id = guid();\n },\n\n render: function() {\n var ref = this.options;\n var markers = ref.markers;\n\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\n\n this.createLabel();\n this.createNote();\n\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n\n createLabel: function() {\n var options = this.options;\n var labels = options.labels;\n\n if (labels.visible) {\n this.label = this.createLabelElement(labels);\n this.append(this.label);\n }\n },\n\n createLabelElement: function(options) {\n return new TextBox(this.getLabelText(options),\n deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n }, options),\n this.pointData()\n );\n },\n\n getLabelText: function(options) {\n var labelTemplate = getTemplate(options);\n\n if (labelTemplate) {\n return labelTemplate(this.pointData());\n } else if (options.format) {\n return this.formatValue(options.format);\n }\n\n return this.value;\n },\n\n getAriaLabelText: function() {\n var labels = this.options.labels;\n var ariaTemplate = dataviz.getAriaTemplate(labels);\n\n if (ariaTemplate) {\n return ariaTemplate(this.pointData());\n }\n\n return this.getLabelText(labels);\n },\n\n markerBorder: function() {\n var options = this.options.markers;\n var background = options.background;\n var border = deepExtend({ color: this.color }, options.border);\n\n if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n\n return border;\n },\n\n createVisual: function() {},\n\n createMarker: function() {\n var options = this.options.markers;\n var marker = new ShapeElement({\n type: options.type,\n width: options.size,\n height: options.size,\n rotation: options.rotation,\n background: options.background,\n border: this.markerBorder(),\n opacity: options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual,\n accessibilityOptions: deepExtend({\n ariaLabel: this.getAriaLabelText(this.options.labels)\n }, this.options.accessibility)\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n\n return marker;\n },\n\n markerBox: function() {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n\n return this.marker.box;\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var ref = this;\n var options = ref.options;\n var aboveAxis = ref.aboveAxis;\n var vertical = options.vertical;\n\n this.render();\n\n this.box = targetBox;\n var childBox = targetBox.clone();\n\n if (vertical) {\n if (aboveAxis) {\n childBox.y1 -= childBox.height();\n } else {\n childBox.y2 += childBox.height();\n }\n } else {\n if (aboveAxis) {\n childBox.x1 += childBox.width();\n } else {\n childBox.x2 -= childBox.width();\n }\n }\n\n this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n\n this.reflowLabel(childBox);\n\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1$1.errorBars[i].reflow(childBox);\n }\n }\n\n if (this.note) {\n var noteTargetBox = this.markerBox();\n\n if (!(options.markers.visible && options.markers.size)) {\n var center = noteTargetBox.center();\n noteTargetBox = new Box(center.x, center.y, center.x, center.y);\n }\n\n this.note.reflow(noteTargetBox);\n }\n },\n\n reflowLabel: function(box) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var anchor = options.labels.position;\n\n if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\n }\n },\n\n createHighlight: function() {\n var markers = this.options.highlight.markers;\n var defaultColor = this.markerBorder().color;\n var options = this.options.markers;\n var size = options.size + (options.border.width || 0) + (markers.border.width || 0);\n\n var shadow = new ShapeElement({\n type: options.type,\n width: size,\n height: size,\n rotation: options.rotation,\n background: markers.color || defaultColor,\n border: {\n color: markers.border.color,\n width: markers.border.width,\n opacity: valueOrDefault(markers.border.opacity, 1)\n },\n opacity: valueOrDefault(markers.opacity, 1)\n });\n shadow.reflow(this._childBox);\n\n return shadow.getElement();\n },\n\n highlightVisual: function() {\n return (this.marker || {}).visual;\n },\n\n highlightVisualArgs: function() {\n var marker = this.marker;\n var visual, rect;\n\n if (marker) {\n rect = marker.paddingBox.toRect();\n visual = marker.visual;\n } else {\n var size = this.options.markers.size;\n var halfSize = size / 2;\n var center = this.box.center();\n rect = new geometry.Rect([ center.x - halfSize, center.y - halfSize ], [ size, size ]);\n }\n\n return {\n options: this.options,\n rect: rect,\n visual: visual\n };\n },\n\n createFocusHighlight: function() {\n var markerOptions = this.options.markers;\n var highlightOptions = this.options.accessibility.highlight;\n var size = markerOptions.size + (markerOptions.border.width || 0);\n\n var highlight = new ShapeElement({\n type: markerOptions.type,\n width: size,\n height: size,\n rotation: markerOptions.rotation,\n background: highlightOptions.color,\n border: highlightOptions.border,\n opacity: highlightOptions.opacity,\n padding: highlightOptions.border.width / 2,\n zIndex: highlightOptions.zIndex\n });\n\n highlight.reflow(this._childBox);\n\n return highlight.getElement();\n },\n\n tooltipAnchor: function() {\n var markerBox = this.markerBox();\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(markerBox);\n\n if (showTooltip) {\n var x = markerBox.x2 + TOOLTIP_OFFSET;\n var horizontalAlign = LEFT;\n var y, verticalAlign;\n\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n overlapsBox: function(box) {\n var markerBox = this.markerBox();\n return markerBox.overlaps(box);\n },\n\n unclipElements: function() {\n if (this.label) {\n this.label.options.noclip = true;\n }\n\n if (this.note) {\n this.note.options.noclip = true;\n }\n },\n\n pointData: function() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n series: this.series\n };\n },\n\n focusVisual: function() {\n if (this.marker) {\n if (this.marker.visual) {\n this.marker.visual.options.set(\"id\", this._id);\n }\n\n this.toggleFocusHighlight(true);\n }\n },\n\n clearFocusFromVisual: function() {\n if (this.marker) {\n if (this.marker.visual) {\n this.marker.visual.options.set(\"id\", \"\");\n }\n\n this.toggleFocusHighlight(false);\n }\n },\n\n getIndex: function() {\n return defined(this.categoryIx) ? this.categoryIx : this.pointIx;\n }\n });\n\n LinePoint.prototype.defaults = {\n vertical: true,\n markers: {\n visible: true,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: {\n width: 2\n },\n opacity: 1\n },\n labels: {\n visible: false,\n position: ABOVE,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n },\n notes: {\n label: {}\n },\n highlight: {\n markers: {\n border: {\n color: \"#fff\",\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n errorBars: {\n line: {\n width: 1\n }\n },\n accessibility: {\n tabIndex: 0,\n role: CHART_POINT_ROLE,\n className: CHART_POINT_CLASSNAME,\n ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n }\n };\n\n deepExtend(LinePoint.prototype, PointEventsMixin);\n deepExtend(LinePoint.prototype, NoteMixin);\n\n var LineSegment = ChartElement.extend({\n init: function(linePoints, series, seriesIx) {\n ChartElement.fn.init.call(this);\n\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n },\n\n points: function() {\n return this.toGeometryPoints(this.linePoints);\n },\n\n toGeometryPoints: function(points) {\n var result = [];\n for (var i = 0, length = points.length; i < length; i++) {\n if (points[i] && points[i].visible !== false) {\n result.push(points[i]._childBox.toRect().center());\n }\n }\n\n return result;\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var customVisual = this.series.visual;\n if (customVisual) {\n this.visual = customVisual({\n points: this.toGeometryPoints(this.linePoints),\n series: this.series,\n sender: this.getSender(),\n createVisual: function () {\n this$1$1.segmentVisual();\n\n return this$1$1.visual;\n }\n });\n if (this.visual && !defined(this.visual.options.zIndex)) {\n this.visual.options.zIndex = this.series.zIndex;\n }\n } else {\n this.segmentVisual();\n }\n },\n\n segmentVisual: function() {\n var ref = this;\n var options = ref.options;\n var series = ref.series;\n var color = series.color;\n var defaults = series._defaults;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n var line = Path.fromPoints(this.points(), {\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n\n if (options.closed) {\n line.close();\n }\n\n this.visual = line;\n },\n\n aliasFor: function(e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n });\n\n setDefaultOptions(LineSegment, {\n closed: false\n });\n\n var StepLineMixin = {\n calculateStepPoints: function(points) {\n var categoryAxis = this.parent.plotArea.seriesCategoryAxis(this.series);\n var ref = categoryAxis.options;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n\n var stepAxis = vertical ? X : Y;\n var axis = vertical ? Y : X;\n var stepDir = reverse ? 2 : 1;\n var dir = stepDir;\n\n var previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n var result = [ previousPoint ];\n\n for (var idx = 1; idx < points.length; idx++) {\n var point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n var stepPoint = new GeometryPoint();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n\n result.push(stepPoint, point);\n }\n\n previousPoint = point;\n }\n\n if (!justified) {\n result.push(toGeometryPoint(last(points), stepAxis, stepDir, axis, reverse ? 1 : 2));\n } else if (previousPoint !== last(result)) {\n result.push(previousPoint);\n }\n\n return result;\n\n }\n };\n\n function toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n var box = lintPoint.box;\n var result = new GeometryPoint();\n\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n\n return result;\n }\n\n var StepLineSegment = LineSegment.extend({\n points: function() {\n return this.calculateStepPoints(this.linePoints);\n }\n });\n\n deepExtend(StepLineSegment.prototype, StepLineMixin);\n\n var SplineSegment = LineSegment.extend({\n segmentVisual: function() {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n var curveProcessor = new CurveProcessor(this.options.closed);\n var segments = curveProcessor.process(this.points());\n var curve = new Path({\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n\n curve.segments.push.apply(curve.segments, segments);\n\n this.visual = curve;\n }\n });\n\n var LineChartMixin = {\n renderSegments: function() {\n var this$1$1 = this;\n\n var ref = this;\n var options = ref.options;\n var seriesPoints = ref.seriesPoints;\n var series = options.series;\n var seriesCount = seriesPoints.length;\n var lastSegment;\n\n this._segments = [];\n\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var sortedPoints = this$1$1.sortPoints(seriesPoints[seriesIx]);\n var pointCount = sortedPoints.length;\n var linePoints = [];\n\n for (var pointIx = 0; pointIx < pointCount; pointIx++) {\n var point = sortedPoints[pointIx];\n if (point) {\n linePoints.push(point);\n } else if (this$1$1.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this$1$1.createSegment(\n linePoints, currentSeries, seriesIx, lastSegment\n );\n this$1$1._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n\n if (linePoints.length > 1) {\n lastSegment = this$1$1.createSegment(\n linePoints, currentSeries, seriesIx, lastSegment\n );\n this$1$1._addSegment(lastSegment);\n }\n }\n\n this.children.unshift.apply(this.children, this._segments);\n },\n\n _addSegment: function(segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n\n sortPoints: function(points) {\n return points;\n },\n\n seriesMissingValues: function(series) {\n var missingValues = series.missingValues;\n var assumeZero = !missingValues && this.options.isStacked;\n\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\n },\n\n getNearestPoint: function(x, y, seriesIx) {\n var target = new Point(x, y);\n var allPoints = this.seriesPoints[seriesIx];\n var nearestPointDistance = MAX_VALUE;\n var nearestPoint;\n\n for (var i = 0; i < allPoints.length; i++) {\n var point = allPoints[i];\n\n if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n var pointBox = point.box;\n var pointDistance = pointBox.center().distanceTo(target);\n\n if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n\n return nearestPoint;\n }\n };\n\n var ClipAnimation = Animation.extend({\n setup: function() {\n this._setEnd(this.options.box.x1);\n },\n\n step: function(pos) {\n var box = this.options.box;\n this._setEnd(dataviz.interpolateValue(box.x1, box.x2, pos));\n },\n\n _setEnd: function(x) {\n var element = this.element;\n var segments = element.segments;\n var topRight = segments[1].anchor();\n var bottomRight = segments[2].anchor();\n\n element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n });\n\n setDefaultOptions(ClipAnimation, {\n duration: INITIAL_ANIMATION_DURATION\n });\n\n AnimationFactory.current.register(\"clip\", ClipAnimation);\n\n var ClipAnimationMixin = {\n createAnimation: function() {\n var root = this.getRoot();\n if (root && (root.options || {}).transitions !== false) {\n var box = root.size();\n var clipPath = Path.fromRect(box.toRect());\n this.visual.clip(clipPath);\n this.animation = new ClipAnimation(clipPath, {\n box: box\n });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n\n _setChildrenAnimation: function(clipPath) {\n var points = this.animationPoints();\n\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point && point.visual && defined(point.visual.options.zIndex)) {\n point.visual.clip(clipPath);\n }\n }\n }\n };\n\n var LineChart = CategoricalChart.extend({\n render: function() {\n\n CategoricalChart.fn.render.call(this);\n\n this.updateStackRange();\n this.renderSegments();\n },\n\n pointType: function() {\n return LinePoint;\n },\n\n createPoint: function(data, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var missingValues = this.seriesMissingValues(series);\n var value = data.valueFields.value;\n\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\n\n plotRange: function(point) {\n var this$1$1 = this;\n\n var plotValue = this.plotValue(point);\n\n if (this.options.isStacked) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n\n if (point === other) {\n break;\n }\n\n plotValue += this$1$1.plotValue(other);\n\n if (this$1$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n\n }\n\n return [ plotValue, plotValue ];\n },\n\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n\n animationPoints: function() {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result.concat(this._segments);\n },\n\n supportsPointInactiveOpacity: function() {\n return false;\n }\n });\n\n deepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n\n var AreaSegment = LineSegment.extend({\n init: function(linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n LineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\n },\n\n createVisual: function() {\n var series = this.series;\n var defaults = series._defaults;\n var lineOptions = series.line || {};\n var color = series.color;\n\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n this.visual = new Group({\n zIndex: series.zIndex\n });\n\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\n\n if (lineOptions.width > 0 && lineOptions.visible !== false) {\n this.createStroke({\n stroke: deepExtend({\n color: color,\n opacity: series.opacity,\n lineCap: \"butt\"\n }, lineOptions)\n });\n }\n },\n\n strokeSegments: function() {\n var segments = this._strokeSegments;\n\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n\n return segments;\n },\n\n createStrokeSegments: function() {\n return this.segmentsFromPoints(this.points());\n },\n\n stackSegments: function() {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n\n return this.createStackSegments(this.stackPoints);\n },\n\n createStackSegments: function(stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n },\n\n segmentsFromPoints: function(points) {\n return points.map(function (point) { return new geometry.Segment(point); });\n },\n\n createStroke: function(style) {\n var stroke = new Path(style);\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n\n this.visual.append(stroke);\n },\n\n hasStackSegment: function() {\n return this.prevSegment || (this.stackPoints && this.stackPoints.length);\n },\n\n createFill: function(style) {\n var strokeSegments = this.strokeSegments();\n var fillSegments = strokeSegments.slice(0);\n var hasStackSegments = this.hasStackSegment();\n\n if (hasStackSegments) {\n var stackSegments = this.stackSegments();\n\n append(fillSegments, stackSegments);\n }\n\n var fill = new Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n\n this.visual.append(fill);\n },\n\n fillToAxes: function(fillPath) {\n var chart = this.parent;\n var invertAxes = chart.options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.series);\n var crossingValue = chart.categoryAxisCrossingValue(valueAxis);\n var endSlot = valueAxis.getSlot(crossingValue, crossingValue, true);\n var segments = this.strokeSegments();\n var firstPoint = segments[0].anchor();\n var lastPoint = last(segments).anchor();\n var end = invertAxes ? endSlot.x1 : endSlot.y1;\n\n if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y)\n .lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end)\n .lineTo(firstPoint.x, end);\n }\n }\n });\n\n var StepAreaSegment = AreaSegment.extend({\n createStrokeSegments: function() {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n },\n\n createStackSegments: function(stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n });\n\n deepExtend(StepAreaSegment.prototype, StepLineMixin);\n\n var SplineAreaSegment = AreaSegment.extend({\n createStrokeSegments: function() {\n var curveProcessor = new CurveProcessor(this.options.closed);\n var linePoints = this.points();\n\n return curveProcessor.process(linePoints);\n },\n\n createStackSegments: function() {\n var strokeSegments = this.strokeSegments();\n var stackSegments = [];\n for (var idx = strokeSegments.length - 1; idx >= 0; idx--) {\n var segment = strokeSegments[idx];\n stackSegments.push(new geometry.Segment(\n segment.anchor(),\n segment.controlOut(),\n segment.controlIn()\n ));\n }\n\n return stackSegments;\n }\n });\n\n var AreaChart = LineChart.extend({\n createSegment: function(linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n\n var stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n var missingValues = this.seriesMissingValues(currentSeries);\n if (missingValues !== \"gap\") {\n stackPoints = prevSegment.linePoints;\n previousSegment = prevSegment;\n } else {\n stackPoints = this._gapStackPoints(linePoints, seriesIx, style);\n }\n }\n\n var pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else if (style === SMOOTH) {\n pointType = SplineAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n LineChart.fn.reflow.call(this, targetBox);\n\n var stackPoints = this._stackPoints;\n if (stackPoints) {\n for (var idx = 0; idx < stackPoints.length; idx++) {\n var stackPoint = stackPoints[idx];\n var pointSlot = this$1$1.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n },\n\n _gapStackPoints: function(linePoints, seriesIx, style) {\n var this$1$1 = this;\n\n var seriesPoints = this.seriesPoints;\n var startIdx = linePoints[0].categoryIx;\n var length = linePoints.length;\n if (startIdx < 0) {\n startIdx = 0;\n length--;\n }\n\n var endIdx = startIdx + length;\n var pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n var stackPoints = [];\n\n this._stackPoints = this._stackPoints || [];\n for (var categoryIx = startIdx; categoryIx < endIdx; categoryIx++) {\n var pointIx = categoryIx + pointOffset;\n var currentSeriesIx = seriesIx;\n var point = (void 0);\n\n do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this$1$1._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n\n stackPoints.push(point);\n\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this$1$1._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n var gapStackPoint = this$1$1._createGapStackPoint(categoryIx);\n this$1$1._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n\n return stackPoints;\n },\n\n _previousSegmentPoint: function(categoryIx, pointIx, segmentIx, seriesIdx) {\n var seriesPoints = this.seriesPoints;\n var index = seriesIdx;\n var point;\n\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n\n return point;\n },\n\n _createGapStackPoint: function(categoryIx) {\n var options = this.pointOptions({}, 0);\n var point = new LinePoint(0, options);\n point.categoryIx = categoryIx;\n point.series = {};\n\n return point;\n },\n\n seriesMissingValues: function(series) {\n return series.missingValues || ZERO;\n },\n\n supportsPointInactiveOpacity: function() {\n return false;\n }\n });\n\n var AxisGroupRangeTracker = Class.extend({\n init: function() {\n\n this.axisRanges = {};\n },\n\n update: function(chartAxisRanges) {\n var axisRanges = this.axisRanges;\n\n for (var axisName in chartAxisRanges) {\n var chartRange = chartAxisRanges[axisName];\n var range = axisRanges[axisName];\n axisRanges[axisName] = range = range || { min: MAX_VALUE, max: MIN_VALUE };\n\n range.min = Math.min(range.min, chartRange.min);\n range.max = Math.max(range.max, chartRange.max);\n }\n },\n\n reset: function(axisName) {\n this.axisRanges[axisName] = undefined;\n },\n\n query: function(axisName) {\n return this.axisRanges[axisName];\n }\n });\n\n var BarLabel = ChartElement.extend({\n init: function(content, options, pointData) {\n ChartElement.fn.init.call(this, options);\n\n this.textBox = new TextBox(content, this.options, pointData);\n this.append(this.textBox);\n },\n\n createVisual: function() {\n this.textBox.options.noclip = this.options.noclip;\n },\n\n reflow: function(targetBox) {\n var options = this.options;\n var vertical = options.vertical;\n var aboveAxis = options.aboveAxis;\n var text = this.children[0];\n var textOptions = text.options;\n var box = text.box;\n var padding = text.options.padding;\n var labelBox = targetBox;\n\n textOptions.align = vertical ? CENTER : LEFT;\n textOptions.vAlign = vertical ? TOP : CENTER;\n\n if (options.position === INSIDE_END) {\n if (vertical) {\n textOptions.vAlign = TOP;\n\n if (!aboveAxis && box.height() < targetBox.height()) {\n textOptions.vAlign = BOTTOM;\n }\n } else {\n textOptions.align = aboveAxis ? RIGHT : LEFT;\n }\n } else if (options.position === CENTER) {\n textOptions.vAlign = CENTER;\n textOptions.align = CENTER;\n } else if (options.position === INSIDE_BASE) {\n if (vertical) {\n textOptions.vAlign = aboveAxis ? BOTTOM : TOP;\n } else {\n textOptions.align = aboveAxis ? LEFT : RIGHT;\n }\n } else if (options.position === OUTSIDE_END) {\n if (vertical) {\n if (aboveAxis) {\n labelBox = new Box(\n targetBox.x1, targetBox.y1 - box.height(),\n targetBox.x2, targetBox.y1\n );\n } else {\n labelBox = new Box(\n targetBox.x1, targetBox.y2,\n targetBox.x2, targetBox.y2 + box.height()\n );\n }\n } else {\n textOptions.align = CENTER;\n if (aboveAxis) {\n labelBox = new Box(\n targetBox.x2, targetBox.y1,\n targetBox.x2 + box.width(), targetBox.y2\n );\n } else {\n labelBox = new Box(\n targetBox.x1 - box.width(), targetBox.y1,\n targetBox.x1, targetBox.y2\n );\n }\n }\n }\n\n if (!options.rotation) {\n if (vertical) {\n padding.left = padding.right =\n (labelBox.width() - text.contentBox.width()) / 2;\n } else {\n padding.top = padding.bottom =\n (labelBox.height() - text.contentBox.height()) / 2;\n }\n }\n\n text.reflow(labelBox);\n },\n\n alignToClipBox: function(clipBox) {\n var vertical = this.options.vertical;\n var field = vertical ? Y : X;\n var start = field + \"1\";\n var end = field + \"2\";\n var text = this.children[0];\n var parentBox = this.parent.box;\n\n if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\n var targetBox = text.paddingBox.clone();\n targetBox[start] = Math.max(parentBox[start], clipBox[start]);\n targetBox[end] = Math.min(parentBox[end], clipBox[end]);\n\n this.reflow(targetBox);\n }\n }\n });\n\n setDefaultOptions(BarLabel, {\n position: OUTSIDE_END,\n margin: getSpacing(3),\n padding: getSpacing(4),\n color: BLACK,\n background: \"\",\n border: {\n width: 1,\n color: \"\"\n },\n aboveAxis: true,\n vertical: false,\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n zIndex: 2\n });\n\n function addAccessibilityAttributesToVisual(visual, accessibilityOptions) {\n if (accessibilityOptions) {\n visual.options.className = accessibilityOptions.className;\n visual.options.role = accessibilityOptions.role;\n visual.options.ariaLabel = accessibilityOptions.ariaLabel;\n visual.options.ariaRoleDescription = accessibilityOptions.ariaRoleDescription;\n visual.options.ariaChecked = accessibilityOptions.ariaChecked;\n }\n }\n\n var AccessibilityAttributesMixin = {\n addAccessibilityAttributesToVisual: function() {\n this._id = this._id || guid();\n\n var accessibilityOptions = deepExtend({\n ariaLabel: this.getAriaLabelText()\n }, this.options.accessibility);\n\n addAccessibilityAttributesToVisual(this.visual, accessibilityOptions);\n },\n\n getAriaLabelText: function getAriaLabelText() {\n var labels = this.options.labels;\n var ariaTemplate = dataviz.getAriaTemplate(labels);\n\n if (ariaTemplate) {\n return ariaTemplate(this.pointData());\n }\n\n return this.getLabelText(labels);\n },\n\n focusVisual: function focusVisual() {\n this.visual.options.set(\"id\", this._id);\n this.toggleFocusHighlight(true);\n },\n\n clearFocusFromVisual: function clearFocusFromVisual() {\n this.visual.options.set(\"id\", \"\");\n this.toggleFocusHighlight(false);\n }\n };\n\n var BAR_ALIGN_MIN_WIDTH = 6;\n\n var Bar = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this);\n\n this.options = options;\n this.color = options.color || WHITE;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.value = value;\n },\n\n render: function() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n this.createLabel();\n this.createNote();\n\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n\n createLabel: function() {\n var options = this.options;\n var labels = options.labels;\n\n if (labels.visible) {\n this.label = this.createLabelElement(labels);\n this.append(this.label);\n }\n },\n\n createLabelElement: function(options) {\n return new BarLabel(this.getLabelText(options),\n deepExtend({\n vertical: this.options.vertical\n },\n options\n ), this.pointData());\n },\n\n getLabelText: function(options) {\n var labelTemplate = getTemplate(options);\n\n if (labelTemplate) {\n return labelTemplate(this.pointData());\n }\n\n return this.formatValue(options.format);\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n this.render();\n\n var label = this.label;\n\n this.box = targetBox;\n\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(targetBox);\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1$1.errorBars[i].reflow(targetBox);\n }\n }\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var ref = this;\n var box = ref.box;\n var options = ref.options;\n var customVisual = options.visual;\n\n if (this.visible !== false) {\n ChartElement.fn.createVisual.call(this);\n\n this.addAccessibilityAttributesToVisual();\n\n if (customVisual) {\n var visual = this.rectVisual = customVisual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n sender: this.getSender(),\n series: this.series,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n rect: box.toRect(),\n createVisual: function () {\n var group = new Group();\n this$1$1.createRect(group);\n return group;\n },\n options: options\n });\n\n if (visual) {\n this.visual.append(visual);\n }\n } else if (box.width() > 0 && box.height() > 0) {\n this.createRect(this.visual);\n }\n }\n },\n\n createRect: function(visual) {\n var options = this.options;\n var border = options.border;\n var strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\n var rect = this.box.toRect();\n\n rect.size.width = Math.round(rect.size.width);\n\n var path = this.rectVisual = Path.fromRect(rect, {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: {\n color: this.getBorderColor(),\n width: border.width,\n opacity: strokeOpacity,\n dashType: border.dashType\n }\n });\n\n var width = this.box.width();\n var height = this.box.height();\n\n var size = options.vertical ? width : height;\n\n if (size > BAR_ALIGN_MIN_WIDTH) {\n alignPathToPixel(path);\n\n // Fixes lineJoin issue in firefox when the joined lines are parallel\n if (width < 1 || height < 1) {\n path.options.stroke.lineJoin = \"round\";\n }\n }\n\n visual.append(path);\n\n if (hasGradientOverlay(options)) {\n var overlay = this.createGradientOverlay(path, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [ 0, 1 ] : undefined\n }, options.overlay));\n\n visual.append(overlay);\n }\n },\n\n createHighlight: function(style) {\n var highlight = Path.fromRect(this.box.toRect(), style);\n\n return alignPathToPixel(highlight);\n },\n\n highlightVisual: function() {\n return this.rectVisual;\n },\n\n highlightVisualArgs: function() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n },\n\n createFocusHighlight: function(style) {\n var borderWidth = this.options.accessibility.highlight.border.width;\n var highlight = Path.fromRect(this.box.pad(borderWidth / 2).toRect(), style);\n\n return alignPathToPixel(highlight);\n },\n\n getBorderColor: function() {\n var color = this.color;\n var border = this.options.border;\n var brightness = border._brightness || BORDER_BRIGHTNESS;\n var borderColor = border.color;\n\n if (!defined(borderColor)) {\n borderColor = new Color(color).brightness(brightness).toHex();\n }\n\n return borderColor;\n },\n\n tooltipAnchor: function() {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var aboveAxis = ref.aboveAxis;\n var clipBox = this.owner.pane.clipBox() || box;\n var horizontalAlign = LEFT;\n var verticalAlign = TOP;\n var x, y;\n\n if (options.vertical) {\n x = Math.min(box.x2, clipBox.x2) + TOOLTIP_OFFSET;\n if (aboveAxis) {\n y = Math.max(box.y1, clipBox.y1);\n } else {\n y = Math.min(box.y2, clipBox.y2);\n verticalAlign = BOTTOM;\n }\n } else {\n var x1 = Math.max(box.x1, clipBox.x1);\n var x2 = Math.min(box.x2, clipBox.x2);\n\n if (options.isStacked) {\n verticalAlign = BOTTOM;\n if (aboveAxis) {\n horizontalAlign = RIGHT;\n x = x2;\n } else {\n x = x1;\n }\n y = Math.max(box.y1, clipBox.y1) - TOOLTIP_OFFSET;\n } else {\n if (aboveAxis) {\n x = x2 + TOOLTIP_OFFSET;\n } else {\n x = x1 - TOOLTIP_OFFSET;\n horizontalAlign = RIGHT;\n }\n y = Math.max(box.y1, clipBox.y1);\n }\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n },\n\n pointData: function() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n };\n },\n\n getIndex: function() {\n return this.categoryIx;\n }\n });\n\n deepExtend(Bar.prototype, PointEventsMixin);\n deepExtend(Bar.prototype, NoteMixin);\n deepExtend(Bar.prototype, AccessibilityAttributesMixin);\n\n Bar.prototype.defaults = {\n border: {\n width: 1\n },\n vertical: true,\n overlay: {\n gradient: \"glass\"\n },\n labels: {\n visible: false,\n format: \"{0}\"\n },\n opacity: 1,\n notes: {\n label: {}\n },\n accessibility: {\n role: CHART_POINT_ROLE,\n className: CHART_POINT_CLASSNAME,\n ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n }\n };\n\n function forEach(elements, callback) {\n elements.forEach(callback);\n }\n\n function forEachReverse(elements, callback) {\n var length = elements.length;\n\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx - length - 1);\n }\n }\n\n var ClusterLayout = ChartElement.extend({\n init: function(options) {\n ChartElement.fn.init.call(this, options);\n\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\n\n reflow: function(box) {\n var ref = this.options;\n var vertical = ref.vertical;\n var gap = ref.gap;\n var spacing = ref.spacing;\n var children = this.children;\n var count = children.length;\n var axis = vertical ? Y : X;\n var slots = count + gap + (spacing * (count - 1));\n var slotSize = (vertical ? box.height() : box.width()) / slots;\n var position = box[axis + 1] + slotSize * (gap / 2);\n\n this.forEach(children, function (child, idx) {\n var childBox = (child.box || box).clone();\n\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n\n child.reflow(childBox);\n if (idx < count - 1) {\n position += (slotSize * spacing);\n }\n\n position += slotSize;\n });\n }\n });\n\n setDefaultOptions(ClusterLayout, {\n vertical: false,\n gap: 0,\n spacing: 0\n });\n\n var StackWrap = ChartElement.extend({\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var positionAxis = this.options.vertical ? X : Y;\n var children = this.children;\n var childrenCount = children.length;\n var box = this.box = new Box();\n\n for (var i = 0; i < childrenCount; i++) {\n var currentChild = children[i];\n\n if (currentChild.visible !== false) {\n var childBox = currentChild.box.clone();\n childBox.snapTo(targetBox, positionAxis);\n\n if (i === 0) {\n box = this$1$1.box = childBox.clone();\n }\n\n currentChild.reflow(childBox);\n box.wrap(childBox);\n }\n }\n }\n });\n\n setDefaultOptions(StackWrap, {\n vertical: true\n });\n\n var BarChart = CategoricalChart.extend({\n render: function() {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n },\n\n pointType: function() {\n return Bar;\n },\n\n clusterType: function() {\n return ClusterLayout;\n },\n\n stackType: function() {\n return StackWrap;\n },\n\n stackLimits: function(axisName, stackName) {\n var limits = CategoricalChart.fn.stackLimits.call(this, axisName, stackName);\n\n return limits;\n },\n\n createPoint: function(data, fields) {\n var categoryIx = fields.categoryIx;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var stackOrDefault = defined(series.stack) ? series.stack : options.defaultStack;\n var value = this.pointValue(data);\n var pointOptions = this.pointOptions(series, seriesIx);\n\n var labelOptions = pointOptions.labels;\n if (stackOrDefault) {\n if (labelOptions.position === OUTSIDE_END) {\n labelOptions.position = INSIDE_END;\n }\n }\n\n pointOptions.isStacked = stackOrDefault;\n\n var color = data.fields.color || series.color;\n if (value < 0 && pointOptions.negativeColor) {\n color = pointOptions.negativeColor;\n }\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n var pointType = this.pointType();\n var point = new pointType(value, pointOptions);\n point.color = color;\n\n var cluster = children[categoryIx];\n if (!cluster) {\n var clusterType = this.clusterType();\n cluster = new clusterType({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (options.isStacked) {\n var stackWrap = this.getStackWrap(stackOrDefault, cluster);\n stackWrap.append(point);\n } else {\n cluster.append(point);\n }\n\n return point;\n },\n\n getStackWrap: function(stack, cluster) {\n var stackGroup = (typeof stack === datavizConstants.OBJECT) ? (stack.group || true) : stack;\n var wraps = cluster.children;\n var stackWrap;\n\n if (typeof stackGroup === datavizConstants.STRING || stackGroup === true) {\n for (var i = 0; i < wraps.length; i++) {\n if (wraps[i]._stackGroup === stackGroup) {\n stackWrap = wraps[i];\n break;\n }\n }\n }\n\n if (!stackWrap) {\n var stackType = this.stackType();\n stackWrap = new stackType({\n vertical: !this.options.invertAxes\n });\n stackWrap._stackGroup = stackGroup;\n cluster.append(stackWrap);\n }\n\n return stackWrap;\n },\n\n categorySlot: function(categoryAxis, categoryIx, valueAxis) {\n var options = this.options;\n var categorySlot = categoryAxis.getSlot(categoryIx);\n var startValue = valueAxis.startValue();\n\n if (options.isStacked) {\n var zeroSlot = valueAxis.getSlot(startValue, startValue, true);\n var stackAxis = options.invertAxes ? X : Y;\n categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\n }\n\n return categorySlot;\n },\n\n reflowCategories: function(categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n\n createAnimation: function() {\n this._setAnimationOptions();\n CategoricalChart.fn.createAnimation.call(this);\n\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation();\n }\n },\n\n _setChildrenAnimation: function() {\n var this$1$1 = this;\n\n var points = this.points;\n\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n var pointVisual = point.visual;\n if (pointVisual && defined(pointVisual.options.zIndex)) {\n point.options.animation = this$1$1.options.animation;\n point.createAnimation();\n }\n }\n },\n\n _setAnimationOptions: function() {\n var options = this.options;\n var animation = options.animation || {};\n var origin;\n\n if (options.isStacked) {\n var valueAxis = this.seriesValueAxis(options.series[0]);\n origin = valueAxis.getSlot(valueAxis.startValue());\n } else {\n origin = this.categoryAxis.getSlot(0);\n }\n\n animation.origin = new GeometryPoint(origin.x1, origin.y1);\n animation.vertical = !options.invertAxes;\n }\n });\n\n setDefaultOptions(BarChart, {\n animation: {\n type: BAR\n }\n });\n\n var Candlestick = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n },\n\n getLabelText: function(options) {\n return this.formatValue(options.format);\n },\n\n reflow: function(box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var ocSlot = valueAxis.getSlot(value.open, value.close);\n var lhSlot = valueAxis.getSlot(value.low, value.high);\n\n ocSlot.x1 = lhSlot.x1 = box.x1;\n ocSlot.x2 = lhSlot.x2 = box.x2;\n\n this.realBody = ocSlot;\n\n var mid = lhSlot.center().x;\n var points = [];\n\n points.push([ [ mid, lhSlot.y1 ], [ mid, ocSlot.y1 ] ]);\n points.push([ [ mid, ocSlot.y2 ], [ mid, lhSlot.y2 ] ]);\n\n this.lines = points;\n\n this.box = lhSlot.clone().wrap(ocSlot);\n\n if (!this._rendered) {\n this._rendered = true;\n this.createNote();\n }\n\n this.reflowNote();\n },\n\n reflowNote: function() {\n if (this.note) {\n this.note.reflow(this.box);\n }\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n this.addAccessibilityAttributesToVisual();\n\n this._mainVisual = this.mainVisual(this.options);\n this.visual.append(\n this._mainVisual\n );\n\n this.createOverlay();\n },\n\n mainVisual: function(options) {\n var group = new Group();\n\n this.createBody(group, options);\n this.createLines(group, options);\n\n return group;\n },\n\n createBody: function(container, options) {\n var body = Path.fromRect(this.realBody.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n\n if (options.border.width > 0) {\n body.options.set(\"stroke\", {\n color: this.getBorderColor(),\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n\n alignPathToPixel(body);\n container.append(body);\n\n if (hasGradientOverlay(options)) {\n container.append(this.createGradientOverlay(body, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [ 0, 1 ] : undefined\n }, options.overlay)));\n }\n },\n\n createLines: function(container, options) {\n this.drawLines(container, options, this.lines, options.line);\n },\n\n drawLines: function(container, options, lines, lineOptions) {\n if (!lines) {\n return;\n }\n\n var lineStyle = {\n stroke: {\n color: lineOptions.color || this.color,\n opacity: valueOrDefault(lineOptions.opacity, options.opacity),\n width: lineOptions.width,\n dashType: lineOptions.dashType,\n lineCap: \"butt\"\n }\n };\n\n for (var i = 0; i < lines.length; i++) {\n var line = Path.fromPoints(lines[i], lineStyle);\n alignPathToPixel(line);\n container.append(line);\n }\n },\n\n getBorderColor: function() {\n var border = this.options.border;\n var borderColor = border.color;\n\n if (!defined(borderColor)) {\n borderColor = new Color(this.color).brightness(border._brightness).toHex();\n }\n\n return borderColor;\n },\n\n createOverlay: function() {\n var overlay = Path.fromRect(this.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null\n });\n\n this.visual.append(overlay);\n },\n\n createHighlight: function() {\n var highlight = this.options.highlight;\n var normalColor = this.color;\n\n this.color = highlight.color || this.color;\n var overlay = this.mainVisual(\n deepExtend({}, this.options, {\n line: {\n color: this.getBorderColor()\n }\n }, highlight)\n );\n this.color = normalColor;\n\n return overlay;\n },\n\n highlightVisual: function() {\n return this._mainVisual;\n },\n\n highlightVisualArgs: function() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this._mainVisual\n };\n },\n\n tooltipAnchor: function() {\n var box = this.box;\n var clipBox = this.owner.pane.clipBox() || box;\n\n return {\n point: new Point(box.x2 + TOOLTIP_OFFSET, Math.max(box.y1, clipBox.y1) + TOOLTIP_OFFSET),\n align: {\n horizontal: LEFT,\n vertical: TOP\n }\n };\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n },\n\n pointData: function() {\n return {\n dataItem: this.dataItem,\n value: this.value,\n meanPoints: this.meanPoints,\n medianPoints: this.medianPoints,\n whiskerPoints: this.whiskerPoints,\n stackValue: this.stackValue,\n series: this.series\n };\n },\n\n getIndex: function() {\n return this.categoryIx;\n }\n });\n\n Candlestick.prototype.createFocusHighlight = Bar.prototype.createFocusHighlight;\n\n setDefaultOptions(Candlestick, {\n vertical: true,\n border: {\n _brightness: 0.8\n },\n line: {\n width: 2\n },\n overlay: {\n gradient: \"glass\"\n },\n tooltip: {\n format: \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"
{4:d}
Open:{0:C}
High:{1:C}
Low:{2:C}
Close:{3:C}
\"\n },\n labels: {\n format: \"\"\n },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n },\n accessibility: {\n role: CHART_POINT_ROLE,\n className: CHART_POINT_CLASSNAME,\n ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n }\n });\n\n deepExtend(Candlestick.prototype, PointEventsMixin);\n deepExtend(Candlestick.prototype, NoteMixin);\n deepExtend(Candlestick.prototype, AccessibilityAttributesMixin);\n\n var CandlestickChart = CategoricalChart.extend({\n reflowCategories: function(categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n\n addValue: function(data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var value = data.valueFields;\n var valueParts = this.splitValue(value);\n var hasValue = areNumbers(valueParts);\n var dataItem = series.data[categoryIx];\n var categoryPoints = this.categoryPoints[categoryIx];\n var point;\n\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (point) {\n this.updateRange(value, fields);\n\n cluster.append(point);\n\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n point.noteText = data.fields.noteText;\n }\n\n this.points.push(point);\n categoryPoints.push(point);\n },\n\n pointType: function() {\n return Candlestick;\n },\n\n createPoint: function(data, fields) {\n var series = fields.series;\n var pointType = this.pointType();\n var value = data.valueFields;\n var pointOptions = deepExtend({}, series);\n var color = data.fields.color || series.color;\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (series.type === CANDLESTICK || series.type === OHLC) {\n if (value.open > value.close) {\n color = data.fields.downColor || series.downColor || series.color;\n }\n }\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n pointOptions.vertical = !this.options.invertAxes;\n\n var point = new pointType(value, pointOptions);\n point.color = color;\n\n return point;\n },\n\n splitValue: function(value) {\n return [ value.low, value.open, value.close, value.high ];\n },\n\n updateRange: function(value, fields) {\n var axisName = fields.series.axis;\n var parts = this.splitValue(value);\n var axisRange = this.valueAxisRanges[axisName] || { min: MAX_VALUE, max: MIN_VALUE };\n\n this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([ axisRange.min ])),\n max: Math.max.apply(Math, parts.concat([ axisRange.max ]))\n };\n },\n\n formatPointValue: function(point, format) {\n var value = point.value;\n\n return this.chartService.format.auto(format,\n value.open, value.high,\n value.low, value.close, point.category\n );\n },\n\n animationPoints: function() {\n return this.points;\n }\n });\n\n deepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n\n var BoxPlot = Candlestick.extend({\n init: function(value, options) {\n Candlestick.fn.init.call(this, value, options);\n\n this.createNote();\n },\n\n reflow: function(box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var whiskerSlot, boxSlot;\n\n this.boxSlot = boxSlot = valueAxis.getSlot(value.q1, value.q3);\n this.realBody = boxSlot;\n this.reflowBoxSlot(box);\n\n this.whiskerSlot = whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n this.reflowWhiskerSlot(box);\n\n var medianSlot = valueAxis.getSlot(value.median);\n\n if (value.mean) {\n var meanSlot = valueAxis.getSlot(value.mean);\n this.meanPoints = this.calcMeanPoints(box, meanSlot);\n }\n\n this.whiskerPoints = this.calcWhiskerPoints(boxSlot, whiskerSlot);\n this.medianPoints = this.calcMedianPoints(box, medianSlot);\n\n this.box = whiskerSlot.clone().wrap(boxSlot);\n this.reflowNote();\n },\n\n reflowBoxSlot: function(box) {\n this.boxSlot.x1 = box.x1;\n this.boxSlot.x2 = box.x2;\n },\n\n reflowWhiskerSlot: function(box) {\n this.whiskerSlot.x1 = box.x1;\n this.whiskerSlot.x2 = box.x2;\n },\n\n calcMeanPoints: function(box, meanSlot) {\n return [\n [ [ box.x1, meanSlot.y1 ], [ box.x2, meanSlot.y1 ] ]\n ];\n },\n\n calcWhiskerPoints: function(boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().x;\n return [ [\n [ mid - 5, whiskerSlot.y1 ], [ mid + 5, whiskerSlot.y1 ],\n [ mid, whiskerSlot.y1 ], [ mid, boxSlot.y1 ]\n ], [\n [ mid - 5, whiskerSlot.y2 ], [ mid + 5, whiskerSlot.y2 ],\n [ mid, whiskerSlot.y2 ], [ mid, boxSlot.y2 ]\n ] ];\n },\n\n calcMedianPoints: function(box, medianSlot) {\n return [\n [ [ box.x1, medianSlot.y1 ], [ box.x2, medianSlot.y1 ] ]\n ];\n },\n\n renderOutliers: function(options) {\n var this$1$1 = this;\n\n var value = this.value;\n var outliers = value.outliers || [];\n var outerFence = Math.abs(value.q3 - value.q1) * 3;\n var elements = [];\n var markers = options.markers || {};\n\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i];\n if (outlierValue < value.q3 + outerFence && outlierValue > value.q1 - outerFence) {\n markers = options.outliers;\n } else {\n markers = options.extremes;\n }\n var markersBorder = deepExtend({}, markers.border);\n\n if (!defined(markersBorder.color)) {\n if (defined(this$1$1.color)) {\n markersBorder.color = this$1$1.color;\n } else {\n markersBorder.color =\n new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n }\n\n var shape = new ShapeElement({\n type: markers.type,\n width: markers.size,\n height: markers.size,\n rotation: markers.rotation,\n background: markers.background,\n border: markersBorder,\n opacity: markers.opacity\n });\n\n shape.value = outlierValue;\n\n elements.push(shape);\n }\n\n this.reflowOutliers(elements);\n return elements;\n },\n\n reflowOutliers: function(outliers) {\n var this$1$1 = this;\n\n var valueAxis = this.owner.seriesValueAxis(this.options);\n var center = this.box.center();\n\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i].value;\n var markerBox = valueAxis.getSlot(outlierValue);\n\n if (this$1$1.options.vertical) {\n markerBox.move(center.x);\n } else {\n markerBox.move(undefined, center.y);\n }\n\n this$1$1.box = this$1$1.box.wrap(markerBox);\n outliers[i].reflow(markerBox);\n }\n },\n\n mainVisual: function(options) {\n var group = Candlestick.fn.mainVisual.call(this, options);\n var outliers = this.renderOutliers(options);\n\n for (var i = 0; i < outliers.length; i++) {\n var element = outliers[i].getElement();\n if (element) {\n group.append(element);\n }\n }\n\n return group;\n },\n\n createLines: function(container, options) {\n this.drawLines(container, options, this.whiskerPoints, options.whiskers);\n this.drawLines(container, options, this.medianPoints, options.median);\n this.drawLines(container, options, this.meanPoints, options.mean);\n },\n\n getBorderColor: function() {\n if ((this.options.border || {}).color) {\n return this.options.border.color;\n }\n\n if (this.color) {\n return this.color;\n }\n\n return Candlestick.fn.getBorderColor.call(this);\n }\n });\n\n setDefaultOptions(BoxPlot, {\n border: {\n _brightness: 0.8\n },\n line: {\n width: 2\n },\n median: {\n color: \"#f6f6f6\"\n },\n mean: {\n width: 2,\n dashType: \"dash\",\n color: \"#f6f6f6\"\n },\n overlay: {\n gradient: \"glass\"\n },\n tooltip: {\n format: \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"\" +\n \"
{6:d}
Lower:{0:C}
Q1:{1:C}
Median:{2:C}
Mean:{5:C}
Q3:{3:C}
Upper:{4:C}
\"\n },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n },\n outliers: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: datavizConstants.CROSS,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n },\n extremes: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n }\n });\n\n deepExtend(BoxPlot.prototype, PointEventsMixin);\n\n var VerticalBoxPlot = BoxPlot.extend({\n reflowBoxSlot: function(box) {\n this.boxSlot.y1 = box.y1;\n this.boxSlot.y2 = box.y2;\n },\n\n reflowWhiskerSlot: function(box) {\n this.whiskerSlot.y1 = box.y1;\n this.whiskerSlot.y2 = box.y2;\n },\n\n calcMeanPoints: function(box, meanSlot) {\n return [\n [ [ meanSlot.x1, box.y1 ], [ meanSlot.x1, box.y2 ] ]\n ];\n },\n\n calcWhiskerPoints: function(boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().y;\n return [ [\n [ whiskerSlot.x1, mid - 5 ], [ whiskerSlot.x1, mid + 5 ],\n [ whiskerSlot.x1, mid ], [ boxSlot.x1, mid ]\n ], [\n [ whiskerSlot.x2, mid - 5 ], [ whiskerSlot.x2, mid + 5 ],\n [ whiskerSlot.x2, mid ], [ boxSlot.x2, mid ]\n ] ];\n },\n\n calcMedianPoints: function(box, medianSlot) {\n return [\n [ [ medianSlot.x1, box.y1 ], [ medianSlot.x1, box.y2 ] ]\n ];\n }\n });\n\n var BoxPlotChart = CandlestickChart.extend({\n addValue: function(data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var value = data.valueFields;\n var valueParts = this.splitValue(value);\n var hasValue = areNumbers(valueParts);\n var dataItem = series.data[categoryIx];\n var categoryPoints = this.categoryPoints[categoryIx];\n var point;\n\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n if (point) {\n this.updateRange(value, fields);\n\n cluster.append(point);\n\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n }\n\n this.points.push(point);\n categoryPoints.push(point);\n },\n\n pointType: function() {\n if (this.options.invertAxes) {\n return VerticalBoxPlot;\n }\n\n return BoxPlot;\n },\n\n splitValue: function(value) {\n return [\n value.lower, value.q1, value.median,\n value.q3, value.upper\n ];\n },\n\n updateRange: function(value, fields) {\n var axisName = fields.series.axis;\n var parts = this.splitValue(value).concat(this.filterOutliers(value.outliers));\n\n if (defined(value.mean)) {\n parts = parts.concat(value.mean);\n }\n\n var axisRange = this.valueAxisRanges[axisName] || { min: MAX_VALUE, max: MIN_VALUE };\n\n this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([ axisRange.min ])),\n max: Math.max.apply(Math, parts.concat([ axisRange.max ]))\n };\n },\n\n formatPointValue: function(point, format) {\n var value = point.value;\n\n return this.chartService.format.auto(format,\n value.lower, value.q1, value.median,\n value.q3, value.upper, value.mean, point.category\n );\n },\n\n filterOutliers: function(items) {\n var length = (items || []).length;\n var result = [];\n\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (defined(item) && item !== null) {\n result.push(item);\n }\n }\n\n return result;\n },\n\n supportsPointInactiveOpacity: function() {\n return false;\n }\n });\n\n var ScatterErrorBar = ErrorBarBase.extend({\n getAxis: function() {\n var axes = this.chart.seriesAxes(this.series);\n var axis = this.isVertical ? axes.y : axes.x;\n\n return axis;\n }\n });\n\n var ScatterChart = ChartElement.extend({\n init: function(plotArea, options) {\n\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n\n this.render();\n },\n\n _initFields: function() {\n // X and Y axis ranges grouped by name, e.g.:\n // primary: { min: 0, max: 1 }\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n },\n\n render: function() {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n\n addErrorBar: function(point, field, fields) {\n var value = point.value[field];\n var valueErrorField = field + \"Value\";\n var lowField = field + \"ErrorLow\";\n var highField = field + \"ErrorHigh\";\n var seriesIx = fields.seriesIx;\n var series = fields.series;\n var errorBars = point.options.errorBars;\n var lowValue = fields[lowField];\n var highValue = fields[highField];\n\n if (isNumber(value)) {\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = { low: lowValue, high: highValue };\n }\n\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || { x: [], y: [] };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] ||\n new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\n }\n }\n },\n\n addPointErrorBar: function(errorRange, point, field) {\n var low = errorRange.low;\n var high = errorRange.high;\n var series = point.series;\n var options = point.options.errorBars;\n var isVertical = field === Y;\n var item = {};\n\n point[field + \"Low\"] = low;\n point[field + \"High\"] = high;\n\n point.errorBars = point.errorBars || [];\n var errorBar = new ScatterErrorBar(low, high, isVertical, this, series, options);\n point.errorBars.push(errorBar);\n point.append(errorBar);\n\n item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\n },\n\n addValue: function(value, fields) {\n var x = value.x;\n var y = value.y;\n var seriesIx = fields.seriesIx;\n var series = this.options.series[seriesIx];\n var missingValues = this.seriesMissingValues(series);\n var seriesPoints = this.seriesPoints[seriesIx];\n\n var pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\n }\n\n var point;\n if (pointValue) {\n point = this.createPoint(pointValue, fields);\n if (point) {\n $.extend(point, fields);\n this.addErrorBar(point, X, fields);\n this.addErrorBar(point, Y, fields);\n }\n this.updateRange(pointValue, fields.series);\n }\n\n this.points.push(point);\n seriesPoints.push(point);\n },\n\n seriesMissingValues: function(series) {\n return series.missingValues;\n },\n\n createMissingValue: function() {},\n\n updateRange: function(value, series) {\n var intlService = this.chartService.intl;\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var x = value.x;\n var y = value.y;\n var xAxisRange = this.xAxisRanges[xAxisName];\n var yAxisRange = this.yAxisRanges[yAxisName];\n\n if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] =\n xAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] =\n yAxisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\n }\n },\n\n evalPointOptions: function(options, value, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = {\n defaults: series._defaults,\n excluded: [\n \"data\", \"tooltip\", \"content\", \"template\", \"visual\", \"toggle\",\n \"_outOfRangeMinPoint\", \"_outOfRangeMaxPoint\",\n \"drilldownSeriesFactory\", \"ariaTemplate\", \"ariaContent\"\n ]\n };\n\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem\n }, state);\n }\n\n return pointOptions;\n },\n\n pointType: function() {\n return LinePoint;\n },\n\n pointOptions: function(series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: {\n opacity: series.opacity\n },\n tooltip: {\n format: this.options.tooltip.format\n },\n labels: {\n format: this.options.labels.format\n }\n }, series);\n }\n\n return options;\n },\n\n createPoint: function(value, fields) {\n var series = fields.series;\n var pointOptions = this.pointOptions(series, fields.seriesIx);\n var color = fields.color || series.color;\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\n\n seriesAxes: function(series) {\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var plotArea = this.plotArea;\n var xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n var yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return {\n x: xAxis,\n y: yAxis\n };\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var seriesAxes = this$1$1.seriesAxes(fields.series);\n var slotX = seriesAxes.x.getSlot(value.x, value.x, limit);\n var slotY = seriesAxes.y.getSlot(value.y, value.y, limit);\n\n if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.box = targetBox;\n },\n\n pointSlot: function(slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref.options.series;\n var seriesPoints = ref.seriesPoints;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var currentSeriesPoints = seriesPoints[seriesIx];\n if (!currentSeriesPoints) {\n seriesPoints[seriesIx] = [];\n }\n\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1$1.plotArea.bindPoint(currentSeries, pointIx);\n var value = ref$1.valueFields;\n var fields = ref$1.fields;\n\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1$1\n }, fields));\n }\n }\n },\n\n formatPointValue: function(point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y);\n },\n\n animationPoints: function() {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n });\n setDefaultOptions(ScatterChart, {\n series: [],\n tooltip: {\n format: \"{0}, {1}\"\n },\n labels: {\n format: \"{0}, {1}\"\n },\n clip: true\n });\n deepExtend(ScatterChart.prototype, ClipAnimationMixin);\n\n var Bubble = LinePoint.extend({\n init: function(value, options) {\n LinePoint.fn.init.call(this, value, options);\n\n this.category = value.category;\n },\n\n createHighlight: function() {\n var highlight = this.options.highlight;\n var border = highlight.border;\n var markers = this.options.markers;\n var center = this.box.center();\n var radius = (markers.size + markers.border.width + border.width) / 2;\n var highlightGroup = new Group();\n var shadow = new Circle(new GeometryCircle([ center.x, center.y + radius / 5 + border.width / 2 ], radius + border.width / 2), {\n stroke: {\n color: 'none'\n },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [ {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n }, {\n offset: 1,\n color: markers.background,\n opacity: 0\n } ]\n })\n });\n var overlay = new Circle(new GeometryCircle([ center.x, center.y ], radius), {\n stroke: {\n color: border.color ||\n new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex(),\n width: border.width,\n opacity: border.opacity\n },\n fill: {\n color: markers.background,\n opacity: highlight.opacity\n }\n });\n\n highlightGroup.append(shadow, overlay);\n\n return highlightGroup;\n },\n\n createFocusHighlight: function(style) {\n var highlightOptions = this.options.accessibility.highlight;\n var markers = this.options.markers;\n var center = this.box.center();\n var radius = (markers.size + markers.border.width) / 2 + highlightOptions.border.width / 2;\n var highlight = new Circle(new GeometryCircle([ center.x, center.y ], radius), style);\n\n return highlight;\n }\n });\n\n Bubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: {\n position: CENTER\n },\n highlight: {\n opacity: 1,\n border: {\n color: \"#fff\",\n width: 2,\n opacity: 1\n }\n }\n });\n\n Bubble.prototype.defaults.highlight.zIndex = undefined;\n\n var BubbleChart = ScatterChart.extend({\n _initFields: function() {\n this._maxSize = MIN_VALUE;\n ScatterChart.fn._initFields.call(this);\n },\n\n addValue: function(value, fields) {\n if (value.size !== null && (value.size > 0 || (value.size < 0 && fields.series.negativeValues.visible))) {\n this._maxSize = Math.max(this._maxSize, Math.abs(value.size));\n ScatterChart.fn.addValue.call(this, value, fields);\n } else {\n this.points.push(null);\n this.seriesPoints[fields.seriesIx].push(null);\n }\n },\n\n reflow: function(box) {\n this.updateBubblesSize(box);\n ScatterChart.fn.reflow.call(this, box);\n },\n\n pointType: function() {\n return Bubble;\n },\n\n createPoint: function(value, fields) {\n var series = fields.series;\n var pointsCount = series.data.length;\n var delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount);\n var animationOptions = {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay,\n type: BUBBLE\n };\n\n var color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(\n series.negativeValues.color, color\n );\n }\n\n var pointOptions = deepExtend({\n labels: {\n animation: {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay\n }\n }\n }, this.pointOptions(series, fields.seriesIx), {\n markers: {\n type: CIRCLE,\n border: series.border,\n opacity: series.opacity,\n animation: animationOptions\n }\n });\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n pointOptions.markers.background = color;\n\n var point = new Bubble(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\n\n updateBubblesSize: function(box) {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref.options.series;\n var boxSize = Math.min(box.width(), box.height());\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesPoints = this$1$1.seriesPoints[seriesIx];\n var minSize = currentSeries.minSize || Math.max(boxSize * 0.02, 10);\n var maxSize = currentSeries.maxSize || boxSize * 0.2;\n var minR = minSize / 2;\n var maxR = maxSize / 2;\n var minArea = Math.PI * minR * minR;\n var maxArea = Math.PI * maxR * maxR;\n var areaRange = maxArea - minArea;\n var areaRatio = areaRange / this$1$1._maxSize;\n\n for (var pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n var point = seriesPoints[pointIx];\n if (point) {\n var area = Math.abs(point.value.size) * areaRatio;\n var radius = Math.sqrt((minArea + area) / Math.PI);\n var baseZIndex = valueOrDefault(point.options.zIndex, 0);\n var zIndex = baseZIndex + (1 - radius / maxR);\n\n deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: {\n zIndex: zIndex + 1\n }\n });\n }\n }\n }\n },\n\n formatPointValue: function(point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.size, point.category);\n },\n\n createAnimation: function() {},\n\n createVisual: function() {}\n });\n\n setDefaultOptions(BubbleChart, {\n tooltip: {\n format: \"{3}\"\n },\n labels: {\n format: \"{3}\"\n }\n });\n\n var Target = ShapeElement.extend({\n\n });\n\n deepExtend(Target.prototype, PointEventsMixin);\n\n var Bullet = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this, options);\n\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n },\n\n render: function() {\n var options = this.options;\n\n if (!this._rendered) {\n this._rendered = true;\n\n if (defined(this.value.target)) {\n this.target = new Target({\n type: options.target.shape,\n background: options.target.color || this.color,\n opacity: options.opacity,\n zIndex: options.zIndex,\n border: options.target.border,\n vAlign: TOP,\n align: RIGHT\n });\n\n this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n\n this.append(this.target);\n }\n\n this.createLabel();\n this.createNote();\n }\n },\n\n createLabel: function() {\n var options = this.options;\n var labels = options.labels;\n\n if (labels.visible) {\n this.label = this.createLabelElement(labels);\n this.append(this.label);\n }\n },\n\n createLabelElement: function(options) {\n return new BarLabel(this.getLabelText(options),\n options,\n this.pointData());\n },\n\n getLabelText: function(options) {\n var labelTemplate = getTemplate(options);\n\n if (labelTemplate) {\n return labelTemplate(this.pointData());\n }\n\n return this.formatValue(options.format);\n },\n\n reflow: function(box) {\n this.render();\n\n var ref = this;\n var options = ref.options;\n var target = ref.target;\n var chart = ref.owner;\n var invertAxes = options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.options);\n var categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis);\n var targetValueSlot = valueAxis.getSlot(this.value.target);\n var targetSlotX = invertAxes ? targetValueSlot : categorySlot;\n var targetSlotY = invertAxes ? categorySlot : targetValueSlot;\n\n if (target) {\n var targetSlot = new Box(\n targetSlotX.x1, targetSlotY.y1,\n targetSlotX.x2, targetSlotY.y2\n );\n target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\n target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\n target.reflow(targetSlot);\n }\n\n var label = this.label;\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(box);\n }\n\n if (this.note) {\n this.note.reflow(box);\n }\n\n this.box = box;\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n this.addAccessibilityAttributesToVisual();\n\n var options = this.options;\n var body = Path.fromRect(this.box.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n\n if (options.border.width > 0) {\n body.options.set(\"stroke\", {\n color: options.border.color || this.color,\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n\n this.bodyVisual = body;\n\n alignPathToPixel(body);\n this.visual.append(body);\n },\n\n createAnimation: function() {\n if (this.bodyVisual) {\n this.animation = Animation.create(\n this.bodyVisual, this.options.animation\n );\n }\n },\n\n createHighlight: function(style) {\n return Path.fromRect(this.box.toRect(), style);\n },\n\n highlightVisual: function() {\n return this.bodyVisual;\n },\n\n highlightVisualArgs: function() {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n pointData: function() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series\n };\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n },\n\n getIndex: function() {\n return this.categoryIx;\n }\n });\n\n Bullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n Bullet.prototype.createFocusHighlight = Bar.prototype.createFocusHighlight;\n\n setDefaultOptions(Bullet, {\n border: {\n width: 1\n },\n vertical: false,\n opacity: 1,\n target: {\n shape: \"\",\n border: {\n width: 0,\n color: \"green\"\n },\n line: {\n width: 2\n }\n },\n labels: {\n visible: false\n },\n tooltip: {\n format: \"Current: {0}
Target: {1}\"\n },\n notes: {\n label: {}\n },\n accessibility: {\n role: CHART_POINT_ROLE,\n className: CHART_POINT_CLASSNAME,\n ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n }\n });\n\n deepExtend(Bullet.prototype, PointEventsMixin);\n deepExtend(Bullet.prototype, NoteMixin);\n deepExtend(Bullet.prototype, AccessibilityAttributesMixin);\n\n var BulletChart = CategoricalChart.extend({\n init: function(plotArea, options) {\n\n wrapData(options);\n\n CategoricalChart.fn.init.call(this, plotArea, options);\n },\n\n reflowCategories: function(categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n\n plotRange: function(point) {\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n\n return [ axisCrossingValue, point.value.current || axisCrossingValue ];\n },\n\n createPoint: function(data, fields) {\n var categoryIx = fields.categoryIx;\n var series = fields.series;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var value = data.valueFields;\n\n var bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n\n var color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(bulletOptions, value, fields);\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n\n var bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\n\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n\n cluster.append(bullet);\n\n return bullet;\n },\n\n updateRange: function(value, fields) {\n var current = value.current;\n var target = value.target;\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] =\n axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, current, target);\n axisRange.max = Math.max(axisRange.max, current, target);\n }\n },\n\n formatPointValue: function(point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n },\n\n pointValue: function(data) {\n return data.valueFields.current;\n },\n\n aboveAxis: function(point) {\n var value = point.value.current;\n\n return value > 0;\n },\n\n createAnimation: function() {\n var this$1$1 = this;\n\n var points = this.points;\n\n this._setAnimationOptions();\n\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n point.options.animation = this$1$1.options.animation;\n point.createAnimation();\n }\n }\n });\n\n BulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n\n setDefaultOptions(BulletChart, {\n animation: {\n type: BAR\n }\n });\n\n function wrapData(options) {\n var series = options.series;\n\n for (var i = 0; i < series.length; i++) {\n var seriesItem = series[i];\n var data = seriesItem.data;\n if (data && !isArray(data[0]) && !isObject(data[0])) {\n seriesItem.data = [ data ];\n }\n }\n }\n\n var BaseTooltip = Class.extend({\n init: function(chartService, options) {\n\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n },\n\n getStyle: function(options, point) {\n var background = options.background;\n var border = options.border.color;\n\n if (point) {\n var pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n\n var padding = getSpacing(options.padding || {}, \"auto\");\n\n return {\n backgroundColor: background,\n borderColor: border,\n font: options.font,\n color: options.color,\n opacity: options.opacity,\n borderWidth: styleValue(options.border.width),\n paddingTop: styleValue(padding.top),\n paddingBottom: styleValue(padding.bottom),\n paddingLeft: styleValue(padding.left),\n paddingRight: styleValue(padding.right)\n };\n },\n\n show: function(options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n\n var style = this.getStyle(tooltipOptions, point);\n options.style = style;\n\n var background = new Color(style.backgroundColor);\n if (!defined(tooltipOptions.color) && !background.isDark()) {\n options.className = \"k-chart-tooltip-inverse\";\n }\n\n this.chartService.notify(SHOW_TOOLTIP, options);\n\n this.visible = true;\n },\n\n hide: function() {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n\n this.visible = false;\n },\n\n destroy: function() {\n delete this.chartService;\n }\n });\n\n setDefaultOptions(BaseTooltip, {\n border: {\n width: 1\n },\n opacity: 1\n });\n\n var CrosshairTooltip = BaseTooltip.extend({\n init: function(chartService, crosshair, options) {\n BaseTooltip.fn.init.call(this, chartService, options);\n\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\n },\n\n initAxisName: function() {\n var axis = this.crosshair.axis;\n var plotArea = axis.plotArea;\n var name;\n if (plotArea.categoryAxis) {\n name = axis.getCategory ? \"categoryAxis\" : \"valueAxis\";\n } else {\n name = axis.options.vertical ? \"yAxis\" : \"xAxis\";\n }\n this.axisName = name;\n },\n\n showAt: function(point) {\n var ref = this;\n var axis = ref.crosshair.axis;\n var options = ref.options;\n var value = axis[options.stickyMode ? \"getCategory\" : \"getValue\"](point);\n var formattedValue = value;\n\n if (options.format) {\n formattedValue = this.formatService.auto(options.format, value);\n } else if (axis.options.type === DATE) {\n formattedValue = this.formatService.auto(axis.options.labels.dateFormats[axis.options.baseUnit], value);\n }\n\n this.show({\n point: point,\n anchor: this.getAnchor(),\n crosshair: this.crosshair,\n value: formattedValue,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n }, this.options);\n },\n\n hide: function() {\n this.chartService.notify(HIDE_TOOLTIP, {\n crosshair: this.crosshair,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n });\n },\n\n getAnchor: function() {\n var ref = this;\n var crosshair = ref.crosshair;\n var ref_options = ref.options;\n var position = ref_options.position;\n var padding = ref_options.padding;\n var vertical = !crosshair.axis.options.vertical;\n var lineBox = crosshair.line.bbox();\n var horizontalAlign, verticalAlign, point;\n\n if (vertical) {\n horizontalAlign = CENTER;\n if (position === BOTTOM) {\n verticalAlign = TOP;\n point = lineBox.bottomLeft().translate(0, padding);\n } else {\n verticalAlign = BOTTOM;\n point = lineBox.topLeft().translate(0, -padding);\n }\n } else {\n verticalAlign = CENTER;\n if (position === LEFT) {\n horizontalAlign = RIGHT;\n point = lineBox.topLeft().translate(-padding, 0);\n } else {\n horizontalAlign = LEFT;\n point = lineBox.topRight().translate(padding, 0);\n }\n }\n\n return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n });\n\n setDefaultOptions(CrosshairTooltip, {\n padding: 10\n });\n\n var Crosshair = ChartElement.extend({\n init: function(chartService, axis, options) {\n ChartElement.fn.init.call(this, options);\n\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n\n var tooltipOptions = this.options.tooltip;\n\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this,\n deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode })\n );\n }\n },\n\n showAt: function(point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n },\n\n hide: function() {\n this.line.visible(false);\n\n if (this.tooltip) {\n this.tooltip.hide();\n }\n },\n\n moveLine: function() {\n var ref = this;\n var axis = ref.axis;\n var point = ref.point;\n var vertical = axis.options.vertical;\n var box = this.getBox();\n var dim = vertical ? Y : X;\n var lineStart = new GeometryPoint(box.x1, box.y1);\n var lineEnd;\n\n if (vertical) {\n lineEnd = new GeometryPoint(box.x2, box.y1);\n } else {\n lineEnd = new GeometryPoint(box.x1, box.y2);\n }\n\n if (point) {\n if (this.stickyMode) {\n var slot = axis.getSlot(axis.pointCategoryIndex(point));\n lineStart[dim] = lineEnd[dim] = slot.center()[dim];\n } else {\n lineStart[dim] = lineEnd[dim] = point[dim];\n }\n }\n\n this.box = box;\n\n this.line.moveTo(lineStart).lineTo(lineEnd);\n },\n\n getBox: function() {\n var axis = this.axis;\n var axes = axis.pane.axes;\n var length = axes.length;\n var vertical = axis.options.vertical;\n var box = axis.lineBox().clone();\n var dim = vertical ? X : Y;\n var axisLineBox;\n\n for (var i = 0; i < length; i++) {\n var currentAxis = axes[i];\n if (currentAxis.options.vertical !== vertical) {\n if (!axisLineBox) {\n axisLineBox = currentAxis.lineBox().clone();\n } else {\n axisLineBox.wrap(currentAxis.lineBox());\n }\n }\n }\n\n box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n\n return box;\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n var options = this.options;\n this.line = new Path({\n stroke: {\n color: options.color,\n width: options.width,\n opacity: options.opacity,\n dashType: options.dashType\n },\n visible: false\n });\n\n this.moveLine();\n this.visual.append(this.line);\n },\n\n destroy: function() {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n\n ChartElement.fn.destroy.call(this);\n }\n });\n\n setDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: {\n visible: false\n }\n });\n\n var ChartContainer = ChartElement.extend({\n init: function(options, pane) {\n ChartElement.fn.init.call(this, options);\n this.pane = pane;\n },\n\n shouldClip: function() {\n var children = this.children;\n var length = children.length;\n\n for (var i = 0; i < length; i++) {\n if (children[i].options.clip === true) {\n return true;\n }\n }\n return false;\n },\n\n _clipBox: function() {\n return this.pane.chartsBox();\n },\n\n createVisual: function() {\n this.visual = new Group({\n zIndex: 0\n });\n\n if (this.shouldClip()) {\n var clipBox = this.clipBox = this._clipBox();\n var clipRect = clipBox.toRect();\n var clipPath = Path.fromRect(clipRect);\n alignPathToPixel(clipPath);\n\n this.visual.clip(clipPath);\n this.unclipLabels();\n }\n },\n\n stackRoot: function() {\n return this;\n },\n\n unclipLabels: function() {\n var ref = this;\n var charts = ref.children;\n var clipBox = ref.clipBox;\n\n for (var i = 0; i < charts.length; i++) {\n var points = charts[i].points || {};\n var length = points.length;\n\n for (var j = 0; j < length; j++) {\n var point = points[j];\n if (point && point.visible !== false && point.overlapsBox && point.overlapsBox(clipBox)) {\n if (point.unclipElements) {\n point.unclipElements();\n } else {\n var label = point.label;\n var note = point.note;\n\n if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n }\n },\n\n destroy: function() {\n ChartElement.fn.destroy.call(this);\n\n delete this.parent;\n }\n });\n\n ChartContainer.prototype.isStackRoot = true;\n\n var Pane = BoxElement.extend({\n init: function(options) {\n BoxElement.fn.init.call(this, options);\n\n this.id = paneID();\n\n this.createTitle();\n\n this.content = new ChartElement();\n\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n\n this.axes = [];\n this.charts = [];\n },\n\n createTitle: function() {\n var titleOptions = this.options.title;\n if (isObject(titleOptions)) {\n titleOptions = deepExtend({}, titleOptions, {\n align: titleOptions.position,\n position: TOP\n });\n }\n\n this.title = Title.buildTitle(titleOptions, Pane.prototype.options.title);\n if (this.title) {\n this.append(this.title);\n }\n },\n\n appendAxis: function(axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n },\n\n appendAxisAt: function(axis, pos) {\n this.content.append(axis);\n this.axes.splice(pos, 0, axis);\n axis.pane = this;\n },\n\n appendChart: function(chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n },\n\n empty: function() {\n var this$1$1 = this;\n\n var plotArea = this.parent;\n\n if (plotArea) {\n for (var i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this$1$1.axes[i]);\n }\n\n for (var i$1 = 0; i$1 < this.charts.length; i$1++) {\n plotArea.removeChart(this$1$1.charts[i$1]);\n }\n }\n\n this.axes = [];\n this.charts = [];\n\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n },\n\n reflow: function(targetBox) {\n // Content (such as charts) is rendered, but excluded from reflows\n var content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n\n BoxElement.fn.reflow.call(this, targetBox);\n\n if (content) {\n this.children.push(content);\n }\n\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n },\n\n visualStyle: function() {\n var style = BoxElement.fn.visualStyle.call(this);\n style.zIndex = -10;\n\n return style;\n },\n\n renderComplete: function() {\n if (this.options.visible) {\n this.createGridLines();\n }\n },\n\n stackRoot: function() {\n return this;\n },\n\n clipRoot: function() {\n return this;\n },\n\n createGridLines: function() {\n var axes = this.axes;\n var allAxes = axes.concat(this.parent.axes);\n var vGridLines = [];\n var hGridLines = [];\n\n // TODO\n // Is full combination really necessary?\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var vertical = axis.options.vertical;\n var gridLines = vertical ? vGridLines : hGridLines;\n for (var j = 0; j < allAxes.length; j++) {\n if (gridLines.length === 0) {\n var altAxis = allAxes[j];\n if (vertical !== altAxis.options.vertical) {\n append(gridLines, axis.createGridLines(altAxis));\n }\n }\n }\n }\n },\n\n refresh: function() {\n this.visual.clear();\n\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n\n this.visual.append(this.content.visual);\n\n this.renderComplete();\n this.notifyRender();\n },\n\n chartsBox: function() {\n var axes = this.axes;\n var length = axes.length;\n var chartsBox = new Box();\n\n for (var idx = 0; idx < length; idx++) {\n var axis = axes[idx];\n var axisValueField = axis.options.vertical ? Y : X;\n var lineBox = axis.lineBox();\n chartsBox[axisValueField + 1] = lineBox[axisValueField + 1];\n chartsBox[axisValueField + 2] = lineBox[axisValueField + 2];\n }\n\n if (chartsBox.x2 === 0) {\n var allAxes = this.parent.axes;\n var length$1 = allAxes.length;\n\n for (var idx$1 = 0; idx$1 < length$1; idx$1++) {\n var axis$1 = allAxes[idx$1];\n if (!axis$1.options.vertical) {\n var lineBox$1 = axis$1.lineBox();\n chartsBox.x1 = lineBox$1.x1;\n chartsBox.x2 = lineBox$1.x2;\n }\n }\n }\n return chartsBox;\n },\n\n clipBox: function() {\n return this.chartContainer.clipBox;\n },\n\n notifyRender: function() {\n var service = this.getService();\n if (service) {\n service.notify(PANE_RENDER, {\n pane: new ChartPane(this),\n index: this.paneIndex,\n name: this.options.name\n });\n }\n }\n });\n\n var ID = 1;\n\n function paneID() {\n return \"pane\" + ID++;\n }\n\n Pane.prototype.isStackRoot = true;\n\n setDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: {\n align: LEFT\n },\n visible: true\n });\n\n var PlotAreaBase = ChartElement.extend({\n init: function(series, options, chartService) {\n ChartElement.fn.init.call(this, options);\n\n this.initFields(series, options);\n this.series = series;\n this.initSeries();\n this.charts = [];\n this.options.legend = this.options.legend || {};\n this.options.legend.data = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.originalOptions = options;\n this.originalSeries = series;\n this._bindCache = new WeakMap();\n\n this.createPanes();\n this.render();\n this.createCrosshairs();\n },\n\n initFields: function() { },\n\n initSeries: function() {\n var series = this.series;\n\n for (var i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n },\n\n bindPoint: function(series, pointIx, item) {\n var cached = this._bindCache.get(series);\n if (!cached) {\n cached = [];\n this._bindCache.set(series, cached);\n }\n\n var data = cached[pointIx];\n if (!data) {\n data = cached[pointIx] = SeriesBinder.current.bindPoint(series, pointIx, item);\n }\n\n return data;\n },\n\n createPanes: function() {\n var this$1$1 = this;\n\n var titleOptions = this.options.title || {};\n var paneDefaults = this.options.paneDefaults;\n var paneOptions = this.options.panes || [];\n var panesLength = Math.max(paneOptions.length, 1);\n var panes = [];\n\n var defaults = deepExtend({\n title: {\n color: titleOptions.color\n }\n }, paneDefaults);\n\n for (var i = 0; i < panesLength; i++) {\n var options = deepExtend({}, defaults, paneOptions[i]);\n if (isString(options.title)) {\n options.title = deepExtend({ text: options.title }, defaults.title);\n }\n\n var currentPane = new Pane(options);\n currentPane.paneIndex = i;\n\n panes.push(currentPane);\n this$1$1.append(currentPane);\n }\n\n this.panes = panes;\n },\n\n crosshairOptions: function(axis) {\n return axis.options.crosshair;\n },\n\n createCrosshairs: function(panes) {\n var this$1$1 = this;\n if (panes === void 0) { panes = this.panes; }\n\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n for (var j = 0; j < pane.axes.length; j++) {\n var axis = pane.axes[j];\n var options = this$1$1.crosshairOptions(axis);\n if (options && options.visible) {\n var currentCrosshair = new Crosshair(this$1$1.chartService, axis, options);\n\n this$1$1.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n },\n\n removeCrosshairs: function(pane) {\n var crosshairs = this.crosshairs;\n var axes = pane.axes;\n\n for (var i = crosshairs.length - 1; i >= 0; i--) {\n for (var j = 0; j < axes.length; j++) {\n if (crosshairs[i].axis === axes[j]) {\n crosshairs.splice(i, 1);\n break;\n }\n }\n }\n },\n\n hideCrosshairs: function() {\n var crosshairs = this.crosshairs;\n for (var idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n },\n\n findPane: function(name) {\n var panes = this.panes;\n var matchingPane;\n\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].options.name === name) {\n matchingPane = panes[i];\n break;\n }\n }\n\n return matchingPane || panes[0];\n },\n\n findPointPane: function(point) {\n var panes = this.panes;\n var matchingPane;\n\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].box.containsPoint(point)) {\n matchingPane = panes[i];\n break;\n }\n }\n\n return matchingPane;\n },\n\n appendAxis: function(axis) {\n var pane = this.findPane(axis.options.pane);\n\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n },\n\n removeAxis: function(axisToRemove) {\n var this$1$1 = this;\n\n var filteredAxes = [];\n\n for (var i = 0; i < this.axes.length; i++) {\n var axis = this$1$1.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n\n this.axes = filteredAxes;\n },\n\n appendChart: function(chart, pane) {\n this.charts.push(chart);\n if (pane) {\n pane.appendChart(chart);\n } else {\n this.append(chart);\n }\n },\n\n removeChart: function(chartToRemove) {\n var this$1$1 = this;\n\n var filteredCharts = [];\n\n for (var i = 0; i < this.charts.length; i++) {\n var chart = this$1$1.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n\n this.charts = filteredCharts;\n },\n\n addToLegend: function(series) {\n var count = series.length;\n var legend = this.options.legend;\n var labels = legend.labels || {};\n var inactiveItems = legend.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n var data = [];\n\n for (var i = 0; i < count; i++) {\n var currentSeries = series[i];\n var seriesVisible = currentSeries.visible !== false;\n if (currentSeries.visibleInLegend === false) {\n continue;\n }\n\n var text = currentSeries.name;\n var labelTemplate = seriesVisible ? getTemplate(labels) : getTemplate(inactiveItemsLabels) || getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n text: hasValue(text) ? text : \"\",\n series: currentSeries\n });\n }\n\n var defaults = currentSeries._defaults;\n var color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n\n var itemLabelOptions = (void 0), markerColor = (void 0);\n if (seriesVisible) {\n itemLabelOptions = {};\n markerColor = color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = inactiveItems.markers.color;\n }\n\n if (hasValue(text) && text !== \"\") {\n data.push({\n text: text,\n labels: itemLabelOptions,\n markerColor: markerColor,\n series: currentSeries,\n active: seriesVisible\n });\n }\n }\n\n append(legend.data, data);\n },\n\n groupAxes: function(panes) {\n var xAxes = [];\n var yAxes = [];\n\n for (var paneIx = 0; paneIx < panes.length; paneIx++) {\n var paneAxes = panes[paneIx].axes;\n for (var axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n var axis = paneAxes[axisIx];\n if (axis.options.vertical) {\n yAxes.push(axis);\n } else {\n xAxes.push(axis);\n }\n }\n }\n\n return { x: xAxes, y: yAxes, any: xAxes.concat(yAxes) };\n },\n\n groupSeriesByPane: function() {\n var this$1$1 = this;\n\n var series = this.series;\n var seriesByPane = {};\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var pane = this$1$1.seriesPaneName(currentSeries);\n\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [ currentSeries ];\n }\n }\n\n return seriesByPane;\n },\n\n filterVisibleSeries: function(series) {\n var result = [];\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (currentSeries.visible !== false) {\n result.push(currentSeries);\n }\n }\n\n return result;\n },\n\n reflow: function(targetBox) {\n var options = this.options.plotArea;\n var panes = this.panes;\n var margin = getSpacing(options.margin);\n\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n\n this.detachLabels();\n this.reflowAxes(panes);\n this.reflowCharts(panes);\n },\n\n redraw: function(panes) {\n var this$1$1 = this;\n\n var panesArray = [].concat(panes);\n this.initSeries();\n\n //prevents leak during partial redraws. the cached gradients observers retain reference to the destroyed elements.\n var root = this.getRoot();\n if (root) {\n root.cleanGradients();\n }\n\n for (var i = 0; i < panesArray.length; i++) {\n this$1$1.removeCrosshairs(panesArray[i]);\n panesArray[i].empty();\n }\n\n this._bindCache = new WeakMap();\n\n this.render(panesArray);\n this.detachLabels();\n this.reflowAxes(this.panes);\n this.reflowCharts(panesArray);\n\n this.createCrosshairs(panesArray);\n\n for (var i$1 = 0; i$1 < panesArray.length; i$1++) {\n panesArray[i$1].refresh();\n }\n },\n\n axisCrossingValues: function(axis, crossingAxes) {\n var options = axis.options;\n var crossingValues = [].concat(\n options.axisCrossingValues || options.axisCrossingValue\n );\n var valuesToAdd = crossingAxes.length - crossingValues.length;\n var defaultValue = crossingValues[0] || 0;\n\n for (var i = 0; i < valuesToAdd; i++) {\n crossingValues.push(defaultValue);\n }\n\n return crossingValues;\n },\n\n alignAxisTo: function(axis, targetAxis, crossingValue, targetCrossingValue) {\n var slot = axis.getSlot(crossingValue, crossingValue, true);\n var slotEdge = axis.options.reverse ? 2 : 1;\n var targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true);\n var targetEdge = targetAxis.options.reverse ? 2 : 1;\n var axisBox = axis.box.translate(\n targetSlot[X + targetEdge] - slot[X + slotEdge],\n targetSlot[Y + targetEdge] - slot[Y + slotEdge]\n );\n\n if (axis.pane !== targetAxis.pane) {\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n }\n\n axis.reflow(axisBox);\n },\n\n alignAxes: function(xAxes, yAxes) {\n var this$1$1 = this;\n\n var xAnchor = xAxes[0];\n var yAnchor = yAxes[0];\n var xAnchorCrossings = this.axisCrossingValues(xAnchor, yAxes);\n var yAnchorCrossings = this.axisCrossingValues(yAnchor, xAxes);\n var leftAnchors = {};\n var rightAnchors = {};\n var topAnchors = {};\n var bottomAnchors = {};\n\n for (var i = 0; i < yAxes.length; i++) {\n var axis = yAxes[i];\n var pane = axis.pane;\n var paneId = pane.id;\n var visible = axis.options.visible !== false;\n\n // Locate pane anchor, if any, and use its axisCrossingValues\n var anchor = paneAnchor(xAxes, pane) || xAnchor;\n var anchorCrossings = xAnchorCrossings;\n\n if (anchor !== xAnchor) {\n anchorCrossings = this$1$1.axisCrossingValues(anchor, yAxes);\n }\n\n this$1$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n\n if (axis.options._overlap) {\n continue;\n }\n\n if (round(axis.lineBox().x1) === round(anchor.lineBox().x1)) {\n // Push the axis to the left the previous y-axis so they don't overlap\n if (leftAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(leftAnchors[paneId].box, LEFT)\n .translate(-axis.options.margin, 0)\n );\n }\n\n if (visible) {\n leftAnchors[paneId] = axis;\n }\n }\n\n if (round(axis.lineBox().x2) === round(anchor.lineBox().x2)) {\n // Flip the labels on the right if we're at the right end of the pane\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n\n this$1$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n\n // Push the axis to the right the previous y-axis so they don't overlap\n if (rightAnchors[paneId]) {\n axis.reflow(axis.box\n .alignTo(rightAnchors[paneId].box, RIGHT)\n .translate(axis.options.margin, 0)\n );\n }\n\n if (visible) {\n rightAnchors[paneId] = axis;\n }\n }\n\n // Locate pane anchor, if any, and align the axis to it\n var paneYAnchor = paneAnchor(yAxes, pane) || yAnchor;\n if (paneYAnchor !== axis) {\n axis.alignTo(paneYAnchor);\n axis.reflow(axis.box);\n }\n }\n\n for (var i$1 = 0; i$1 < xAxes.length; i$1++) {\n var axis$1 = xAxes[i$1];\n var pane$1 = axis$1.pane;\n var paneId$1 = pane$1.id;\n var visible$1 = axis$1.options.visible !== false;\n\n // Locate pane anchor and use its axisCrossingValues\n var anchor$1 = paneAnchor(yAxes, pane$1) || yAnchor;\n var anchorCrossings$1 = yAnchorCrossings;\n if (anchor$1 !== yAnchor) {\n anchorCrossings$1 = this$1$1.axisCrossingValues(anchor$1, xAxes);\n }\n\n this$1$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n\n if (axis$1.options._overlap) {\n continue;\n }\n\n if (round(axis$1.lineBox().y1) === round(anchor$1.lineBox().y1)) {\n // Flip the labels on top if we're at the top of the pane\n if (!axis$1._mirrored) {\n axis$1.options.labels.mirror = !axis$1.options.labels.mirror;\n axis$1._mirrored = true;\n }\n this$1$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n\n // Push the axis above the previous x-axis so they don't overlap\n if (topAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box\n .alignTo(topAnchors[paneId$1].box, TOP)\n .translate(0, -axis$1.options.margin)\n );\n }\n\n if (visible$1) {\n topAnchors[paneId$1] = axis$1;\n }\n }\n\n if (round(axis$1.lineBox().y2, COORD_PRECISION) === round(anchor$1.lineBox().y2, COORD_PRECISION)) {\n // Push the axis below the previous x-axis so they don't overlap\n if (bottomAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box\n .alignTo(bottomAnchors[paneId$1].box, BOTTOM)\n .translate(0, axis$1.options.margin)\n );\n }\n\n if (visible$1) {\n bottomAnchors[paneId$1] = axis$1;\n }\n }\n\n if (i$1 !== 0) {\n axis$1.alignTo(xAnchor);\n axis$1.reflow(axis$1.box);\n }\n }\n },\n\n shrinkAxisWidth: function(panes) {\n var axes = this.groupAxes(panes).any;\n var axisBox = axisGroupBox(axes);\n var overflowX = 0;\n\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n\n if (currentPane.axes.length > 0) {\n overflowX = Math.max(\n overflowX,\n axisBox.width() - currentPane.contentBox.width()\n );\n }\n }\n\n if (overflowX !== 0) {\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis = axes[i$1];\n\n if (!currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n }\n }\n }\n },\n\n shrinkAxisHeight: function(panes) {\n var shrinked;\n\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n var axes = currentPane.axes;\n var overflowY = Math.max(0, axisGroupBox(axes).height() - currentPane.contentBox.height());\n\n if (overflowY !== 0) {\n for (var j = 0; j < axes.length; j++) {\n var currentAxis = axes[j];\n\n if (currentAxis.options.vertical) {\n currentAxis.reflow(\n currentAxis.box.shrink(0, overflowY)\n );\n }\n }\n shrinked = true;\n }\n }\n\n return shrinked;\n },\n\n fitAxes: function(panes) {\n var axes = this.groupAxes(panes).any;\n var offsetX = 0;\n\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n var paneAxes = currentPane.axes;\n var paneBox = currentPane.contentBox;\n\n if (paneAxes.length > 0) {\n var axisBox = axisGroupBox(paneAxes);\n // OffsetY is calculated and applied per pane\n var offsetY = Math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n\n // OffsetX is calculated and applied globally\n offsetX = Math.max(offsetX, paneBox.x1 - axisBox.x1);\n\n for (var j = 0; j < paneAxes.length; j++) {\n var currentAxis = paneAxes[j];\n\n currentAxis.reflow(\n currentAxis.box.translate(0, offsetY)\n );\n }\n }\n }\n\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis$1 = axes[i$1];\n\n currentAxis$1.reflow(\n currentAxis$1.box.translate(offsetX, 0)\n );\n }\n },\n\n reflowAxes: function(panes) {\n var this$1$1 = this;\n\n var axes = this.groupAxes(panes);\n\n for (var i = 0; i < panes.length; i++) {\n this$1$1.reflowPaneAxes(panes[i]);\n }\n\n if (axes.x.length > 0 && axes.y.length > 0) {\n this.alignAxes(axes.x, axes.y);\n this.shrinkAxisWidth(panes);\n\n this.autoRotateAxisLabels(axes);\n\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisWidth(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n\n this.shrinkAxisHeight(panes);\n this.alignAxes(axes.x, axes.y);\n\n if (this.shrinkAxisHeight(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n\n this.fitAxes(panes);\n }\n },\n\n autoRotateAxisLabels: function(groupedAxes) {\n var this$1$1 = this;\n\n var ref = this;\n var panes = ref.panes;\n var axes = allPaneAxes(panes);\n var rotated;\n\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (axis.autoRotateLabels()) {\n rotated = true;\n }\n }\n\n if (rotated) {\n for (var idx$1 = 0; idx$1 < panes.length; idx$1++) {\n this$1$1.reflowPaneAxes(panes[idx$1]);\n }\n\n if (groupedAxes.x.length > 0 && groupedAxes.y.length > 0) {\n this.alignAxes(groupedAxes.x, groupedAxes.y);\n this.shrinkAxisWidth(panes);\n }\n }\n },\n\n reflowPaneAxes: function(pane) {\n var axes = pane.axes;\n var length = axes.length;\n\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n axes[i].reflow(pane.contentBox);\n }\n }\n },\n\n reflowCharts: function(panes) {\n var charts = this.charts;\n var count = charts.length;\n var box = this.box;\n\n for (var i = 0; i < count; i++) {\n var chartPane = charts[i].pane;\n if (!chartPane || inArray(chartPane, panes)) {\n charts[i].reflow(box);\n }\n }\n },\n\n reflowPanes: function() {\n var ref = this;\n var box = ref.box;\n var panes = ref.panes;\n var panesLength = panes.length;\n var remainingHeight = box.height();\n var autoHeightPanes = 0;\n var top = box.y1;\n\n for (var i = 0; i < panesLength; i++) {\n var currentPane = panes[i];\n var height = currentPane.options.height;\n\n currentPane.options.width = box.width();\n\n if (!currentPane.options.height) {\n autoHeightPanes++;\n } else {\n if (height.indexOf && height.indexOf(\"%\")) {\n var percents = parseInt(height, 10) / 100;\n currentPane.options.height = percents * box.height();\n }\n\n currentPane.reflow(box.clone());\n\n remainingHeight -= currentPane.options.height;\n }\n }\n\n for (var i$1 = 0; i$1 < panesLength; i$1++) {\n var currentPane$1 = panes[i$1];\n\n if (!currentPane$1.options.height) {\n currentPane$1.options.height = remainingHeight / autoHeightPanes;\n }\n }\n\n for (var i$2 = 0; i$2 < panesLength; i$2++) {\n var currentPane$2 = panes[i$2];\n var paneBox = box\n .clone()\n .move(box.x1, top);\n\n currentPane$2.reflow(paneBox);\n\n top += currentPane$2.options.height;\n }\n },\n\n backgroundBox: function() {\n var axes = this.axes;\n var axesCount = axes.length;\n var box;\n\n for (var i = 0; i < axesCount; i++) {\n var axisA = axes[i];\n\n for (var j = 0; j < axesCount; j++) {\n var axisB = axes[j];\n\n if (axisA.options.vertical !== axisB.options.vertical) {\n var lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n\n if (!box) {\n box = lineBox;\n } else {\n box = box.wrap(lineBox);\n }\n }\n }\n }\n\n return box || this.box;\n },\n\n chartsBoxes: function() {\n var panes = this.panes;\n var boxes = [];\n\n for (var idx = 0; idx < panes.length; idx++) {\n boxes.push(panes[idx].chartsBox());\n }\n\n return boxes;\n },\n\n addBackgroundPaths: function(multipath) {\n var boxes = this.chartsBoxes();\n for (var idx = 0; idx < boxes.length; idx++) {\n multipath.paths.push(Path.fromRect(boxes[idx].toRect()));\n }\n },\n\n backgroundContainsPoint: function(point) {\n var boxes = this.chartsBoxes();\n for (var idx = 0; idx < boxes.length; idx++) {\n if (boxes[idx].containsPoint(point)) {\n return true;\n }\n }\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n var options = this.options.plotArea;\n var opacity = options.opacity;\n var background = options.background;\n var border = options.border; if (border === void 0) { border = {}; }\n if (isTransparent(background)) {\n background = WHITE;\n opacity = 0;\n }\n\n var bg = this._bgVisual = new MultiPath({\n fill: {\n color: background,\n opacity: opacity\n },\n stroke: {\n color: border.width ? border.color : \"\",\n width: border.width,\n dashType: border.dashType\n },\n zIndex: -1\n });\n\n this.addBackgroundPaths(bg);\n\n this.appendVisual(bg);\n },\n\n pointsByCategoryIndex: function(categoryIndex) {\n var charts = this.charts;\n var result = [];\n\n if (categoryIndex !== null) {\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n\n if (chart.pane.options.name === \"_navigator\") {\n continue;\n }\n\n var points = charts[i].categoryPoints[categoryIndex];\n if (points && points.length) {\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && defined(point.value) && point.value !== null) {\n result.push(point);\n }\n }\n }\n }\n }\n\n return result;\n },\n\n pointsBySeriesIndex: function(seriesIndex) {\n return this.filterPoints(function(point) {\n return point.series.index === seriesIndex;\n });\n },\n\n pointsByPointIndex: function(pointIndex) {\n return this.filterPoints(function(point) {\n return point.getIndex() === pointIndex;\n });\n },\n\n pointsBySeriesName: function(name) {\n return this.filterPoints(function(point) {\n return point.series.name === name;\n });\n },\n\n filterPoints: function(callback) {\n var charts = this.charts;\n var result = [];\n\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n var points = chart.points;\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && point.visible !== false && callback(point)) {\n result.push(point);\n }\n }\n }\n\n return result;\n },\n\n findPoint: function(callback) {\n var charts = this.charts;\n\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n var points = chart.points;\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && point.visible !== false && callback(point)) {\n return point;\n }\n }\n }\n },\n\n paneByPoint: function(point) {\n var panes = this.panes;\n\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n if (pane.box.containsPoint(point)) {\n return pane;\n }\n }\n },\n\n detachLabels: function() {\n var axes = this.groupAxes(this.panes);\n var xAxes = axes.x;\n var yAxes = axes.y;\n\n this.detachAxisGroupLabels(yAxes, xAxes);\n this.detachAxisGroupLabels(xAxes, yAxes);\n },\n\n detachAxisGroupLabels: function(axes, crossingAxes) {\n var this$1$1 = this;\n\n var labelAxisCount = 0;\n\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var pane = axis.pane;\n var anchor = paneAnchor(crossingAxes, pane) || crossingAxes[0];\n var axisIndex = i + labelAxisCount;\n var labelAxis = this$1$1.createLabelAxis(axis, axisIndex, anchor);\n\n if (labelAxis) {\n labelAxisCount++;\n\n var pos = pane.axes.indexOf(axis) + labelAxisCount;\n pane.appendAxisAt(labelAxis, pos);\n }\n }\n },\n\n createLabelAxis: function(axis, axisIndex, anchor) {\n var labelOptions = axis.options.labels;\n var position = labelOptions.position;\n var onAxis = position !== END && position !== START;\n var visible = labelOptions.visible;\n\n if (onAxis || visible === false) {\n return null;\n }\n\n var allAxes = this.groupAxes(this.panes);\n var crossingAxes = anchor.options.vertical ? allAxes.x : allAxes.y;\n var anchorCrossings = this.axisCrossingValues(anchor, crossingAxes);\n var end = position === END;\n var range = anchor.range();\n var edge = end ? range.max : range.min;\n var crossingValue = limitValue(anchorCrossings[axisIndex], range.min, range.max);\n\n if (crossingValue - edge === 0) {\n return null;\n }\n\n anchorCrossings.splice(axisIndex + 1, 0, edge);\n anchor.options.axisCrossingValues = anchorCrossings;\n\n var labelAxis = axis.clone();\n axis.clear();\n\n labelAxis.options.name = undefined;\n labelAxis.options.line.visible = false;\n\n labelAxis.options.crosshair = undefined;\n labelAxis.options.notes = undefined;\n labelAxis.options.plotBands = undefined;\n\n return labelAxis;\n },\n\n isTrendline: function(series) {\n return series && inArray(series.type, TRENDLINE_SERIES);\n },\n\n trendlineFactory: function() { /* abstract */ },\n\n createTrendlineSeries: function() {\n var this$1$1 = this;\n\n var modifiedSeries = [];\n\n this.series = this.series.map(function (series) {\n if (!this$1$1.isTrendline(series)) {\n return series;\n }\n\n var forSeries = this$1$1.seriesByName(series.for);\n if (!forSeries) {\n throw new Error('Invalid Configuration: Unable to locate linked series ' +\n \"\\\"\" + (series.for) + \"\\\" for trendline \\\"\" + (series.name) + \"\\\".\");\n }\n\n var valueFields = SeriesBinder.current.valueFields(forSeries);\n var field = last(valueFields); // Use the last field for multi-field series\n\n var trendlineSeries = this$1$1.trendlineFactory($.extend({}, {field: field}, series), forSeries);\n if (trendlineSeries) {\n if (forSeries.visible === false) {\n trendlineSeries.visible = false;\n }\n\n if (trendlineSeries.color === datavizConstants.INHERIT) {\n trendlineSeries.color = forSeries.color;\n }\n\n modifiedSeries.push(trendlineSeries);\n }\n\n return trendlineSeries;\n }).filter(function (series) { return series !== null; });\n\n return modifiedSeries;\n },\n\n seriesByName: function(name) {\n return this.series.find(function (series) { return series.name === name; });\n },\n\n getFirstPoint: function() {\n return this.pointsBySeriesIndex(0)[0];\n },\n\n getPointBelow: function(point) {\n return this._getNextPoint(point, this._pointsByVertical, 1);\n },\n\n getPointAbove: function(point) {\n return this._getNextPoint(point, this._pointsByVertical, -1);\n },\n\n getPointToTheRight: function(point) {\n return this._getNextPoint(point, this._pointsByHorizontal, 1);\n },\n\n getPointToTheLeft: function(point) {\n return this._getNextPoint(point, this._pointsByHorizontal, -1);\n },\n\n _getNextPoint: function(point, getPointsFunc, increment) {\n var this$1$1 = this;\n\n var points = getPointsFunc.call(this, point);\n var pointIndex = points.indexOf(point);\n var nextIndex = pointIndex + increment;\n var loopPoints = function (direction) {\n // loop over to last non-empty collection\n var result;\n var offset = 0;\n do {\n offset += direction;\n result = getPointsFunc.call(this$1$1, point, offset);\n } while (result.length === 0);\n\n return result;\n };\n\n if (nextIndex < 0) {\n points = loopPoints(-1);\n\n return points.at(-1);\n } else if (nextIndex >= points.length) {\n points = loopPoints(1);\n\n return points.at(0);\n }\n\n return points[nextIndex];\n },\n\n _pointsByVertical: function(basePoint) {\n return this.pointsByPointIndex(basePoint.getIndex());\n },\n\n _pointsByHorizontal: function(basePoint, offset) {\n if (offset === void 0) { offset = 0; }\n\n var index = cycleIndex(basePoint.series.index + offset, this.series.length);\n return this.pointsBySeriesIndex(index);\n }\n });\n\n function isSingleAxis(axis) {\n return !axis.pane.axes.some(function (a) { return a.options.vertical === axis.options.vertical && a !== axis && a.options.visible !== false; }\n );\n }\n\n function axisGroupBox(axes) {\n var length = axes.length;\n var box;\n\n for (var i = 0; i < length; i++) {\n var axis = axes[i];\n var visible = axis.options.visible !== false;\n if (visible || isSingleAxis(axis)) {\n var axisBox = visible ? axis.contentBox() : axis.lineBox();\n\n if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n\n return box || new Box();\n }\n\n function paneAnchor(axes, pane) {\n for (var i = 0; i < axes.length; i++) {\n var anchor = axes[i];\n if (anchor && anchor.pane === pane) {\n return anchor;\n }\n }\n }\n\n function isTransparent(color) {\n return color === \"\" || color === null || color === \"none\" || color === \"transparent\" || !defined(color);\n }\n\n var allPaneAxes = function (panes) { return panes.reduce(function (acc, pane) { return acc.concat(pane.axes); }, []); };\n\n setDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: {\n margin: {}\n },\n background: \"\",\n border: {\n color: BLACK,\n width: 0\n },\n paneDefaults: {\n title: {}\n },\n legend: {\n inactiveItems: {\n labels: {\n color: \"#919191\"\n },\n markers: {\n color: \"#919191\"\n }\n }\n }\n });\n\n var PlotAreaEventsMixin = {\n hover: function(chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_HOVER);\n },\n\n click: function(chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_CLICK);\n }\n };\n\n var SeriesAggregator = Class.extend({\n init: function(series, binder, defaultAggregates) {\n\n var canonicalFields = binder.canonicalFields(series);\n var valueFields = binder.valueFields(series);\n var sourceFields = binder.sourceFields(series, canonicalFields);\n var seriesFields = this._seriesFields = [];\n var defaults = defaultAggregates.query(series.type);\n var rootAggregate = series.aggregate || defaults;\n\n this._series = series;\n this._binder = binder;\n\n for (var i = 0; i < canonicalFields.length; i++) {\n var field = canonicalFields[i];\n var fieldAggregate = (void 0);\n\n if (isObject(rootAggregate)) {\n fieldAggregate = rootAggregate[field];\n } else if (i === 0 || inArray(field, valueFields)) {\n fieldAggregate = rootAggregate;\n } else {\n break;\n }\n\n if (fieldAggregate) {\n seriesFields.push({\n canonicalName: field,\n name: sourceFields[i],\n transform: isFunction(fieldAggregate) ? fieldAggregate : Aggregates[fieldAggregate]\n });\n }\n }\n },\n\n aggregatePoints: function(srcPoints, group) {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref._series;\n var seriesFields = ref._seriesFields;\n var data = this._bindPoints(srcPoints || []);\n var firstDataItem = data.dataItems[0];\n var result = {};\n\n if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n var fn = function() {};\n fn.prototype = firstDataItem;\n result = new fn();\n }\n\n for (var i = 0; i < seriesFields.length; i++) {\n var field = seriesFields[i];\n var srcValues = this$1$1._bindField(data.values, field.canonicalName);\n var value = field.transform(srcValues, series, data.dataItems, group);\n\n if (value !== null && isObject(value) && !defined(value.length) && !(value instanceof Date)) {\n result = value;\n break;\n } else {\n if (defined(value)) {\n setValue(field.name, result, value);\n }\n }\n }\n\n return result;\n },\n\n _bindPoints: function(points) {\n var ref = this;\n var binder = ref._binder;\n var series = ref._series;\n var values = [];\n var dataItems = [];\n\n for (var i = 0; i < points.length; i++) {\n var pointIx = points[i];\n\n values.push(binder.bindPoint(series, pointIx));\n dataItems.push(series.data[pointIx]);\n }\n\n return {\n values: values,\n dataItems: dataItems\n };\n },\n\n _bindField: function(data, field) {\n var values = [];\n var count = data.length;\n\n for (var i = 0; i < count; i++) {\n var item = data[i];\n var valueFields = item.valueFields;\n var value = (void 0);\n\n if (defined(valueFields[field])) {\n value = valueFields[field];\n } else {\n value = item.fields[field];\n }\n\n values.push(value);\n }\n\n return values;\n }\n });\n\n function setValue(fieldName, target, value) {\n var parentObj = target;\n var field = fieldName;\n\n if (fieldName.indexOf(\".\") > -1) {\n var parts = fieldName.split(\".\");\n\n while (parts.length > 1) {\n field = parts.shift();\n if (!defined(parentObj[field])) {\n parentObj[field] = {};\n }\n parentObj = parentObj[field];\n }\n field = parts.shift();\n }\n\n parentObj[field] = value;\n }\n\n var DefaultAggregates = Class.extend({\n init: function() {\n\n this._defaults = {};\n },\n\n register: function(seriesTypes, aggregates) {\n var this$1$1 = this;\n\n for (var i = 0; i < seriesTypes.length; i++) {\n this$1$1._defaults[seriesTypes[i]] = aggregates;\n }\n },\n\n query: function(seriesType) {\n return this._defaults[seriesType];\n }\n });\n\n DefaultAggregates.current = new DefaultAggregates();\n\n var RangeBar = Bar.extend({\n createLabel: function() {\n var labels = this.options.labels;\n var fromOptions = deepExtend({}, labels, labels.from);\n var toOptions = deepExtend({}, labels, labels.to);\n\n if (fromOptions.visible) {\n this.labelFrom = this.createLabelElement(fromOptions);\n this.append(this.labelFrom);\n }\n\n if (toOptions.visible) {\n this.labelTo = this.createLabelElement(toOptions);\n this.append(this.labelTo);\n }\n },\n\n reflow: function(targetBox) {\n this.render();\n\n var ref = this;\n var labelFrom = ref.labelFrom;\n var labelTo = ref.labelTo;\n var value = ref.value;\n\n this.box = targetBox;\n\n if (labelFrom) {\n labelFrom.options.aboveAxis = value.from > value.to;\n labelFrom.reflow(targetBox);\n }\n\n if (labelTo) {\n labelTo.options.aboveAxis = value.to > value.from;\n labelTo.reflow(targetBox);\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n }\n });\n\n RangeBar.prototype.defaults = deepExtend({}, RangeBar.prototype.defaults, {\n labels: {\n format: \"{0} - {1}\"\n },\n tooltip: {\n format: \"{1}\"\n }\n });\n\n var RangeBarChart = BarChart.extend({\n pointType: function() {\n return RangeBar;\n },\n\n pointValue: function(data) {\n return data.valueFields;\n },\n\n formatPointValue: function(point, format) {\n if (point.value.from === null && point.value.to === null) {\n return \"\";\n }\n\n return this.chartService.format.auto(format, point.value.from, point.value.to);\n },\n\n plotRange: function(point) {\n if (!point) {\n return 0;\n }\n\n return [ point.value.from, point.value.to ];\n },\n\n updateRange: function(value, fields) {\n var axisName = fields.series.axis;\n var from = value.from;\n var to = value.to;\n var axisRange = this.valueAxisRanges[axisName];\n\n if (value !== null && isNumber(from) && isNumber(to)) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || { min: MAX_VALUE, max: MIN_VALUE };\n\n axisRange.min = Math.min(axisRange.min, from);\n axisRange.max = Math.max(axisRange.max, from);\n\n axisRange.min = Math.min(axisRange.min, to);\n axisRange.max = Math.max(axisRange.max, to);\n }\n },\n\n aboveAxis: function(point) {\n var value = point.value;\n return value.from < value.to;\n }\n });\n\n RangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n\n var RangeLinePoint = LinePoint.extend({\n aliasFor: function() {\n return this.parent;\n }\n });\n\n var AUTO = 'auto';\n var DEFAULT_FROM_FORMAT = '{0}';\n var DEFAULT_TO_FORMAT = '{1}';\n\n var RangeAreaPoint = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this);\n\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n this._id = guid();\n this.initLabelsFormat();\n },\n\n render: function() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n var value = this.value;\n\n var fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.from,\n markers: markers.from\n }));\n\n var toPoint = this.toPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.to,\n markers: markers.to\n }));\n\n this.copyFields(fromPoint);\n this.copyFields(toPoint);\n\n this.append(fromPoint);\n this.append(toPoint);\n },\n\n reflow: function(targetBox) {\n this.render();\n\n var fromBox = targetBox.from;\n var toBox = targetBox.to;\n\n this.positionLabels(fromBox, toBox);\n\n this.fromPoint.reflow(fromBox);\n this.toPoint.reflow(toBox);\n\n this.box = this.fromPoint.markerBox().clone().wrap(this.toPoint.markerBox());\n },\n\n createHighlight: function() {\n var group = new Group();\n group.append(this.fromPoint.createHighlight());\n group.append(this.toPoint.createHighlight());\n\n return group;\n },\n\n highlightVisual: function() {\n return this.visual;\n },\n\n highlightVisualArgs: function() {\n return {\n options: this.options,\n from: this.fromPoint.highlightVisualArgs(),\n to: this.toPoint.highlightVisualArgs()\n };\n },\n\n createFocusHighlight: function() {\n var group = new Group();\n group.append(this.fromPoint.createFocusHighlight());\n group.append(this.toPoint.createFocusHighlight());\n\n return group;\n },\n\n tooltipAnchor: function() {\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(this.box);\n\n if (showTooltip) {\n var box = this.box;\n var center = box.center();\n var horizontalAlign = LEFT;\n var x, y, verticalAlign;\n\n if (this.options.vertical) {\n x = center.x;\n y = box.y1 - TOOLTIP_OFFSET;\n verticalAlign = BOTTOM;\n } else {\n x = box.x2 + TOOLTIP_OFFSET;\n y = center.y;\n verticalAlign = CENTER;\n }\n\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n },\n\n unclipElements: function() {\n this.fromPoint.unclipElements();\n this.toPoint.unclipElements();\n },\n\n initLabelsFormat: function() {\n var labels = this.options.labels;\n if (!labels.format) {\n if (!labels.from || !labels.from.format) {\n labels.from = $.extend({}, labels.from, {\n format: DEFAULT_FROM_FORMAT\n });\n }\n\n if (!labels.to || !labels.to.format) {\n labels.to = $.extend({}, labels.to, {\n format: DEFAULT_TO_FORMAT\n });\n }\n }\n },\n\n positionLabels: function(fromBox, toBox) {\n var ref = this.options;\n var labels = ref.labels;\n var vertical = ref.vertical;\n\n if (labels.position === AUTO) {\n var fromLabelPosition, toLabelPosition;\n if (vertical) {\n if (toBox.y1 <= fromBox.y1) {\n toLabelPosition = ABOVE;\n fromLabelPosition = BELOW;\n } else {\n toLabelPosition = BELOW;\n fromLabelPosition = ABOVE;\n }\n } else {\n if (toBox.x1 <= fromBox.x1) {\n toLabelPosition = LEFT;\n fromLabelPosition = RIGHT;\n } else {\n toLabelPosition = RIGHT;\n fromLabelPosition = LEFT;\n }\n }\n\n if (!labels.from || !labels.from.position) {\n this.fromPoint.options.labels.position = fromLabelPosition;\n }\n\n if (!labels.to || !labels.to.position) {\n this.toPoint.options.labels.position = toLabelPosition;\n }\n }\n },\n\n copyFields: function(point) {\n point.dataItem = this.dataItem;\n point.category = this.category;\n point.series = this.series;\n point.color = this.color;\n point.owner = this.owner;\n },\n\n focusVisual: function() {\n this.fromPoint.focusVisual();\n },\n\n clearFocusFromVisual: function() {\n this.toPoint.clearFocusFromVisual();\n },\n\n getIndex: function() {\n return this.categoryIx;\n }\n });\n\n deepExtend(RangeAreaPoint.prototype, PointEventsMixin);\n deepExtend(RangeAreaPoint.prototype, NoteMixin);\n\n RangeAreaPoint.prototype.defaults = {\n markers: {\n visible: false,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: {\n width: 2\n },\n opacity: 1\n },\n labels: {\n visible: false,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n position: AUTO\n },\n notes: {\n label: {}\n },\n highlight: {\n markers: {\n border: {\n color: WHITE,\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n tooltip: {\n format: '{0} - {1}'\n },\n accessibility: {\n role: CHART_POINT_ROLE,\n className: CHART_POINT_CLASSNAME,\n ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n }\n };\n\n var RangeAreaSegment = AreaSegment.extend({\n createStrokeSegments: function() {\n return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\n },\n\n stackSegments: function() {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.toGeometryPoints(this.fromPoints().reverse()));\n }\n\n return fromSegments;\n },\n\n createStroke: function(style) {\n var toPath = new Path(style);\n var fromPath = new Path(style);\n\n toPath.segments.push.apply(toPath.segments, this.strokeSegments());\n fromPath.segments.push.apply(fromPath.segments, this.stackSegments());\n\n this.visual.append(toPath);\n this.visual.append(fromPath);\n },\n\n hasStackSegment: function() {\n return true;\n },\n\n fromPoints: function() {\n return this.linePoints.map(function (point) { return point.fromPoint; });\n },\n\n toPoints: function() {\n return this.linePoints.map(function (point) { return point.toPoint; });\n }\n });\n\n var SplineRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function() {\n return this.createCurveSegments(this.toPoints());\n },\n\n stackSegments: function() {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n }\n\n return fromSegments;\n },\n\n createCurveSegments: function(points) {\n var curveProcessor = new CurveProcessor();\n\n return curveProcessor.process(this.toGeometryPoints(points));\n }\n });\n\n var StepRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function() {\n return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\n },\n\n stackSegments: function() {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.calculateStepPoints(this.fromPoints()));\n fromSegments.reverse();\n }\n\n return fromSegments;\n }\n });\n\n deepExtend(StepRangeAreaSegment.prototype, StepLineMixin);\n\n var RangeAreaChart = CategoricalChart.extend({\n render: function() {\n CategoricalChart.fn.render.call(this);\n\n this.renderSegments();\n },\n\n pointType: function() {\n return RangeAreaPoint;\n },\n\n createPoint: function(data, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var value = data.valueFields;\n\n if (!hasValue(value.from) && !hasValue(value.to)) {\n if (this.seriesMissingValues(series) === ZERO) {\n value = {\n from: 0,\n to: 0\n };\n } else {\n return null;\n }\n }\n\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n\n var point = new RangeAreaPoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\n\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segmentType;\n if (style === \"smooth\") {\n segmentType = SplineRangeAreaSegment;\n } else if (style === \"step\") {\n segmentType = StepRangeAreaSegment;\n } else {\n segmentType = RangeAreaSegment;\n }\n\n return new segmentType(linePoints, currentSeries, seriesIx);\n },\n\n plotRange: function(point, startValue) {\n if (!point) {\n return [ startValue, startValue ];\n }\n\n return [ point.value.from, point.value.to ];\n },\n\n valueSlot: function(valueAxis, plotRange) {\n var fromSlot = valueAxis.getSlot(plotRange[0], plotRange[0], !this.options.clip);\n var toSlot = valueAxis.getSlot(plotRange[1], plotRange[1], !this.options.clip);\n if (fromSlot && toSlot) {\n return {\n from: fromSlot,\n to: toSlot\n };\n }\n },\n\n pointSlot: function(categorySlot, valueSlot) {\n var from = valueSlot.from;\n var to = valueSlot.to;\n var fromSlot, toSlot;\n\n if (this.options.invertAxes) {\n fromSlot = new Box(from.x1, categorySlot.y1, from.x2, categorySlot.y2);\n toSlot = new Box(to.x1, categorySlot.y1, to.x2, categorySlot.y2);\n } else {\n fromSlot = new Box(categorySlot.x1, from.y1, categorySlot.x2, from.y2);\n toSlot = new Box(categorySlot.x1, to.y1, categorySlot.x2, to.y2);\n }\n\n return {\n from: fromSlot,\n to: toSlot\n };\n },\n\n addValue: function(data, fields) {\n var valueFields = data.valueFields;\n if (!isNumber(valueFields.from)) {\n valueFields.from = valueFields.to;\n }\n\n if (!isNumber(valueFields.to)) {\n valueFields.to = valueFields.from;\n }\n\n CategoricalChart.fn.addValue.call(this, data, fields);\n },\n\n updateRange: function(value, fields) {\n if (value !== null && isNumber(value.from) && isNumber(value.to)) {\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName] = this.valueAxisRanges[axisName] || { min: MAX_VALUE, max: MIN_VALUE };\n var from = value.from;\n var to = value.to;\n\n axisRange.min = Math.min(axisRange.min, from, to);\n axisRange.max = Math.max(axisRange.max, from, to);\n }\n },\n\n formatPointValue: function(point, format) {\n var value = point.value;\n\n return this.chartService.format.auto(format, value.from, value.to);\n },\n\n animationPoints: function() {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n result.push((point.fromPoint || {}).marker);\n result.push((point.toPoint || {}).marker);\n }\n }\n\n return result.concat(this._segments);\n }\n });\n\n deepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\n\n var OHLCPoint = Candlestick.extend({\n reflow: function(box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var oPoints = [];\n var cPoints = [];\n var lhPoints = [];\n\n var lhSlot = valueAxis.getSlot(value.low, value.high);\n var oSlot = valueAxis.getSlot(value.open, value.open);\n var cSlot = valueAxis.getSlot(value.close, value.close);\n\n oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n\n var mid = lhSlot.center().x;\n\n oPoints.push([ oSlot.x1, oSlot.y1 ]);\n oPoints.push([ mid, oSlot.y1 ]);\n cPoints.push([ mid, cSlot.y1 ]);\n cPoints.push([ cSlot.x2, cSlot.y1 ]);\n lhPoints.push([ mid, lhSlot.y1 ]);\n lhPoints.push([ mid, lhSlot.y2 ]);\n\n this.lines = [\n oPoints, cPoints, lhPoints\n ];\n\n this.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n\n this.reflowNote();\n },\n\n createBody: function() {}\n });\n\n var OHLCChart = CandlestickChart.extend({\n pointType: function() {\n return OHLCPoint;\n }\n });\n\n var WaterfallSegment = ChartElement.extend({\n init: function(from, to, series) {\n ChartElement.fn.init.call(this);\n\n this.from = from;\n this.to = to;\n this.series = series;\n },\n\n linePoints: function() {\n var from = this.from;\n var ref = this;\n var fromBox = ref.from.box;\n var toBox = ref.to.box;\n var points = [];\n\n if (from.isVertical) {\n var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n points.push(\n [ fromBox.x1, y ],\n [ toBox.x2, y ]\n );\n } else {\n var x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n points.push(\n [ x, fromBox.y1 ],\n [ x, toBox.y2 ]\n );\n }\n\n return points;\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n var line = this.series.line || {};\n\n var path = Path.fromPoints(this.linePoints(), {\n stroke: {\n color: line.color,\n width: line.width,\n opacity: line.opacity,\n dashType: line.dashType\n }\n });\n\n alignPathToPixel(path);\n this.visual.append(path);\n }\n });\n\n setDefaultOptions(WaterfallSegment, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n });\n\n var WaterfallChart = BarChart.extend({\n render: function() {\n BarChart.fn.render.call(this);\n this.createSegments();\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var series = this.options.series;\n var totalCategories = categoriesCount(series);\n var isVertical = !this.options.invertAxes;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var total = 0;\n var runningTotal = 0;\n\n for (var categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\n var data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\n var value = data.valueFields.value;\n var summary = data.fields.summary;\n var from = total;\n var to = (void 0);\n\n if (summary) {\n if (summary.toLowerCase() === \"total\") {\n data.valueFields.value = total;\n from = 0;\n to = total;\n } else {\n data.valueFields.value = runningTotal;\n to = from - runningTotal;\n runningTotal = 0;\n }\n } else if (isNumber(value)) {\n runningTotal += value;\n total += value;\n to = total;\n }\n\n callback(data, {\n category: this$1$1.categoryAxis.categoryAt(categoryIx),\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx,\n total: total,\n runningTotal: runningTotal,\n from: from,\n to: to,\n isVertical: isVertical\n });\n }\n }\n },\n\n updateRange: function(value, fields) {\n BarChart.fn.updateRange.call(this, { value: fields.to }, fields);\n },\n\n aboveAxis: function(point) {\n return point.value >= 0;\n },\n\n plotRange: function(point) {\n return [ point.from, point.to ];\n },\n\n createSegments: function() {\n var this$1$1 = this;\n\n var series = this.options.series;\n var seriesPoints = this.seriesPoints;\n var segments = this.segments = [];\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var points = seriesPoints[seriesIx];\n\n if (points) {\n var prevPoint = (void 0);\n for (var pointIx = 0; pointIx < points.length; pointIx++) {\n var point = points[pointIx];\n\n if (point && prevPoint) {\n var segment = new WaterfallSegment(prevPoint, point, currentSeries);\n segments.push(segment);\n this$1$1.append(segment);\n }\n\n prevPoint = point;\n }\n }\n }\n }\n });\n\n function trendlineFactory(registry, type, context) {\n var impl = registry[String(type)];\n if (impl) {\n return impl(context);\n }\n\n return null;\n }\n\n // Optimized version of calculatePolynomial for order = 1\n function calculateSlope(sourceValues, valueGetter) {\n var x = 0;\n var y = 0;\n var x2 = 0;\n var xy = 0;\n var count = 0;\n var slope, intercept;\n var xMin = Number.MAX_VALUE;\n var xMax = Number.MIN_VALUE;\n\n for (var i = 0; i < sourceValues.length; i++) {\n var value = sourceValues[i];\n var ref = valueGetter(value);\n var xValue = ref.xValue;\n var yValue = ref.yValue;\n\n if (isFinite(xValue) && xValue !== null && isFinite(yValue) && yValue !== null) {\n xMin = Math.min(xValue, xMin);\n xMax = Math.max(xValue, xMax);\n\n count++;\n x += xValue;\n y += yValue;\n x2 += Math.pow(xValue, 2);\n xy += xValue * yValue;\n }\n }\n\n if (count > 0) {\n slope = (count * xy - x * y) / (count * x2 - Math.pow(x, 2));\n intercept = (y - slope * x) / count;\n }\n\n return { slope: slope, intercept: intercept, count: count, xMin: xMin, xMax: xMax };\n }\n\n var checkAllPositive = function (sourceValues, fieldName) { return sourceValues.every(function (ref) {\n var valueFields = ref.valueFields;\n\n return !hasValue(valueFields[fieldName]) || valueFields[fieldName] > 0;\n }); };\n\n function getTrendlineData(valueMapper, categoryAxis) {\n var data = [];\n var totalRange = categoryAxis.totalRangeIndices();\n var currentRange = categoryAxis.currentRangeIndices();\n var range = {\n min: Math.floor(Math.max(currentRange.min - 1, totalRange.min)),\n max: Math.ceil(Math.min(currentRange.max + 2, totalRange.max))\n };\n\n for (var i = range.min; i < range.max; i++) {\n var x = (i + 1);\n data[i] = {\n category: categoryAxis.categoryAt(i, true),\n value: valueMapper(x)\n };\n }\n\n return data;\n }\n\n function exponentialTrendline(context) {\n var options = context.options;\n var categoryAxis = context.categoryAxis;\n var seriesValues = context.seriesValues;\n\n var data = getData({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'line',\n data: data,\n categoryField: 'category',\n field: 'value'});\n }\n\n return null;\n }\n\n var valueGetter = function (fieldName) { return function (ref) {\n var categoryIx = ref.categoryIx;\n var valueFields = ref.valueFields;\n\n return ({ xValue: categoryIx + 1, yValue: Math.log(valueFields[fieldName]) });\n } };\n\n function getData(ref) {\n var seriesValues = ref.seriesValues;\n var categoryAxis = ref.categoryAxis;\n var options = ref.options;\n\n var sourceValues = seriesValues();\n if (!checkAllPositive(sourceValues, options.field)) {\n return null;\n }\n\n var ref$1 = calculateSlope(sourceValues, valueGetter(options.field));\n var slope = ref$1.slope;\n var intercept = ref$1.intercept;\n var count = ref$1.count;\n if (count > 0) {\n // Exponential trendline equation:\n // y = a * e ^ (b * x)\n var a = Math.exp(intercept);\n var b = slope;\n\n return getTrendlineData(function (x) { return a * Math.exp(b * x); }, categoryAxis);\n }\n\n return null;\n }\n\n function linearTrendline(context) {\n var options = context.options;\n var categoryAxis = context.categoryAxis;\n var seriesValues = context.seriesValues;\n\n var data = getData$1({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'line',\n data: data,\n categoryField: 'category',\n field: 'value'});\n }\n\n return null;\n }\n\n var valueGetter$1 = function (fieldName) { return function (ref) {\n var categoryIx = ref.categoryIx;\n var valueFields = ref.valueFields;\n\n return ({ xValue: categoryIx + 1, yValue: valueFields[fieldName] });\n } };\n\n function getData$1(ref) {\n var seriesValues = ref.seriesValues;\n var categoryAxis = ref.categoryAxis;\n var options = ref.options;\n\n var ref$1 = calculateSlope(seriesValues(), valueGetter$1(options.field));\n var slope = ref$1.slope;\n var intercept = ref$1.intercept;\n var count = ref$1.count;\n\n if (count > 0) {\n return getTrendlineData(function (x) { return slope * x + intercept; }, categoryAxis);\n }\n\n return null;\n }\n\n function logarithmicTrendline(context) {\n var options = context.options;\n var categoryAxis = context.categoryAxis;\n var seriesValues = context.seriesValues;\n\n var data = getData$2({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'line',\n data: data,\n categoryField: 'category',\n field: 'value'});\n }\n\n return null;\n }\n\n var valueGetter$2 = function (fieldName) { return function (ref) {\n var categoryIx = ref.categoryIx;\n var valueFields = ref.valueFields;\n\n return ({ xValue: Math.log(categoryIx + 1), yValue: valueFields[fieldName] });\n } };\n\n function getData$2(ref) {\n var seriesValues = ref.seriesValues;\n var categoryAxis = ref.categoryAxis;\n var options = ref.options;\n\n var ref$1 = calculateSlope(seriesValues(), valueGetter$2(options.field));\n var slope = ref$1.slope;\n var intercept = ref$1.intercept;\n var count = ref$1.count;\n if (count > 0) {\n // Logarithmic trendline equation:\n // y = a * ln (x) + b\n var a = slope;\n var b = intercept;\n return getTrendlineData(function (x) { return a * Math.log(x) + b; }, categoryAxis);\n }\n\n return null;\n }\n\n function calculateMovingAverage(sourceValues, valueGetter, period) {\n var averagePoints = [];\n var values = [];\n var start = Math.max(MIN_MOVING_AVERAGE_PERIOD, period) - 1;\n\n var end = 0;\n var sum = 0;\n\n for (var i = 0; i < sourceValues.length; i++) {\n var value = sourceValues[i];\n var ref = valueGetter(value);\n var xValue = ref.xValue;\n var yValue = ref.yValue;\n\n if (isFinite(yValue) && yValue !== null) {\n values.push(yValue);\n sum += yValue;\n end = Math.max(i, end);\n } else {\n values.push(null);\n }\n\n if (i >= start) {\n var count = values.filter(function (value) { return value !== null; }).length;\n var lastValue = values.shift() || 0;\n\n if (count > 0) {\n var average = sum / count;\n averagePoints.push([xValue, average]);\n\n sum -= lastValue;\n continue;\n }\n }\n\n averagePoints.push([xValue, null]);\n }\n\n return averagePoints.slice(0, end + 1);\n }\n\n function movingAverageTrendline(context) {\n var options = context.options;\n\n var data = getData$3(context);\n if (data) {\n return $.extend({}, options,\n\n {type: 'line',\n data: data,\n categoryField: 'category',\n field: 'value'});\n }\n\n return null;\n }\n\n var valueGetter$3 = function (fieldName) { return function (ref) {\n var categoryIx = ref.categoryIx;\n var valueFields = ref.valueFields;\n\n return ({ xValue: categoryIx, yValue: valueFields[fieldName] });\n } };\n\n function calculatePoints(ref) {\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var seriesValues = ref.seriesValues;\n\n var period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;\n var totalRange = categoryAxis.totalRangeIndices();\n var currentRange = categoryAxis.currentRangeIndices();\n var range = {\n min: Math.floor(Math.max(currentRange.min - period, totalRange.min)),\n max: Math.ceil(Math.min(currentRange.max + period + 2, totalRange.max))\n };\n\n return calculateMovingAverage(seriesValues(range), valueGetter$3(options.field), period);\n }\n\n function getData$3(context) {\n var categoryAxis = context.categoryAxis;\n var points = calculatePoints(context);\n var data = [];\n points.forEach(function (ref) {\n var categoryIx = ref[0];\n var value = ref[1];\n\n data[categoryIx] = {\n category: categoryAxis.categoryAt(categoryIx, true),\n value: value\n };\n });\n\n if (data.length > 0) {\n return data;\n }\n\n return null;\n }\n\n var MIN_ORDER = 1;\n var MAX_ORDER = 6;\n\n function calculatePolynomial(sourceValues, valueGetter, order) {\n var k = Math.min(Math.max(order || MIN_ORDER, MIN_ORDER), MAX_ORDER) + 1;\n var X$$1 = new dataviz.Matrix();\n var Y$$1 = new dataviz.Matrix();\n var count = 0;\n var xMin = Number.MAX_VALUE;\n var xMax = Number.MIN_VALUE;\n var valueMapper = function (x) { return x; };\n var coefficients = [];\n\n for (var i = 0; i < sourceValues.length; i++) {\n var value = sourceValues[i];\n var ref = valueGetter(value);\n var xValue = ref.xValue;\n var yValue = ref.yValue;\n\n if (isFinite(xValue) && xValue !== null && isFinite(yValue) && yValue !== null) {\n xMin = Math.min(xValue, xMin);\n xMax = Math.max(xValue, xMax);\n count++;\n\n // Set Y value in matrix\n Y$$1.set(i, 0, yValue);\n\n // Set indicator column to 1 for valid values\n X$$1.set(i, 0, 1);\n X$$1.set(i, 1, xValue);\n for (var pow = 2; pow <= k; pow++) {\n X$$1.set(i, pow, Math.pow(X$$1.get(i, 1), pow));\n }\n } else {\n // Set indicator column to 0 for missing values\n X$$1.set(i, 0, 0);\n }\n }\n\n // Limit order to number of values.\n X$$1.width = Math.min(k, count);\n\n if (count > 0) {\n // Polynomial trendline equation:\n // y = aN * x^N + ... + a2 * x^2 + a1 * x + a0\n coefficients = linearRegression(X$$1, Y$$1);\n valueMapper = function (x) { return coefficients.reduce(function (y, a, n) { return y + a * Math.pow(x, n); }, 0); };\n }\n\n return {\n coefficients: coefficients,\n count: count,\n valueMapper: valueMapper,\n xMin: xMin,\n xMax: xMax\n };\n }\n\n function linearRegression(X$$1, Y$$1) {\n var Xt = X$$1.transpose();\n var B = Xt.multiply(X$$1).inverse().multiply(Xt).multiply(Y$$1); // the last square estimate of the coefficients\n\n var coefficients = [];\n for (var i = 0; i < B.height; i++) {\n coefficients.push(B.get(i, 0));\n }\n\n // y_intercept and regression coefficients ('slopes')\n return coefficients;\n\n // It's possible to calculate statistics for the regression based on\n // the LINEST function implementation in kendo-spreadsheet-common/src/calc.js\n //\n // * The standard errors (of coefficients and y-intercept)\n // * The coefficient of determination (R^2)\n // * The standard error for the y estimate\n // * The F statistic\n // * The degrees of freedom\n // * The regression sum of squares (SSR)\n // * The residual sum of squares (SSE)\n }\n\n function polynomialTrendline(context) {\n var options = context.options;\n var categoryAxis = context.categoryAxis;\n var seriesValues = context.seriesValues;\n\n var data = getData$4({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'line',\n data: data,\n categoryField: 'category',\n field: 'value'});\n }\n\n return null;\n }\n\n var valueGetter$4 = function (fieldName) { return function (ref) {\n var categoryIx = ref.categoryIx;\n var valueFields = ref.valueFields;\n\n return ({ xValue: categoryIx + 1, yValue: valueFields[fieldName] });\n } };\n\n function getData$4(ref) {\n var seriesValues = ref.seriesValues;\n var categoryAxis = ref.categoryAxis;\n var options = ref.options;\n\n var order = (options.trendline || {}).order;\n var ref$1 = calculatePolynomial(seriesValues(), valueGetter$4(options.field), order);\n var count = ref$1.count;\n var valueMapper = ref$1.valueMapper;\n\n if (count > 0) {\n // Polynomial trendline equation:\n // y = aN * x^N + ... + a2 * x^2 + a1 * x + a0\n\n return getTrendlineData(function (x) { return valueMapper(x); }, categoryAxis);\n }\n\n return null;\n }\n\n function powerTrendline(context) {\n var options = context.options;\n var categoryAxis = context.categoryAxis;\n var seriesValues = context.seriesValues;\n\n var data = getData$5({ seriesValues: seriesValues, categoryAxis: categoryAxis, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'line',\n data: data,\n categoryField: 'category',\n field: 'value'});\n }\n\n return null;\n }\n\n var valueGetter$5 = function (fieldName) { return function (ref) {\n var categoryIx = ref.categoryIx;\n var valueFields = ref.valueFields;\n\n return ({ xValue: Math.log(categoryIx + 1), yValue: Math.log(valueFields[fieldName]) });\n } };\n\n function getData$5(ref) {\n var seriesValues = ref.seriesValues;\n var categoryAxis = ref.categoryAxis;\n var options = ref.options;\n\n var sourceValues = seriesValues();\n if (!checkAllPositive(sourceValues, options.field)) {\n return null;\n }\n\n var ref$1 = calculateSlope(sourceValues, valueGetter$5(options.field));\n var slope = ref$1.slope;\n var intercept = ref$1.intercept;\n var count = ref$1.count;\n if (count > 0) {\n // Power trendline equation:\n // y = a * x ^ b\n var a = Math.exp(intercept);\n var b = slope;\n\n return getTrendlineData(function (x) { return a * Math.pow(x, b); }, categoryAxis);\n }\n\n return null;\n }\n\n var registry = {};\n registry[TRENDLINE_EXPONENTIAL] = exponentialTrendline;\n registry[TRENDLINE_LINEAR] = linearTrendline;\n registry[TRENDLINE_LOGARITHMIC] = logarithmicTrendline;\n registry[TRENDLINE_MOVING_AVERAGE] = movingAverageTrendline;\n registry[TRENDLINE_POLYNOMIAL] = polynomialTrendline;\n registry[TRENDLINE_POWER] = powerTrendline;\n\n var AREA_SERIES = [ AREA, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA ];\n var OUT_OF_RANGE_SERIES = [ LINE, VERTICAL_LINE ].concat(AREA_SERIES);\n\n var CategoricalPlotArea = PlotAreaBase.extend({\n initFields: function(series) {\n var this$1$1 = this;\n\n this.namedCategoryAxes = {};\n this.namedValueAxes = {};\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n this._seriesPointsCache = {};\n this._currentPointsCache = {};\n\n if (series.length > 0) {\n this.invertAxes = inArray(\n series[0].type, [ BAR, BULLET, VERTICAL_LINE, VERTICAL_AREA, VERTICAL_RANGE_AREA,\n RANGE_BAR, HORIZONTAL_WATERFALL, VERTICAL_BOX_PLOT ]\n );\n\n for (var i = 0; i < series.length; i++) {\n var stack = series[i].stack;\n if (stack && stack.type === \"100%\") {\n this$1$1.stack100 = true;\n break;\n }\n }\n }\n },\n\n render: function(panes) {\n if (panes === void 0) { panes = this.panes; }\n\n this.series = [].concat( this.originalSeries );\n this.createCategoryAxes(panes);\n\n this.aggregateCategories(panes);\n this.createTrendlineSeries(panes);\n\n this.createCategoryAxesLabels(panes);\n this.createCharts(panes);\n this.createValueAxes(panes);\n },\n\n removeAxis: function(axis) {\n var axisName = axis.options.name;\n\n PlotAreaBase.fn.removeAxis.call(this, axis);\n\n if (axis instanceof CategoryAxis) {\n delete this.namedCategoryAxes[axisName];\n } else {\n this.valueAxisRangeTracker.reset(axisName);\n delete this.namedValueAxes[axisName];\n }\n\n if (axis === this.categoryAxis) {\n delete this.categoryAxis;\n }\n\n if (axis === this.valueAxis) {\n delete this.valueAxis;\n }\n },\n\n trendlineFactory: function(options, series) {\n var categoryAxis = this.seriesCategoryAxis(options);\n var seriesValues = this.seriesValues.bind(this, series.index);\n\n var trendline = trendlineFactory(registry, options.type, {\n options: options,\n categoryAxis: categoryAxis,\n seriesValues: seriesValues\n });\n\n if (trendline) {\n // Inherit settings\n trendline.categoryAxis = series.categoryAxis;\n trendline.valueAxis = series.valueAxis;\n\n return this.filterSeries(trendline, categoryAxis);\n }\n\n return trendline;\n },\n\n trendlineAggregateForecast: function() {\n return this.series\n .map(function (series) { return (series.trendline || {}).forecast; })\n .filter(function (forecast) { return forecast !== undefined; })\n .reduce(function (result, forecast) { return ({\n before: Math.max(result.before, forecast.before || 0),\n after: Math.max(result.after, forecast.after || 0)\n }); }, { before: 0, after: 0 });\n },\n\n seriesValues: function(seriesIx, range) {\n var this$1$1 = this;\n\n var result = [];\n\n var series = this.srcSeries[seriesIx];\n var categoryAxis = this.seriesCategoryAxis(series);\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n if (dateAxis) {\n this._seriesPointsCache = {};\n this._currentPointsCache = {};\n categoryAxis.options.dataItems = [];\n series = this.aggregateSeries(series, categoryAxis, categoryAxis.totalRangeIndices());\n }\n\n var min = range ? range.min : 0;\n var max = range ? range.max : series.data.length;\n for (var categoryIx = min; categoryIx < max; categoryIx++) {\n var data = this$1$1.bindPoint(series, categoryIx);\n result.push({ categoryIx: categoryIx, category: data.fields.category, valueFields: data.valueFields });\n }\n\n return result;\n },\n\n createCharts: function(panes) {\n var this$1$1 = this;\n\n var seriesByPane = this.groupSeriesByPane();\n\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this$1$1.addToLegend(paneSeries);\n\n var visibleSeries = this$1$1.filterVisibleSeries(paneSeries);\n if (!visibleSeries) {\n continue;\n }\n\n var groups = this$1$1.groupSeriesByCategoryAxis(visibleSeries);\n for (var groupIx = 0; groupIx < groups.length; groupIx++) {\n this$1$1.createChartGroup(groups[groupIx], pane);\n }\n }\n },\n\n createChartGroup: function(series, pane) {\n this.createAreaChart(\n filterSeriesByType(series, [ AREA, VERTICAL_AREA ]), pane\n );\n\n this.createRangeAreaChart(\n filterSeriesByType(series, [ RANGE_AREA, VERTICAL_RANGE_AREA ]), pane\n );\n\n this.createBarChart(\n filterSeriesByType(series, [ COLUMN, BAR ]), pane\n );\n\n this.createRangeBarChart(\n filterSeriesByType(series, [ RANGE_COLUMN, RANGE_BAR ]), pane\n );\n\n this.createBulletChart(\n filterSeriesByType(series, [ BULLET, VERTICAL_BULLET ]), pane\n );\n\n this.createCandlestickChart(\n filterSeriesByType(series, CANDLESTICK), pane\n );\n\n this.createBoxPlotChart(\n filterSeriesByType(series, [ BOX_PLOT, VERTICAL_BOX_PLOT ]), pane\n );\n\n this.createOHLCChart(\n filterSeriesByType(series, OHLC), pane\n );\n\n this.createWaterfallChart(\n filterSeriesByType(series, [ WATERFALL, HORIZONTAL_WATERFALL ]), pane\n );\n\n this.createLineChart(\n filterSeriesByType(series, [ LINE, VERTICAL_LINE ]), pane\n );\n },\n\n aggregateCategories: function(panes) {\n var this$1$1 = this;\n\n var series = [].concat( this.series );\n var processedSeries = [];\n this._currentPointsCache = {};\n this._seriesPointsCache = this._seriesPointsCache || {};\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n\n if (!this$1$1.isTrendline(currentSeries)) {\n var categoryAxis = this$1$1.seriesCategoryAxis(currentSeries);\n var axisPane = this$1$1.findPane(categoryAxis.options.pane);\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n currentSeries = this$1$1.aggregateSeries(currentSeries, categoryAxis, categoryAxis.currentRangeIndices());\n } else {\n currentSeries = this$1$1.filterSeries(currentSeries, categoryAxis);\n }\n }\n\n processedSeries.push(currentSeries);\n }\n\n this._seriesPointsCache = this._currentPointsCache;\n this._currentPointsCache = null;\n\n this.srcSeries = series;\n this.series = processedSeries;\n },\n\n filterSeries: function(series, categoryAxis) {\n var dataLength = (series.data || {}).length;\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, dataLength);\n\n if (!(defined(categoryAxis.options.min) || defined(categoryAxis.options.max))) {\n return series;\n }\n\n var range = categoryAxis.currentRangeIndices();\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n var currentSeries = deepExtend({}, series);\n\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max + 1);\n\n if (outOfRangePoints) {\n createOutOfRangePoints(currentSeries, range, dataLength, function (idx) { return ({\n item: series.data[idx],\n category: categoryAxis.categoryAt(idx, true),\n categoryIx: idx - range.min\n }); }, function (idx) { return defined(series.data[idx]); });\n }\n\n return currentSeries;\n },\n\n clearSeriesPointsCache: function() {\n this._seriesPointsCache = {};\n },\n\n seriesSourcePoints: function(series, categoryAxis) {\n var this$1$1 = this;\n\n var key = (series.index) + \";\" + (categoryAxis.categoriesHash());\n if (this._seriesPointsCache && this._seriesPointsCache[key]) {\n this._currentPointsCache[key] = this._seriesPointsCache[key];\n return this._seriesPointsCache[key];\n }\n\n var axisOptions = categoryAxis.options;\n var srcCategories = axisOptions.srcCategories;\n var dateAxis = equalsIgnoreCase(axisOptions.type, DATE);\n var srcData = series.data;\n var result = [];\n if (!dateAxis) {\n categoryAxis.indexCategories();\n }\n\n for (var idx = 0; idx < srcData.length; idx++) {\n var category = SeriesBinder.current.bindPoint(series, idx).fields.category;\n if (dateAxis) {\n category = parseDateCategory(category, srcData[idx], this$1$1.chartService.intl);\n }\n\n if (!defined(category)) {\n category = srcCategories[idx];\n }\n\n if (defined(category) && category !== null) {\n var categoryIx = categoryAxis.totalIndex(category);\n result[categoryIx] = result[categoryIx] || { items: [], category: category };\n result[categoryIx].items.push(idx);\n }\n }\n\n this._currentPointsCache[key] = result;\n\n return result;\n },\n\n aggregateSeries: function(series, categoryAxis, range) {\n var srcData = series.data;\n if (!srcData.length) {\n return series;\n }\n\n var srcPoints = this.seriesSourcePoints(series, categoryAxis);\n var result = deepExtend({}, series);\n var aggregator = new SeriesAggregator(deepExtend({}, series), SeriesBinder.current, DefaultAggregates.current);\n var data = result.data = [];\n\n var dataItems = categoryAxis.options.dataItems || [];\n\n var categoryItem = function (idx) {\n var categoryIdx = idx - range.min;\n var point = srcPoints[idx];\n if (!point) {\n point = srcPoints[idx] = {};\n }\n\n point.categoryIx = categoryIdx;\n\n if (!point.item) {\n var category = categoryAxis.categoryAt(idx, true);\n point.category = category;\n point.item = aggregator.aggregatePoints(point.items, category);\n }\n\n return point;\n };\n\n for (var idx = range.min; idx <= range.max; idx++) {\n var point = categoryItem(idx);\n data[point.categoryIx] = point.item;\n\n if (point.items && point.items.length) {\n dataItems[point.categoryIx] = point.item;\n }\n }\n\n if (inArray(result.type, OUT_OF_RANGE_SERIES)) {\n createOutOfRangePoints(result, range, categoryAxis.totalCount(), categoryItem, function (idx) { return srcPoints[idx]; });\n }\n\n categoryAxis.options.dataItems = dataItems;\n\n return result;\n },\n\n appendChart: function(chart, pane) {\n var series = chart.options.series;\n var categoryAxis = this.seriesCategoryAxis(series[0]);\n var categories = categoryAxis.options.categories;\n var categoriesToAdd = Math.max(0, categoriesCount(series) - categories.length);\n\n if (categoriesToAdd > 0) {//consider setting an option to axis instead of adding fake categories\n categories = categoryAxis.options.categories = categoryAxis.options.categories.slice(0);\n while (categoriesToAdd--) {\n categories.push(\"\");\n }\n }\n\n this.valueAxisRangeTracker.update(chart.valueAxisRanges);\n\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n\n seriesPaneName: function(series) {\n var options = this.options;\n var axisName = series.axis;\n var axisOptions = [].concat(options.valueAxis);\n var axis = grep(axisOptions, function(a) { return a.name === axisName; })[0];\n var panes = options.panes || [ {} ];\n var defaultPaneName = (panes[0] || {}).name || \"default\";\n var paneName = (axis || {}).pane || defaultPaneName;\n\n return paneName;\n },\n\n seriesCategoryAxis: function(series) {\n var axisName = series.categoryAxis;\n var axis = axisName ? this.namedCategoryAxes[axisName] : this.categoryAxis;\n\n if (!axis) {\n throw new Error(\"Unable to locate category axis with name \" + axisName);\n }\n\n return axis;\n },\n\n stackableChartOptions: function(series, pane) {\n var anyStackedSeries = series.some(function (s) { return s.stack; });\n var isStacked100 = series.some(function (s) { return s.stack && s.stack.type === \"100%\"; });\n var clip = pane.options.clip;\n\n return {\n defaultStack: series[0].stack,\n isStacked: anyStackedSeries,\n isStacked100: isStacked100,\n clip: clip\n };\n },\n\n groupSeriesByCategoryAxis: function(series) {\n var categoryAxes = [];\n var unique = {};\n for (var idx = 0; idx < series.length; idx++) {\n var name = series[idx].categoryAxis || \"$$default$$\";\n if (!dataviz.hasOwnProperty(unique, name)) {\n unique[name] = true;\n categoryAxes.push(name);\n }\n }\n\n var groups = [];\n for (var axisIx = 0; axisIx < categoryAxes.length; axisIx++) {\n var axis = categoryAxes[axisIx];\n var axisSeries = groupSeries(series, axis, axisIx);\n if (axisSeries.length === 0) {\n continue;\n }\n\n groups.push(axisSeries);\n }\n\n return groups;\n },\n\n createBarChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var barChart = new BarChart(this, $.extend({\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n }, this.stackableChartOptions(series, pane)));\n\n this.appendChart(barChart, pane);\n },\n\n createRangeBarChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var rangeColumnChart = new RangeBarChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n\n this.appendChart(rangeColumnChart, pane);\n },\n\n createBulletChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var bulletChart = new BulletChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(bulletChart, pane);\n },\n\n createLineChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var lineChart = new LineChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(series, pane)));\n\n this.appendChart(lineChart, pane);\n },\n\n createAreaChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var areaChart = new AreaChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(series, pane)));\n\n this.appendChart(areaChart, pane);\n },\n\n createRangeAreaChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var rangeAreaChart = new RangeAreaChart(this, {\n invertAxes: this.invertAxes,\n series: series,\n clip: pane.options.clip\n });\n\n this.appendChart(rangeAreaChart, pane);\n },\n\n createOHLCChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var chart = new OHLCChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n },\n\n createCandlestickChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var chart = new CandlestickChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n },\n\n createBoxPlotChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var chart = new BoxPlotChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n\n this.appendChart(chart, pane);\n },\n\n createWaterfallChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var waterfallChart = new WaterfallChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n\n this.appendChart(waterfallChart, pane);\n },\n\n axisRequiresRounding: function(categoryAxisName, categoryAxisIndex) {\n var this$1$1 = this;\n\n var centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n\n for (var seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n var currentSeries = this$1$1.series[seriesIx];\n if (inArray(currentSeries.type, AREA_SERIES)) {\n var line = currentSeries.line;\n if (line && line.style === STEP) {\n centeredSeries.push(currentSeries);\n }\n }\n }\n\n for (var seriesIx$1 = 0; seriesIx$1 < centeredSeries.length; seriesIx$1++) {\n var seriesAxis = centeredSeries[seriesIx$1].categoryAxis || \"\";\n if (seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) {\n return true;\n }\n }\n },\n\n aggregatedAxis: function(categoryAxisName, categoryAxisIndex) {\n var series = this.series;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var seriesAxis = series[seriesIx].categoryAxis || \"\";\n if ((seriesAxis === categoryAxisName || (!seriesAxis && categoryAxisIndex === 0)) && series[seriesIx].categoryField) {\n return true;\n }\n }\n },\n\n createCategoryAxesLabels: function() {\n var axes = this.axes;\n for (var i = 0; i < axes.length; i++) {\n if (axes[i] instanceof CategoryAxis) {\n axes[i].createLabels();\n }\n }\n },\n\n createCategoryAxes: function(panes) {\n var this$1$1 = this;\n\n var invertAxes = this.invertAxes;\n var definitions = [].concat(this.options.categoryAxis);\n var axes = [];\n\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1$1.findPane(axisOptions.pane);\n\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var categories = axisOptions.categories; if (categories === void 0) { categories = []; }\n axisOptions = deepExtend({\n vertical: invertAxes,\n reverse: !invertAxes && this$1$1.chartService.rtl,\n axisCrossingValue: invertAxes ? MAX_VALUE : 0\n }, axisOptions);\n\n if (!defined(axisOptions.justified)) {\n axisOptions.justified = this$1$1.isJustified();\n }\n\n if (this$1$1.axisRequiresRounding(name, i)) {\n axisOptions.justified = false;\n }\n\n var categoryAxis = (void 0);\n\n if (isDateAxis(axisOptions, categories[0])) {\n axisOptions._forecast = this$1$1.trendlineAggregateForecast();\n categoryAxis = new dataviz.DateCategoryAxis(axisOptions, this$1$1.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this$1$1.chartService);\n }\n\n definitions[i].categories = categoryAxis.options.srcCategories;\n\n if (name) {\n if (this$1$1.namedCategoryAxes[name]) {\n throw new Error((\"Category axis with name \" + name + \" is already defined\"));\n }\n this$1$1.namedCategoryAxes[name] = categoryAxis;\n }\n\n categoryAxis.axisIndex = i;\n axes.push(categoryAxis);\n this$1$1.appendAxis(categoryAxis);\n }\n }\n\n var primaryAxis = this.categoryAxis || axes[0];\n this.categoryAxis = primaryAxis;\n\n if (invertAxes) {\n this.axisY = primaryAxis;\n } else {\n this.axisX = primaryAxis;\n }\n },\n\n isJustified: function() {\n var series = this.series;\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (!inArray(currentSeries.type, AREA_SERIES)) {\n return false;\n }\n }\n\n return true;\n },\n\n createValueAxes: function(panes) {\n var this$1$1 = this;\n\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var definitions = [].concat(this.options.valueAxis);\n var invertAxes = this.invertAxes;\n var baseOptions = { vertical: !invertAxes, reverse: invertAxes && this.chartService.rtl };\n var axes = [];\n\n if (this.stack100) {\n baseOptions.roundToMajorUnit = false;\n baseOptions.labels = { format: \"P0\" };\n }\n\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1$1.findPane(axisOptions.pane);\n\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n var range = tracker.query(name) || defaultRange || defaultAxisRange;\n\n if (i === 0 && range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n var axisType = (void 0);\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n\n var valueAxis = new axisType(range.min, range.max,\n deepExtend({}, baseOptions, axisOptions),\n this$1$1.chartService\n );\n\n if (name) {\n if (this$1$1.namedValueAxes[name]) {\n throw new Error((\"Value axis with name \" + name + \" is already defined\"));\n }\n this$1$1.namedValueAxes[name] = valueAxis;\n }\n valueAxis.axisIndex = i;\n\n axes.push(valueAxis);\n this$1$1.appendAxis(valueAxis);\n }\n }\n\n var primaryAxis = this.valueAxis || axes[0];\n this.valueAxis = primaryAxis;\n\n if (invertAxes) {\n this.axisX = primaryAxis;\n } else {\n this.axisY = primaryAxis;\n }\n },\n\n _dispatchEvent: function(chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var pane = this.pointPane(point);\n var categories = [];\n var values = [];\n\n if (!pane) {\n return;\n }\n\n var allAxes = pane.axes;\n for (var i = 0; i < allAxes.length; i++) {\n var axis = allAxes[i];\n if (axis.getValue) {\n appendIfNotNull(values, axis.getValue(point));\n } else {\n appendIfNotNull(categories, axis.getCategory(point));\n }\n }\n\n if (categories.length === 0) {\n appendIfNotNull(categories, this.categoryAxis.getCategory(point));\n }\n\n if (categories.length > 0 && values.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n category: singleItemOrArray(categories),\n value: singleItemOrArray(values)\n });\n }\n },\n\n pointPane: function(point) {\n var panes = this.panes;\n\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n if (currentPane.contentBox.containsPoint(point)) {\n return currentPane;\n }\n }\n },\n\n updateAxisOptions: function(axis, options) {\n updateAxisOptions(this.options, axis, options);\n updateAxisOptions(this.originalOptions, axis, options);\n },\n\n _pointsByVertical: function(basePoint, offset) {\n if (offset === void 0) { offset = 0; }\n\n if (this.invertAxes) {\n return this._siblingsBySeriesIndex(basePoint.series.index, offset);\n }\n\n return this._siblingsByPointIndex(basePoint.getIndex());\n },\n\n _pointsByHorizontal: function(basePoint, offset) {\n if (offset === void 0) { offset = 0; }\n\n if (this.invertAxes) {\n return this._siblingsByPointIndex(basePoint.getIndex());\n }\n\n var siblings = this._siblingsBySeriesIndex(basePoint.series.index, offset);\n\n if (this.chartService.rtl) {\n return siblings.reverse();\n }\n\n return siblings;\n },\n\n _siblingsByPointIndex: function(pointIndex) {\n var this$1$1 = this;\n\n var charts = this.charts;\n var result = [];\n\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n\n if (chart.pane && chart.pane.options.name === \"_navigator\") {\n continue;\n }\n\n var chartPoints = chart.points\n .filter(function (point) { return point && point.visible !== false && point.getIndex() === pointIndex; }\n );\n\n result.push.apply(result, chartPoints.sort(this$1$1._getSeriesCompareFn(chartPoints[0])));\n }\n\n return result;\n },\n\n _siblingsBySeriesIndex: function(seriesIndex, offset) {\n var index = cycleIndex(seriesIndex + offset, this.series.length);\n\n return this.pointsBySeriesIndex(index);\n },\n\n _getSeriesCompareFn: function(point) {\n var isStacked = this._isInStackedSeries(point);\n\n if (isStacked && this.invertAxes || !isStacked && !this.invertAxes) {\n return function (a, b) { return a.box.center().x - b.box.center().x; };\n }\n\n return function (a, b) { return a.box.center().y - b.box.center().y; };\n },\n\n _isInStackedSeries: function(point) {\n var sortableSeries = inArray(point.series.type,\n [ AREA, VERTICAL_AREA, RANGE_AREA, VERTICAL_RANGE_AREA, LINE, VERTICAL_LINE, RADAR_LINE, RADAR_AREA]);\n\n var stackableSeries = inArray(point.series.type, [ COLUMN, BAR]);\n\n return sortableSeries || stackableSeries && point.options.isStacked;\n }\n });\n\n function updateAxisOptions(targetOptions, axis, options) {\n var axesOptions = axis instanceof CategoryAxis ? [].concat(targetOptions.categoryAxis) : [].concat(targetOptions.valueAxis);\n deepExtend(axesOptions[axis.axisIndex], options);\n }\n\n function groupSeries(series, axis, axisIx) {\n return grep(series, function(s) {\n return (axisIx === 0 && !s.categoryAxis) || (s.categoryAxis === axis);\n });\n }\n\n setDefaultOptions(CategoricalPlotArea, {\n categoryAxis: {},\n valueAxis: {}\n });\n\n deepExtend(CategoricalPlotArea.prototype, PlotAreaEventsMixin);\n\n var Highlight = Class.extend({\n init: function() {\n\n this._points = [];\n },\n\n destroy: function() {\n this._points = [];\n },\n\n show: function(points, opacity) {\n var this$1$1 = this;\n\n var arrayPoints = [].concat(points);\n this.hide();\n\n for (var i = 0; i < arrayPoints.length; i++) {\n var point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this$1$1.togglePointHighlight(point, true, opacity);\n this$1$1._points.push(point);\n }\n }\n },\n\n togglePointHighlight: function(point, show, opacity) {\n var toggleHandler = (point.options.highlight || {}).toggle;\n if (toggleHandler) {\n var eventArgs = {\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n value: point.value,\n stackValue: point.stackValue,\n preventDefault: preventDefault,\n visual: point.highlightVisual(),\n show: show\n };\n toggleHandler(eventArgs);\n if (!eventArgs._defaultPrevented) {\n point.toggleHighlight(show, opacity);\n }\n } else {\n point.toggleHighlight(show, opacity);\n }\n },\n\n hide: function() {\n var this$1$1 = this;\n\n var points = this._points;\n while (points.length) {\n this$1$1.togglePointHighlight(points.pop(), false);\n }\n },\n\n isHighlighted: function(element) {\n var points = this._points;\n\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (element === point) {\n return true;\n }\n }\n\n return false;\n }\n });\n\n function preventDefault() {\n this._defaultPrevented = true;\n }\n\n function acceptKey(e, mouseKey) {\n var key = (mouseKey || \"\").toLowerCase();\n var event = e.event;\n var accept = (key === \"none\" && !(event.ctrlKey || event.shiftKey || event.altKey)) || event[key + \"Key\"];\n\n return accept;\n }\n\n function toChartAxisRanges(axisRanges) {\n var ranges = {};\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n if (axisRange.axis.options.name) {\n ranges[axisRange.axis.options.name] = {\n min: axisRange.range.min,\n max: axisRange.range.max\n };\n }\n }\n return ranges;\n }\n\n var Pannable = Class.extend({\n init: function(plotArea, options) {\n\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n },\n\n start: function(e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\n },\n\n move: function(e) {\n if (this._active) {\n var axisRanges = this.axisRanges = this._panAxes(e, X).concat(this._panAxes(e, Y));\n if (axisRanges.length) {\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n }\n },\n\n end: function() {\n var active = this._active;\n this._active = false;\n\n return active;\n },\n\n pan: function() {\n var ref = this;\n var plotArea = ref.plotArea;\n var axisRanges = ref.axisRanges;\n if (axisRanges.length) {\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var range = axisRanges[idx];\n plotArea.updateAxisOptions(range.axis, range.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n\n destroy: function() {\n delete this.plotArea;\n },\n\n _panAxes: function(e, position) {\n var plotArea = this.plotArea;\n var delta = -e[position].delta;\n var lock = (this.options.lock || \"\").toLowerCase();\n var updatedAxes = [];\n\n if (delta !== 0 && (lock || \"\").toLowerCase() !== position) {\n var axes = plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n\n if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n var range = axis.pan(delta);\n\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n\n return updatedAxes;\n }\n });\n\n Pannable.prototype.options = {\n key: \"none\",\n lock: \"none\"\n };\n\n var ZoomSelection = Class.extend({\n init: function(chart, options) {\n\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\n },\n\n createElement: function() {\n var marquee = this._marquee = document.createElement(\"div\");\n marquee.className = \"k-marquee\";\n var marqueeColor = document.createElement(\"div\");\n marqueeColor.className = \"k-marquee-color\";\n marquee.appendChild(marqueeColor);\n },\n\n removeElement: function() {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n },\n\n setStyles: function(styles) {\n elementStyles(this._marquee, styles);\n },\n\n start: function(e) {\n if (acceptKey(e, this.options.key)) {\n var chart = this.chart;\n var point = chart._eventCoordinates(e);\n var zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n var clipBox = zoomPane ? zoomPane.chartsBox().clone() : null;\n\n if (zoomPane && clipBox) {\n var offset = this._elementOffset();\n\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\n\n document.body.appendChild(this._marquee);\n this.setStyles({\n left: e.pageX + 1,\n top: e.pageY + 1,\n width: 0,\n height: 0\n });\n\n return true;\n }\n }\n return false;\n },\n\n _elementOffset: function() {\n var chartElement = this.chart.element;\n var ref = elementStyles(chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var offset = dataviz.elementOffset(chartElement);\n\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n },\n\n move: function(e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\n }\n },\n\n end: function(e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n var elementOffset$$1 = this._elementOffset();\n var selectionPosition = this._selectionPosition(e);\n selectionPosition.left -= elementOffset$$1.left;\n selectionPosition.top -= elementOffset$$1.top;\n\n var start = { x: selectionPosition.left, y: selectionPosition.top };\n var end = { x: selectionPosition.left + selectionPosition.width, y: selectionPosition.top + selectionPosition.height };\n this._updateAxisRanges(start, end);\n\n this.removeElement();\n delete this._zoomPane;\n\n return toChartAxisRanges(this.axisRanges);\n }\n },\n\n zoom: function() {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n\n destroy: function() {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n },\n\n _updateAxisRanges: function(start, end) {\n var lock = (this.options.lock || \"\").toLowerCase();\n var axisRanges = [];\n\n var axes = this._zoomPane.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && defined(axis.axisIndex)) {\n var range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n\n this.axisRanges = axisRanges;\n },\n\n _selectionPosition: function(e) {\n var clipBox = this._zoomPaneClipBox;\n var startLocation = {\n x: e.x.startLocation,\n y: e.y.startLocation\n };\n var pageX = e.x.location;\n var pageY = e.y.location;\n var lock = (this.options.lock || \"\").toLowerCase();\n var left = Math.min(startLocation.x, pageX);\n var top = Math.min(startLocation.y, pageY);\n var width = Math.abs(startLocation.x - pageX);\n var height = Math.abs(startLocation.y - pageY);\n\n if (lock === X) {\n left = clipBox.x1;\n width = clipBox.width();\n }\n if (lock === Y) {\n top = clipBox.y1;\n height = clipBox.height();\n }\n\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\n\n return {\n left: Math.max(left, clipBox.x1),\n top: Math.max(top, clipBox.y1),\n width: width,\n height: height\n };\n }\n });\n\n ZoomSelection.prototype.options = {\n key: \"shift\",\n lock: \"none\"\n };\n\n var ref = drawing.util;\n var limitValue$1 = ref.limitValue;\n var valueOrDefault$1 = ref.valueOrDefault;\n\n // Limit the zoom rate between 1% and 90% per mousewheel event.\n // At zoom rates close to 100% the axis range quickly becomes 0.\n var MIN_RATE = 0.01;\n var MAX_RATE = 0.9;\n var DEFAULT_RATE = 0.3;\n\n var MousewheelZoom = Class.extend({\n init: function(chart, options) {\n\n this.chart = chart;\n this.options = deepExtend({\n rate: DEFAULT_RATE\n }, this.options, options);\n },\n\n updateRanges: function(delta, coords) {\n var this$1$1 = this;\n\n var lock = (this.options.lock || \"\").toLowerCase();\n var axisRanges = [];\n var axes = this.chart._plotArea.axes;\n\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && axis.zoomRange) {\n var rate = limitValue$1(this$1$1.options.rate, MIN_RATE, MAX_RATE);\n var range = axis.zoomRange(-delta * rate, coords);\n\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n },\n\n zoom: function() {\n var axisRanges = this.axisRanges;\n var plotArea = this.chart._plotArea;\n\n if (axisRanges && axisRanges.length && plotArea.updateAxisOptions) {\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n\n destroy: function() {\n delete this.chart;\n }\n });\n\n var LegendLayout = ChartElement.extend({\n init: function(options, chartService) {\n ChartElement.fn.init.call(this, options);\n\n this.chartService = chartService;\n },\n\n render: function() {\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var vertical = options.vertical;\n\n this.visual = new drawing.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? datavizConstants.VERTICAL : datavizConstants.HORIZONTAL,\n reverse: options.rtl,\n alignItems: vertical ? START : CENTER\n });\n\n for (var idx = 0; idx < children.length; idx++) {\n var legendItem = children[idx];\n legendItem.reflow(new Box());\n legendItem.renderVisual();\n }\n },\n\n reflow: function(box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n var bbox = this.visual.clippedBBox();\n\n if (bbox) {\n this.box = dataviz.rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n },\n\n renderVisual: function() {\n this.addVisual();\n },\n\n createVisual: function() {}\n });\n\n var DEFAULT_MARKER_SIZE = 10;\n var DEFAULT_MARKER_BORDER_WIDTH = 2;\n\n var LegendItemMarker = ShapeElement.extend({\n visualStyle: function() {\n var options = this.markerOptions();\n var border = options.border;\n\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault$1(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n },\n\n markerOptions: function() {\n return this.options;\n },\n\n markerHighlightOptions: function() {\n var options = this.markerOptions();\n var borderWidth = options.highlight.border.width;\n\n return deepExtend(\n {},\n options,\n { background: options.border.color },\n options.highlight,\n options.type === datavizConstants.CROSS ? {\n background: options.highlight.border.color,\n border: { color: options.highlight.background, width: borderWidth / 2 },\n width: options.width,\n height: options.height,\n margin: { top: 0, left: 0 }\n } : {}\n );\n },\n\n createHighlight: function() {\n var highlight = new ShapeElement(this.markerHighlightOptions());\n var box = this.paddingBox.clone();\n highlight.reflow(box.pad(highlight.options.border.width));\n this.highlight = [ highlight.getElement() ];\n\n return this.highlight;\n }\n });\n\n setDefaultOptions(LegendItemMarker, {\n border: {\n width: DEFAULT_MARKER_BORDER_WIDTH\n },\n width: DEFAULT_MARKER_SIZE - DEFAULT_MARKER_BORDER_WIDTH,\n height: DEFAULT_MARKER_SIZE - DEFAULT_MARKER_BORDER_WIDTH,\n background: WHITE,\n margin: {\n top: -1,\n left: -1\n },\n vAlign: TOP,\n align: LEFT,\n highlight: {\n width: DEFAULT_MARKER_SIZE,\n height: DEFAULT_MARKER_SIZE,\n border: {\n color: WHITE,\n width: DEFAULT_MARKER_BORDER_WIDTH\n }\n }\n });\n\n var ChartElement$1 = Class.extend({\n init: function(options) {\n\n this.children = [];\n\n this.options = deepExtend({}, this.options, this.initUserOptions(options));\n },\n\n initUserOptions: function(options) {\n return options;\n },\n\n reflow: function(targetBox) {\n var children = this.children;\n var box;\n\n for (var i = 0; i < children.length; i++) {\n var currentChild = children[i];\n currentChild.reflow(targetBox);\n\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n\n this.box = box || targetBox;\n },\n\n destroy: function() {\n var children = this.children;\n\n if (this.animation) {\n this.animation.destroy();\n }\n\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n },\n\n getRoot: function() {\n var parent = this.parent;\n\n return parent ? parent.getRoot() : null;\n },\n\n getSender: function() {\n var service = this.getService();\n if (service) {\n return service.sender;\n }\n },\n\n getService: function() {\n var element = this;\n while (element) {\n if (element.chartService) {\n return element.chartService;\n }\n element = element.parent;\n }\n },\n\n translateChildren: function(dx, dy) {\n var children = this.children;\n var childrenCount = children.length;\n\n for (var i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n },\n\n append: function() {\n var arguments$1 = arguments;\n var this$1$1 = this;\n\n for (var i = 0; i < arguments.length; i++) {\n var item = arguments$1[i];\n this$1$1.children.push(item);\n item.parent = this$1$1;\n }\n },\n\n renderVisual: function() {\n if (this.options.visible === false) {\n return;\n }\n\n this.createVisual();\n\n this.addVisual();\n\n this.renderChildren();\n\n this.createAnimation();\n this.renderComplete();\n },\n\n addVisual: function() {\n if (this.visual) {\n this.visual.chartElement = this;\n\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n },\n\n renderChildren: function() {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n children[i].renderVisual();\n }\n },\n\n createVisual: function() {\n this.visual = new Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n },\n\n createAnimation: function() {\n if (this.visual && this.options.animation) {\n this.animation = Animation.create(\n this.visual, this.options.animation\n );\n }\n },\n\n appendVisual: function(childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\n\n if (childVisual.options.noclip) {\n this.clipRoot().visual.append(childVisual);\n } else if (defined(childVisual.options.zIndex)) {\n this.stackRoot().stackVisual(childVisual);\n } else if (this.isStackRoot) {\n this.stackVisual(childVisual);\n } else if (this.visual) {\n this.visual.append(childVisual);\n } else {\n // Allow chart elements without visuals to\n // pass through child visuals\n this.parent.appendVisual(childVisual);\n }\n },\n\n clipRoot: function() {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n\n return this;\n },\n\n stackRoot: function() {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n\n return this;\n },\n\n stackVisual: function(childVisual) {\n var zIndex = childVisual.options.zIndex || 0;\n var visuals = this.visual.children;\n var length = visuals.length;\n var pos;\n\n for (pos = 0; pos < length; pos++) {\n var sibling = visuals[pos];\n var here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n\n this.visual.insert(pos, childVisual);\n },\n\n traverse: function(callback) {\n var children = this.children;\n var length = children.length;\n\n for (var i = 0; i < length; i++) {\n var child = children[i];\n\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n },\n\n closest: function(match) {\n var element = this;\n var matched = false;\n\n while (element && !matched) {\n matched = match(element);\n\n if (!matched) {\n element = element.parent;\n }\n }\n\n if (matched) {\n return element;\n }\n },\n\n renderComplete: function() {},\n\n hasHighlight: function() {\n var options = (this.options || {}).highlight;\n return !(!this.createHighlight || (options && options.visible === false) || this.visible === false);\n },\n\n toggleHighlight: function(show, opacity) {\n var this$1$1 = this;\n\n var options = (this.options || {}).highlight || {};\n var customVisual = options.visual;\n var highlight = this._highlight;\n\n if (!highlight) {\n var highlightOptions = {\n fill: {\n color: WHITE,\n opacity: opacity || 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: opacity || 0.2\n }\n };\n\n if (customVisual) {\n highlight = this._highlight = customVisual(\n $.extend(this.highlightVisualArgs(), {\n createVisual: function () { return this$1$1.createHighlight(highlightOptions); },\n sender: this.getSender(),\n series: this.series,\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total\n })\n );\n\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, this.options.zIndex);\n }\n\n this.appendVisual(highlight);\n }\n\n highlight.visible(show);\n },\n\n toggleFocusHighlight: function(show) {\n var options = ((this.options || {}).accessibility || {}).highlight || {};\n var focusHighlight = this._focusHighlight;\n\n if (!show && !focusHighlight) {\n return;\n }\n\n if (!focusHighlight) {\n var rootBackground = this.getRoot().options.background;\n var highlightColor = autoTextColor(rootBackground);\n var focusHighlightOptions = {\n fill: {\n opacity: options.opacity,\n color: options.color\n },\n stroke: $.extend({}, {color: highlightColor}, options.border),\n zIndex: options.zIndex\n };\n\n focusHighlight = this._focusHighlight = this.createFocusHighlight(focusHighlightOptions);\n\n this.appendVisual(focusHighlight);\n }\n\n focusHighlight.visible(show);\n },\n\n createGradientOverlay: function(element, options, gradientOptions) {\n var overlay = new Path($.extend({\n stroke: {\n color: \"none\"\n },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n\n overlay.segments.elements(element.segments.elements());\n\n return overlay;\n },\n\n createGradient: function(options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n },\n\n supportsPointInactiveOpacity: function() {\n return true;\n }\n });\n\n ChartElement$1.prototype.options = { };\n\n var Point$1 = Class.extend({\n init: function(x, y) {\n\n this.x = x || 0;\n this.y = y || 0;\n },\n\n clone: function() {\n return new Point$1(this.x, this.y);\n },\n\n equals: function(point) {\n return point && this.x === point.x && this.y === point.y;\n },\n\n rotate: function(center, degrees) {\n var theta = rad(degrees);\n var cosT = Math.cos(theta);\n var sinT = Math.sin(theta);\n var cx = center.x;\n var cy = center.y;\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n\n this.x = round(\n cx + (x - cx) * cosT + (y - cy) * sinT,\n COORD_PRECISION\n );\n\n this.y = round(\n cy + (y - cy) * cosT - (x - cx) * sinT,\n COORD_PRECISION\n );\n\n return this;\n },\n\n multiply: function(a) {\n\n this.x *= a;\n this.y *= a;\n\n return this;\n },\n\n distanceTo: function(point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n });\n\n Point$1.onCircle = function(center, angle, radius) {\n var radians = rad(angle);\n\n return new Point$1(\n center.x - radius * Math.cos(radians),\n center.y - radius * Math.sin(radians)\n );\n };\n\n var Box$1 = Class.extend({\n init: function(x1, y1, x2, y2) {\n\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n },\n\n equals: function(box) {\n return this.x1 === box.x1 && this.x2 === box.x2 &&\n this.y1 === box.y1 && this.y2 === box.y2;\n },\n\n width: function() {\n return this.x2 - this.x1;\n },\n\n height: function() {\n return this.y2 - this.y1;\n },\n\n translate: function(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n\n return this;\n },\n\n move: function(x, y) {\n var height = this.height();\n var width = this.width();\n\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n\n return this;\n },\n\n wrap: function(targetBox) {\n this.x1 = Math.min(this.x1, targetBox.x1);\n this.y1 = Math.min(this.y1, targetBox.y1);\n this.x2 = Math.max(this.x2, targetBox.x2);\n this.y2 = Math.max(this.y2, targetBox.y2);\n\n return this;\n },\n\n wrapPoint: function(point) {\n var arrayPoint = isArray(point);\n var x = arrayPoint ? point[0] : point.x;\n var y = arrayPoint ? point[1] : point.y;\n this.wrap(new Box$1(x, y, x, y));\n\n return this;\n },\n\n snapTo: function(targetBox, axis) {\n\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n\n return this;\n },\n\n alignTo: function(targetBox, anchor) {\n var height = this.height();\n var width = this.width();\n var axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n var offset = axis === Y ? height : width;\n\n if (anchor === CENTER) {\n var targetCenter = targetBox.center();\n var center = this.center();\n\n this.x1 += targetCenter.x - center.x;\n this.y1 += targetCenter.y - center.y;\n } else if (anchor === TOP || anchor === LEFT) {\n this[axis + 1] = targetBox[axis + 1] - offset;\n } else {\n this[axis + 1] = targetBox[axis + 2];\n }\n\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n\n return this;\n },\n\n shrink: function(dw, dh) {\n\n this.x2 -= dw;\n this.y2 -= dh;\n\n return this;\n },\n\n expand: function(dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n },\n\n pad: function(padding) {\n var spacing = getSpacing(padding);\n\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n\n return this;\n },\n\n unpad: function(padding) {\n var spacing = getSpacing(padding);\n\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n\n return this.pad(spacing);\n },\n\n clone: function() {\n return new Box$1(this.x1, this.y1, this.x2, this.y2);\n },\n\n center: function() {\n return new Point$1(\n this.x1 + this.width() / 2,\n this.y1 + this.height() / 2\n );\n },\n\n containsPoint: function(point) {\n\n return point.x >= this.x1 && point.x <= this.x2 &&\n point.y >= this.y1 && point.y <= this.y2;\n },\n\n points: function() {\n return [\n new Point$1(this.x1, this.y1),\n new Point$1(this.x2, this.y1),\n new Point$1(this.x2, this.y2),\n new Point$1(this.x1, this.y2)\n ];\n },\n\n getHash: function() {\n return [ this.x1, this.y1, this.x2, this.y2 ].join(\",\");\n },\n\n overlaps: function(box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n },\n\n rotate: function(rotation) {\n var width = this.width();\n var height = this.height();\n var ref = this.center();\n var cx = ref.x;\n var cy = ref.y;\n\n var r1 = rotatePoint(0, 0, cx, cy, rotation);\n var r2 = rotatePoint(width, 0, cx, cy, rotation);\n var r3 = rotatePoint(width, height, cx, cy, rotation);\n var r4 = rotatePoint(0, height, cx, cy, rotation);\n\n width = Math.max(r1.x, r2.x, r3.x, r4.x) - Math.min(r1.x, r2.x, r3.x, r4.x);\n height = Math.max(r1.y, r2.y, r3.y, r4.y) - Math.min(r1.y, r2.y, r3.y, r4.y);\n\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n\n return this;\n },\n\n toRect: function() {\n return new geometry.Rect([ this.x1, this.y1 ], [ this.width(), this.height() ]);\n },\n\n hasSize: function() {\n return this.width() !== 0 && this.height() !== 0;\n },\n\n align: function(targetBox, axis, alignment) {\n var c1 = axis + 1;\n var c2 = axis + 2;\n var sizeFunc = axis === X ? datavizConstants.WIDTH : datavizConstants.HEIGHT;\n var size = this[sizeFunc]();\n\n if (inArray(alignment, [ LEFT, TOP ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [ RIGHT, BOTTOM ])) {\n this[c2] = targetBox[c2];\n this[c1] = this[c2] - size;\n } else if (alignment === CENTER) {\n this[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n this[c2] = this[c1] + size;\n }\n }\n });\n\n function rotatePoint(x, y, cx, cy, angle) {\n var theta = rad(angle);\n\n return new Point$1(\n cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta),\n cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta)\n );\n }\n\n var BoxElement$1 = ChartElement$1.extend({\n init: function(options) {\n ChartElement$1.fn.init.call(this, options);\n\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var shrinkToFit = options.shrinkToFit;\n var hasSetSize = width && height;\n var margin = options.margin;\n var padding = options.padding;\n var borderWidth = options.border.width;\n var box;\n\n var reflowPaddingBox = function () {\n this$1$1.align(targetBox, X, options.align);\n this$1$1.align(targetBox, Y, options.vAlign);\n this$1$1.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n\n var contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n\n ChartElement$1.fn.reflow.call(this, contentBox);\n\n if (hasSetSize) {\n box = this.box = new Box$1(0, 0, width, height);\n } else {\n box = this.box;\n }\n\n if (shrinkToFit && hasSetSize) {\n reflowPaddingBox();\n contentBox = this.contentBox = this.paddingBox.clone().unpad(padding);\n } else {\n contentBox = this.contentBox = box.clone();\n box.pad(padding).pad(borderWidth).pad(margin);\n reflowPaddingBox();\n }\n\n this.translateChildren(\n box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left,\n box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top\n );\n\n var children = this.children;\n for (var i = 0; i < children.length; i++) {\n var item = children[i];\n item.reflow(item.box);\n }\n },\n\n align: function(targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n },\n\n hasBox: function() {\n var options = this.options;\n return options.border.width || options.background;\n },\n\n createVisual: function() {\n ChartElement$1.fn.createVisual.call(this);\n\n var options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(Path.fromRect(\n this.paddingBox.toRect(),\n this.visualStyle()\n ));\n }\n },\n\n visualStyle: function() {\n var options = this.options;\n var border = options.border || {};\n\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n }\n });\n\n setDefaultOptions(BoxElement$1, {\n align: LEFT,\n vAlign: TOP,\n margin: {},\n padding: {},\n border: {\n color: BLACK,\n width: 0\n },\n background: \"\",\n shrinkToFit: false,\n width: 0,\n height: 0,\n visible: true\n });\n\n var ShapeElement$1 = BoxElement$1.extend({\n init: function(options, pointData) {\n BoxElement$1.fn.init.call(this, options);\n\n this.pointData = pointData;\n },\n\n getElement: function() {\n var ref = this;\n var options = ref.options;\n var box = ref.paddingBox;\n var type = options.type;\n var rotation = options.rotation;\n var center = box.center();\n var halfWidth = box.width() / 2;\n var halfHeight = box.height() / 2;\n\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n\n var style = this.visualStyle();\n var element;\n\n if (type === CIRCLE) {\n element = new Circle(\n new GeometryCircle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + halfHeight, COORD_PRECISION)\n ], Math.min(halfWidth, halfHeight)),\n style\n );\n } else if (type === datavizConstants.TRIANGLE) {\n element = Path.fromPoints([\n [ box.x1 + halfWidth, box.y1 ],\n [ box.x1, box.y2 ],\n [ box.x2, box.y2 ]\n ], style).close();\n } else if (type === datavizConstants.CROSS) {\n element = new MultiPath(style);\n\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n } else {\n var rect = box.toRect();\n if (type === datavizConstants.ROUNDED_RECT) {\n var borderRadius = valueOrDefault$1(options.borderRadius, rect.width() / 5);\n rect.setCornerRadius(borderRadius);\n }\n\n element = Path.fromRect(rect, style);\n }\n\n if (rotation) {\n element.transform(transform()\n .rotate(-rotation, [ center.x, center.y ])\n );\n }\n\n element.options.zIndex = options.zIndex;\n\n return element;\n },\n\n createElement: function() {\n var this$1$1 = this;\n\n var customVisual = this.options.visual;\n var pointData = this.pointData || {};\n var visual;\n\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: this.getSender(),\n series: pointData.series,\n category: pointData.category,\n rect: this.paddingBox.toRect(),\n options: this.visualOptions(),\n createVisual: function () { return this$1$1.getElement(); }\n });\n } else {\n visual = this.getElement();\n }\n\n return visual;\n },\n\n visualOptions: function() {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n },\n\n createVisual: function() {\n this.visual = this.createElement();\n\n addAccessibilityAttributesToVisual(this.visual, this.options.accessibilityOptions);\n }\n });\n\n setDefaultOptions(ShapeElement$1, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n });\n\n var MarkerLineArea = ShapeElement$1.extend({\n getElement: function() {\n var group = new Group();\n var element = new MultiPath(this.visualStyle());\n var ref = this;\n var box = ref.paddingBox;\n var halfHeight = box.height() / 2;\n\n element\n .moveTo(box.x1, box.y1 + halfHeight)\n .lineTo(box.x1, box.y2)\n .lineTo(box.x2, box.y2);\n\n group.append(element);\n\n return group;\n }\n });\n\n setDefaultOptions(MarkerLineArea, {\n width: 15,\n height: 15,\n align: RIGHT,\n vAlign: BOTTOM,\n margin: {\n right: -2,\n bottom: 2\n }\n });\n\n var LegendItemLine = ShapeElement$1.extend({\n getElement: function() {\n var group = new Group();\n var element = new MultiPath({\n stroke: {\n color: this.options.border.color,\n opacity: this.options.opacity,\n width: this.options.height,\n dashType: this.options.dashType\n }\n });\n var box = this.paddingBox;\n var centerY = box.center().y;\n\n element\n .moveTo(box.x1, centerY)\n .lineTo(box.x2, centerY);\n\n group.append(element);\n\n return group;\n },\n\n createHighlight: function() {\n this.highlight = [ this.createHighlightLine(), this.createHighlightMarker() ];\n return this.highlight;\n },\n\n createHighlightLine: function() {\n var options = deepExtend({}, {\n border: {\n color: this.options.border.color,\n opacity: this.options.border.opacity,\n dashType: this.options.border.dashType\n }\n }, this.options.highlight);\n var highlightLine = new MarkerLineArea(options);\n highlightLine.reflow(this.parent.paddingBox.clone());\n\n this.highlightLine = highlightLine.getElement();\n\n return this.highlightLine;\n },\n\n createHighlightMarker: function() {\n var options = deepExtend({}, {\n background: this.options.background,\n }, this.options.highlight.markers);\n var highlightMarker = new ShapeElement$1(options);\n var paddingBox = this.parent.paddingBox;\n var borderWidth = options.border.width;\n var box = this.parent.box.clone();\n\n box.pad({\n left: borderWidth - paddingBox.x1,\n top: borderWidth - paddingBox.y1\n });\n\n highlightMarker.reflow(box);\n this.highlightMarker = highlightMarker.getElement();\n\n return this.highlightMarker;\n }\n });\n\n setDefaultOptions(LegendItemLine, {\n border: {\n width: 0\n },\n type: datavizConstants.RECT,\n align: LEFT,\n vAlign: CENTER,\n highlight: {\n border: {\n width: DEFAULT_MARKER_BORDER_WIDTH\n },\n markers: {\n type: CIRCLE,\n width: DEFAULT_MARKER_SIZE,\n height: DEFAULT_MARKER_SIZE,\n border: {\n width: DEFAULT_MARKER_BORDER_WIDTH,\n color: WHITE\n },\n align: LEFT,\n vAlign: TOP\n }\n }\n });\n\n var LegendItemSquare = ShapeElement$1.extend({\n createHighlight: function() {\n var options = deepExtend({}, {\n background: this.options.background,\n }, this.options.highlight.markers);\n var highlight = new ShapeElement$1(options);\n\n var box = this.paddingBox.clone();\n var targetBox = this.parent.box.clone();\n box.align(targetBox, X, LEFT);\n box.align(targetBox, Y, TOP);\n highlight.reflow(box);\n\n this.highlight = [ highlight.getElement() ];\n\n return this.highlight;\n }\n });\n\n setDefaultOptions(LegendItemSquare, {\n highlight: {\n markers: {\n type: CIRCLE,\n width: DEFAULT_MARKER_SIZE,\n height: DEFAULT_MARKER_SIZE,\n border: {\n width: DEFAULT_MARKER_BORDER_WIDTH,\n color: WHITE\n },\n margin: {\n top: -3,\n left: -3\n }\n }\n }\n });\n\n var LegendItem = BoxElement.extend({\n init: function(options) {\n BoxElement.fn.init.call(this, options);\n\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n\n this._id = guid();\n this.options.accessibility.ariaChecked = options.active;\n },\n\n createContainer: function() {\n this.container = new dataviz.FloatElement({ vertical: false, wrap: false, align: CENTER, spacing: this.options.spacing });\n this.append(this.container);\n },\n\n createMarker: function() {\n this.markerWrap = new BoxElement({ vertical: false, shrinkToFit: true, wrap: false, margin: 1, width: 22, height: 22 });\n this.container.append(this.markerWrap);\n\n this.createMarkerArea();\n\n if (this.options.markers.visible) {\n this._marker = this._createMarker();\n this.markerWrap.append(this._marker);\n }\n },\n\n createMarkerArea: function() {\n var options = this.options;\n var markerColor = options.markerColor;\n var line = options.line; if (line === void 0) { line = {}; }\n var lineOptions = {\n border: {\n color: line.color || markerColor,\n opacity: line.opacity,\n dashType: line.dashType\n }\n };\n return this._createLine(lineOptions) ||\n this._createMarkerLine(lineOptions, line) ||\n this._createSquare();\n },\n\n markerOptions: function() {\n var options = this.options;\n var markers = options.markers; if (markers === void 0) { markers = {}; }\n var markerColor = options.markerColor;\n var border = markers.border; if (border === void 0) { border = {}; }\n markers.zIndex = undefined;\n\n return deepExtend({}, markers, {\n border: { color: border.color || markerColor },\n highlight: options.highlight.markers\n });\n },\n\n _highlightOptions: function() {\n var options = this.options;\n return deepExtend(\n { markers: { type: options.markers.type } },\n options.highlight\n );\n },\n\n _createLine: function(lineOptions) {\n var options = this.options;\n if (options.type === LINE && !options.markers.visible) {\n this._line = new LegendItemLine(deepExtend({}, {\n background: options.markerColor,\n highlight: this._highlightOptions(),\n }, lineOptions, options.line));\n\n this.markerWrap.append(this._line);\n }\n return this._line;\n },\n\n _createMarkerLine: function(lineOptions, line) {\n var options = this.options;\n if (options.type === LINE) {\n this._markerLineArea = new MarkerLineArea(deepExtend({}, {\n border: {\n width: line.height\n }\n }, lineOptions));\n\n this.markerWrap.append(this._markerLineArea);\n }\n\n return this._markerLineArea;\n },\n\n _createSquare: function() {\n var options = this.options;\n if (options.type === AREA) {\n this._square = new LegendItemSquare($.extend({}, {border: options.border,\n vAlign: options.markers.visible ? BOTTOM : CENTER,\n highlight: this._highlightOptions(),\n visual: options.visual},\n options.area,\n {background: options.area.background || options.markerColor}));\n this.markerWrap.append(this._square);\n }\n return this._square;\n },\n\n _createMarker: function() {\n return new LegendItemMarker(this.markerOptions());\n },\n\n _highlightMarkers: function() {\n if (this.options.active) {\n this._toggleHighlight(true);\n }\n },\n\n _restoreMarkers: function() {\n this._toggleHighlight(false);\n },\n\n _toggleHighlight: function(show) {\n var this$1$1 = this;\n\n if (!this.options.highlight.visible) {\n return;\n }\n\n var element = this._marker || this._square || this._line;\n\n if (element && element === this._line) {\n this._line.visual.visible(!show);\n }\n\n if (element) {\n var highlight = element.highlight;\n\n if (!highlight) {\n highlight = element.createHighlight();\n highlight.forEach(function (h) { return h && this$1$1.markerWrap.appendVisual(h); });\n }\n\n highlight.forEach(function (h) { return h && h.visible(show); });\n }\n },\n\n createLabel: function() {\n var options = this.options;\n var labelOptions = deepExtend({}, options.labels);\n\n this.container.append(new TextBox(options.text, labelOptions));\n },\n\n getAriaLabelText: function() {\n return this.options.text;\n },\n\n focusVisual: function() {\n this.visual.options.set(\"id\", this._id);\n this.toggleFocusHighlight(true);\n this._highlightMarkers();\n },\n\n clearFocusFromVisual: function() {\n this.visual.options.set(\"id\", \"\");\n this.toggleFocusHighlight(false);\n this._restoreMarkers();\n },\n\n renderComplete: function() {\n BoxElement.fn.renderComplete.call(this);\n\n var cursor = this.options.cursor || {};\n var eventSink = this._itemOverlay = Path.fromRect(this.container.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null,\n cursor: cursor.style || cursor\n });\n\n this.appendVisual(eventSink);\n },\n\n click: function(widget, e) {\n var args = this.eventArgs(e);\n\n if (!widget.trigger(LEGEND_ITEM_CLICK, args) && e && e.type === 'contextmenu') {\n e.preventDefault();\n }\n },\n\n over: function(widget, e) {\n var args = this.eventArgs(e);\n\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n this._highlightMarkers();\n }\n\n // Don't trigger point hover for legend items\n return true;\n },\n\n out: function(widget, e) {\n widget._unsetActivePoint();\n this._restoreMarkers();\n\n widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\n },\n\n eventArgs: function(e) {\n var options = this.options;\n\n return {\n element: eventElement(e),\n text: options.text,\n series: options.series,\n seriesIndex: options.series.index,\n pointIndex: options.pointIndex\n };\n },\n\n createVisual: function() {\n BoxElement.fn.createVisual.call(this);\n var options = this.options;\n\n if (this.options.visible) {\n var accessibilityOptions = deepExtend({\n ariaLabel: options.text\n }, options.accessibility);\n\n addAccessibilityAttributesToVisual(this.visual, accessibilityOptions);\n }\n },\n\n renderVisual: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var customVisual = options.visual;\n\n if (customVisual) {\n this.visual = customVisual({\n active: options.active,\n series: options.series,\n sender: this.getSender(),\n pointIndex: options.pointIndex,\n options: {\n type: options.type,\n // Passing the markerColor as a background option for backwards compatibility.\n // Example in jq docs - https://docs.telerik.com/kendo-ui/api/javascript/dataviz/ui/chart/configuration/legend.item#legenditemvisual\n markers: deepExtend({ background: this.options.markerColor }, this.markerOptions()),\n labels: options.labels\n },\n createVisual: function () {\n this$1$1.createVisual();\n this$1$1.renderChildren();\n this$1$1.renderComplete();\n\n var defaultVisual = this$1$1.visual;\n\n delete this$1$1.visual;\n\n return defaultVisual;\n }\n });\n this._marker = this._markerLineArea = this._square = this._line = null;\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n\n createFocusHighlight: function(style) {\n var borderWidth = style.stroke.width;\n return Path.fromRect(this.container.box.pad(borderWidth / 2).toRect(), style);\n }\n });\n\n setDefaultOptions(LegendItem, {\n accessibility: {\n role: LEGEND_ITEM_ROLE,\n className: LEGEND_ITEM_CLASSNAME,\n ariaRoleDescription: LEGEND_ITEM_ARIA_ROLE_DESCRIPTION\n },\n markers: {},\n highlight: {\n visible: true,\n markers: {}\n }\n });\n\n var CUSTOM = \"custom\";\n\n var Legend = ChartElement.extend({\n init: function(options, chartService) {\n if (chartService === void 0) { chartService = {}; }\n\n ChartElement.fn.init.call(this, options);\n\n this.chartService = chartService;\n\n if (!inArray(this.options.position, [ TOP, RIGHT, BOTTOM, LEFT, CUSTOM ])) {\n this.options.position = RIGHT;\n }\n\n this.createContainers();\n\n this.createLegendTitle(options.title);\n\n this.createItems();\n },\n\n createContainers: function() {\n var options = this.options;\n var position = options.position;\n var userAlign = options.align;\n var align = position;\n var vAlign = CENTER;\n\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [ TOP, BOTTOM ])) {\n if (userAlign === START) {\n align = LEFT;\n } else if (userAlign === END) {\n align = RIGHT;\n } else {\n align = CENTER;\n }\n vAlign = position;\n } else if (userAlign) {\n if (userAlign === START) {\n vAlign = TOP;\n } else if (userAlign === END) {\n vAlign = BOTTOM;\n }\n }\n\n this.container = new BoxElement({\n margin: options.margin,\n padding: options.padding,\n background: options.background,\n border: options.border,\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n\n if (this.hasTitle()) {\n this.itemsContainer = new BoxElement({\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n } else {\n this.itemsContainer = this.container;\n }\n\n this.append(this.container);\n },\n\n createItems: function() {\n var chartService = this.getService();\n var options = this.options;\n var vertical = this.isVertical();\n var innerElement = new LegendLayout({\n vertical: vertical,\n spacing: options.spacing,\n rtl: chartService.rtl\n }, chartService);\n var data = options.data;\n\n if (options.reverse) {\n data = data.slice(0).reverse();\n }\n\n var count = data.length;\n\n for (var i = 0; i < count; i++) {\n var dataItem = data[i];\n var ref = dataItem.series || {};\n var markers = ref.markers; if (markers === void 0) { markers = {}; }\n var dashType = ref.dashType;\n var legendItem = ref.legendItem;\n var opacity = ref.opacity;\n var markersOptions = deepExtend({ visible: markers.visible !== false, type: CIRCLE }, markers);\n delete markersOptions.size;\n\n var itemOptions = deepExtend({},\n {\n markers: markersOptions,\n labels: options.labels,\n rtl: chartService.rtl,\n line: $.extend({}, {dashType: dashType},\n options.line),\n area: $.extend({}, {opacity: opacity},\n options.area),\n opacity: opacity,\n accessibility: options.accessibility\n },\n options.item,\n legendItem,\n dataItem,\n { markers: options.markers }\n );\n\n innerElement.append(new LegendItem(itemOptions));\n }\n\n innerElement.render();\n this.itemsContainer.append(innerElement);\n },\n\n isVertical: function() {\n var ref = this.options;\n var orientation = ref.orientation;\n var position = ref.position;\n var vertical = (position === CUSTOM && orientation !== datavizConstants.HORIZONTAL) ||\n (defined(orientation) ? orientation !== datavizConstants.HORIZONTAL : inArray(position, [ LEFT, RIGHT ]));\n\n return vertical;\n },\n\n hasItems: function() {\n return this.container.children[0].children.length > 0;\n },\n\n getItems: function() {\n return this.itemsContainer.children[0].children;\n },\n\n reflow: function(targetBox) {\n var options = this.options;\n var legendBox = targetBox.clone();\n\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n\n if (this.hasTitle()) {\n this.title.reflow(new Box(this.container.box.x1, this.title.box.y1, this.container.box.x2, this.title.box.y2));\n }\n },\n\n containerReflow: function(targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var position = options.position;\n var width = options.width;\n var height = options.height;\n var pos = position === TOP || position === BOTTOM ? X : Y;\n var vertical = this.isVertical();\n var alignTarget = targetBox.clone();\n var containerBox = targetBox.clone();\n\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\n\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n containerBox.align(alignTarget, Y, container.options.vAlign);\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n containerBox.align(alignTarget, X, container.options.align);\n }\n\n container.reflow(containerBox);\n containerBox = container.box;\n\n var box = containerBox.clone();\n\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n container.reflow(containerBox);\n }\n\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n\n this.box = box;\n },\n\n containerCustomReflow: function(targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var offsetX = options.offsetX;\n var offsetY = options.offsetY;\n var width = options.width;\n var height = options.height;\n var vertical = this.isVertical();\n var containerBox = targetBox.clone();\n\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n }\n container.reflow(containerBox);\n containerBox = container.box;\n\n container.reflow(new Box(\n offsetX, offsetY,\n offsetX + containerBox.width(), offsetY + containerBox.height()\n ));\n },\n\n renderVisual: function() {\n if (this.hasItems()) {\n ChartElement.fn.renderVisual.call(this);\n }\n },\n\n createLegendTitle: function(title) {\n var titleOptions = deepExtend({}, {\n color: BLACK,\n position: TOP,\n align: CENTER\n }, title);\n var text = titleOptions.text;\n\n if (!title || title.visible === false || !title.text) {\n return;\n }\n\n if (defined(titleOptions) && titleOptions.visible) {\n var labelTemplate = getTemplate(titleOptions);\n if (labelTemplate) {\n text = labelTemplate({ text: text });\n } else if (titleOptions.format) {\n text = this.chartService.format.auto(titleOptions.format, text);\n }\n }\n\n this.title = new TextBox(text, titleOptions);\n\n this.createTitleLayout();\n\n this.appendTitleLayoutContent();\n },\n\n createTitleLayout: function() {\n this.layout = new dataviz.FloatElement({\n vertical: true,\n wrap: false\n });\n\n this.container.append(this.layout);\n },\n\n hasTitle: function() {\n return Boolean(this.options.title && this.options.title.visible !== false && this.options.title.text);\n },\n\n appendTitleLayoutContent: function() {\n var options = this.options;\n\n if (options.title.position === BOTTOM) {\n this.layout.append(this.itemsContainer);\n this.layout.append(this.title);\n } else {\n this.layout.append(this.title);\n this.layout.append(this.itemsContainer);\n }\n }\n });\n\n setDefaultOptions(Legend, {\n position: RIGHT,\n data: [],\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(2),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: datavizConstants.POINTER,\n spacing: 6\n },\n spacing: 6,\n background: \"\",\n zIndex: 1,\n markers: {},\n line: {\n width: 20,\n height: 2,\n cursor: datavizConstants.POINTER,\n opacity: 1\n },\n area: {\n type: datavizConstants.SQUARE,\n align: RIGHT,\n width: 15,\n height: 15,\n }\n });\n\n var PlotAreaFactory = Class.extend({\n init: function() {\n\n this._registry = [];\n },\n\n register: function(type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n },\n\n create: function(srcSeries, options, chartService) {\n var registry = this._registry;\n var match = registry[0];\n var series;\n\n for (var idx = 0; idx < registry.length; idx++) {\n var entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n var trendlines = filterSeriesByType(srcSeries, TRENDLINE_SERIES);\n\n if ((series.length - trendlines.length) > 0) {\n match = entry;\n break;\n }\n }\n\n return new match.type(series, options, chartService);\n }\n });\n\n PlotAreaFactory.current = new PlotAreaFactory();\n\n var ZOOM_ACCELERATION = 3;\n var SELECTOR_HEIGHT_ADJUST = 0.1;\n\n function createDiv(classNames) {\n var element = document.createElement(\"div\");\n if (classNames) {\n element.className = classNames;\n }\n\n return element;\n }\n\n function closestHandle(element) {\n var current = element;\n while (current && !dataviz.hasClasses(current, \"k-handle\")) {\n current = current.parentNode;\n }\n\n return current;\n }\n\n var Selection = Class.extend({\n init: function(chart, categoryAxis, options, observer) {\n\n var chartElement = chart.element;\n\n this.options = deepExtend({}, this.options, options);\n this.chart = chart;\n this.observer = observer;\n this.chartElement = chartElement;\n this.categoryAxis = categoryAxis;\n this._dateAxis = this.categoryAxis instanceof dataviz.DateCategoryAxis;\n\n this.initOptions();\n\n this.visible = this.options.visible && chartElement.offsetHeight;\n\n if (this.visible) {\n this.createElements();\n\n this.set(this._index(this.options.from), this._index(this.options.to));\n\n this.bindEvents();\n }\n },\n\n onPane: function(pane) {\n return this.categoryAxis.pane === pane;\n },\n\n createElements: function() {\n var options = this.options;\n var wrapper = this.wrapper = createDiv(\"k-selector k-pointer-events-none\");\n elementStyles(wrapper, {\n top: options.offset.top,\n left: options.offset.left,\n width: options.width,\n height: options.height,\n direction: 'ltr'\n });\n\n var selection = this.selection = createDiv(\"k-selection k-pointer-events-none\");\n\n this.leftMask = createDiv(\"k-mask k-pointer-events-none\");\n this.rightMask = createDiv(\"k-mask k-pointer-events-none\");\n\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n\n var body = this.body = createDiv(\"k-selection-bg k-pointer-events-none\");\n selection.appendChild(body);\n\n var leftHandle = this.leftHandle = createDiv(\"k-handle k-left-handle k-pointer-events-auto\");\n var rightHandle = this.rightHandle = createDiv(\"k-handle k-right-handle k-pointer-events-auto\");\n leftHandle.appendChild(createDiv());\n rightHandle.appendChild(createDiv());\n\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n\n this.chartElement.appendChild(wrapper);\n var selectionStyles = elementStyles(selection, [ \"borderLeftWidth\", \"borderRightWidth\", \"height\" ]);\n var leftHandleHeight = elementStyles(leftHandle, \"height\").height;\n var rightHandleHeight = elementStyles(rightHandle, \"height\").height;\n\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n\n elementStyles(leftHandle, {\n top: (selectionStyles.height - leftHandleHeight) / 2\n });\n\n elementStyles(rightHandle, {\n top: (selectionStyles.height - rightHandleHeight) / 2\n });\n\n /* eslint no-self-assign: \"off\" */\n wrapper.style.cssText = wrapper.style.cssText;\n },\n\n bindEvents: function() {\n if (this.options.mousewheel !== false) {\n this._mousewheelHandler = this._mousewheel.bind(this);\n var obj;\n bindEvents(this.chartElement, ( obj = {}, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj ));\n }\n\n this._domEvents = services.DomEventsBuilder.create(this.chartElement, {\n stopPropagation: true, // applicable for the jQuery UserEvents\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n press: this._press.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n },\n\n initOptions: function() {\n var ref = this;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var box = categoryAxis.pane.chartsBox();\n var intlService = this.chart.chartService.intl;\n\n if (this._dateAxis) {\n deepExtend(options, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n from: parseDate(intlService, options.from),\n to: parseDate(intlService, options.to)\n });\n }\n\n var ref$1 = elementStyles(this.chartElement, [ \"paddingLeft\", \"paddingTop\" ]);\n var paddingLeft = ref$1.paddingLeft;\n var paddingTop = ref$1.paddingTop;\n\n this.options = deepExtend({}, {\n width: box.width(),\n height: box.height() + SELECTOR_HEIGHT_ADJUST, //workaround for sub-pixel hover on the paths in chrome\n padding: {\n left: paddingLeft,\n top: paddingTop\n },\n offset: {\n left: box.x1 + paddingLeft,\n top: box.y1 + paddingTop\n },\n from: options.min,\n to: options.max\n }, options);\n },\n\n destroy: function() {\n if (this._domEvents) {\n this._domEvents.destroy();\n delete this._domEvents;\n }\n\n clearTimeout(this._mwTimeout);\n this._state = null;\n\n if (this.wrapper) {\n if (this._mousewheelHandler) {\n var obj;\n unbindEvents(this.chartElement, ( obj = {}, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj ));\n this._mousewheelHandler = null;\n }\n\n this.chartElement.removeChild(this.wrapper);\n this.wrapper = null;\n }\n },\n\n _rangeEventArgs: function(range) {\n\n return {\n axis: this.categoryAxis.options,\n from: this._value(range.from),\n to: this._value(range.to)\n };\n },\n\n _pointInPane: function(x, y) {\n var paneBox = this.categoryAxis.pane.box;\n var modelCoords = this.chart._toModelCoordinates(x, y);\n return paneBox.containsPoint(modelCoords);\n },\n\n _start: function(e) {\n var options = this.options;\n var target = eventElement(e);\n if (this._state || !target) {\n return;\n }\n\n var coords = dataviz.eventCoordinates(e);\n var inPane = this._pointInPane(coords.x, coords.y);\n if (!inPane) {\n return;\n }\n\n var handle = closestHandle(target);\n var bodyRect = this.body.getBoundingClientRect();\n var inBody = !handle && coords.x >= bodyRect.x && coords.x <= bodyRect.x + bodyRect.width &&\n coords.y >= bodyRect.y && coords.y <= bodyRect.y + bodyRect.height;\n\n this.chart._unsetActivePoint();\n this._state = {\n moveTarget: handle,\n startLocation: e.x ? e.x.location : 0,\n inBody: inBody,\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n\n var args = this._rangeEventArgs({\n from: this._index(options.from),\n to: this._index(options.to)\n });\n\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n }\n },\n\n _press: function(e) {\n var handle;\n if (this._state) {\n handle = this._state.moveTarget;\n } else {\n handle = closestHandle(eventElement(e));\n }\n if (handle) {\n dataviz.addClass(handle, \"k-handle-active\");\n }\n },\n\n _move: function(e) {\n if (!this._state) {\n return;\n }\n\n var ref = this;\n var state = ref._state;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var range = state.range;\n var target = state.moveTarget;\n var reverse = categoryAxis.options.reverse;\n var from = this._index(options.from);\n var to = this._index(options.to);\n var min = this._index(options.min);\n var max = this._index(options.max);\n var delta = state.startLocation - e.x.location;\n var oldRange = { from: range.from, to: range.to };\n var span = range.to - range.from;\n var scale = elementStyles(this.wrapper, \"width\").width / (categoryAxis.categoriesCount() - 1);\n var offset = Math.round(delta / scale) * (reverse ? -1 : 1);\n\n if (!target && !state.inBody) {\n return;\n }\n\n var leftHandle = target && dataviz.hasClasses(target, \"k-left-handle\");\n var rightHandle = target && dataviz.hasClasses(target, \"k-right-handle\");\n\n if (state.inBody) {\n range.from = Math.min(\n Math.max(min, from - offset),\n max - span\n );\n range.to = Math.min(\n range.from + span,\n max\n );\n } else if ((leftHandle && !reverse) || (rightHandle && reverse)) {\n range.from = Math.min(\n Math.max(min, from - offset),\n max - 1\n );\n range.to = Math.max(range.from + 1, range.to);\n } else if ((leftHandle && reverse) || (rightHandle && !reverse)) {\n range.to = Math.min(\n Math.max(min + 1, to - offset),\n max\n );\n range.from = Math.min(range.to - 1, range.from);\n }\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n }\n },\n\n _end: function() {\n if (this._state) {\n var moveTarget = this._state.moveTarget;\n if (moveTarget) {\n dataviz.removeClass(moveTarget, \"k-handle-active\");\n }\n\n var range = this._state.range;\n this.set(range.from, range.to);\n this.trigger(SELECT_END, this._rangeEventArgs(range));\n\n delete this._state;\n }\n },\n\n _tap: function(e) {\n var ref = this;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var coords = this.chart._eventCoordinates(e);\n var categoryIx = categoryAxis.pointCategoryIndex(new Point(coords.x, categoryAxis.box.y1));\n var from = this._index(options.from);\n var to = this._index(options.to);\n var min = this._index(options.min);\n var max = this._index(options.max);\n var span = to - from;\n var mid = from + span / 2;\n var range = {};\n var rightClick = e.event.which === 3;\n var offset = Math.round(mid - categoryIx);\n\n if (this._state || rightClick) {\n return;\n }\n\n this.chart._unsetActivePoint();\n\n if (!categoryAxis.options.justified) {\n offset--;\n }\n\n range.from = Math.min(\n Math.max(min, from - offset),\n max - span\n );\n\n range.to = Math.min(range.from + span, max);\n\n this._start(e);\n\n if (this._state) {\n this._state.range = range;\n this.trigger(SELECT, this._rangeEventArgs(range));\n this._end();\n }\n },\n\n _mousewheel: function(e) {\n var this$1$1 = this;\n\n var delta = dataviz.mousewheelDelta(e);\n\n this._start(e);\n\n if (this._state) {\n var range = this._state.range;\n\n e.preventDefault();\n e.stopPropagation();\n\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n\n if (this.options.mousewheel.reverse) {\n delta *= -1;\n }\n\n if (this.expand(delta)) {\n this.trigger(SELECT, {\n axis: this.categoryAxis.options,\n delta: delta,\n originalEvent: e,\n from: this._value(range.from),\n to: this._value(range.to)\n });\n }\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n this._mwTimeout = setTimeout(function () {\n this$1$1._end();\n }, MOUSEWHEEL_DELAY);\n }\n },\n\n _gesturestart: function(e) {\n var options = this.options;\n var touch = e.touches[0];\n var inPane = this._pointInPane(touch.pageX, touch.pageY);\n\n if (!inPane) {\n return;\n }\n\n this._state = {\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n var args = this._rangeEventArgs(this._state.range);\n\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n } else {\n e.preventDefault();\n }\n },\n\n _gestureend: function() {\n if (this._state) {\n this.trigger(SELECT_END, this._rangeEventArgs(this._state.range));\n delete this._state;\n }\n },\n\n _gesturechange: function(e) {\n if (!this._state) {\n return;\n }\n\n var ref = this;\n var chart = ref.chart;\n var state = ref._state;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var range = state.range;\n var p0 = chart._toModelCoordinates(e.touches[0].x.location).x;\n var p1 = chart._toModelCoordinates(e.touches[1].x.location).x;\n var left = Math.min(p0, p1);\n var right = Math.max(p0, p1);\n\n e.preventDefault();\n\n range.from = categoryAxis.pointCategoryIndex(new Point(left)) || options.min;\n\n range.to = categoryAxis.pointCategoryIndex(new Point(right)) || options.max;\n\n this.move(range.from, range.to);\n\n this.trigger(SELECT, this._rangeEventArgs(range));\n },\n\n _index: function(value) {\n var index = value;\n\n if (value instanceof Date) {\n index = this.categoryAxis.categoryIndex(value);\n }\n\n return index;\n },\n\n _value: function(index) {\n var value = index;\n if (this._dateAxis) {\n value = this.categoryAxis.categoryAt(index);\n if (value > this.options.max) {\n value = this.options.max;\n }\n }\n\n return value;\n },\n\n _slot: function(value) {\n var categoryAxis = this.categoryAxis;\n var index = this._index(value);\n\n return categoryAxis.getSlot(index, index, true);\n },\n\n move: function(from, to) {\n var options = this.options;\n var reverse = this.categoryAxis.options.reverse;\n var offset = options.offset;\n var padding = options.padding;\n var border = options.selection.border;\n var left = reverse ? to : from;\n var right = reverse ? from : to;\n var edge = 'x' + (reverse ? 2 : 1);\n\n var box = this._slot(left);\n var leftMaskWidth = round(box[edge] - offset.left + padding.left);\n\n elementStyles(this.leftMask, {\n width: leftMaskWidth\n });\n elementStyles(this.selection, {\n left: leftMaskWidth\n });\n\n box = this._slot(right);\n\n var rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n elementStyles(this.rightMask, {\n width: rightMaskWidth\n });\n\n var distance = options.width - rightMaskWidth;\n if (distance !== options.width) {\n distance += border.right;\n }\n\n elementStyles(this.rightMask, {\n left: distance\n });\n elementStyles(this.selection, {\n width: Math.max(options.width - (leftMaskWidth + rightMaskWidth) - border.right, 0)\n });\n },\n\n set: function(from, to) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var fromValue = limitValue(this._index(from), min, max);\n var toValue = limitValue(this._index(to), fromValue + 1, max);\n\n if (options.visible) {\n this.move(fromValue, toValue);\n }\n\n options.from = this._value(fromValue);\n options.to = this._value(toValue);\n },\n\n expand: function(delta) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var zDir = options.mousewheel.zoom;\n var from = this._index(options.from);\n var to = this._index(options.to);\n var range = { from: from, to: to };\n var oldRange = deepExtend({}, range);\n\n if (this._state) {\n range = this._state.range;\n }\n\n if (zDir !== RIGHT) {\n range.from = limitValue(\n limitValue(from - delta, 0, to - 1),\n min, max\n );\n }\n\n if (zDir !== LEFT) {\n range.to = limitValue(\n limitValue(to + delta, range.from + 1, max),\n min,\n max\n );\n }\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n },\n\n zoom: function(delta, coords) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var from = this._index(options.from);\n var to = this._index(options.to);\n var range = { from: from, to: to };\n var oldRange = deepExtend({}, range);\n\n var ref = this.categoryAxis.options;\n var reverse = ref.reverse;\n var origin = X + (reverse ? '2' : '1');\n var lineBox = this.categoryAxis.lineBox();\n var relative = Math.abs(lineBox[origin] - coords[X]);\n var size = lineBox.width();\n var position = round(relative / size, 2);\n var minDelta = round(position * delta);\n var maxDelta = round((1 - position) * delta);\n\n if (this._state) {\n range = this._state.range;\n }\n\n range.from = limitValue(\n limitValue(from - minDelta, 0, to - 1),\n min, max\n );\n\n range.to = limitValue(\n limitValue(to + maxDelta, range.from + 1, max),\n min,\n max\n );\n\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n },\n\n trigger: function(name, args) {\n return (this.observer || this.chart).trigger(name, args);\n }\n });\n\n setDefaultOptions(Selection, {\n visible: true,\n mousewheel: {\n zoom: \"both\"\n },\n min: MIN_VALUE,\n max: MAX_VALUE\n });\n\n var Tooltip = BaseTooltip.extend({\n show: function(point) {\n if (!point || !point.tooltipAnchor || (this._current && this._current === point)) {\n return;\n }\n\n var options = deepExtend({}, this.options, point.options.tooltip);\n var anchor = point.tooltipAnchor();\n\n if (anchor) {\n this._current = point;\n BaseTooltip.fn.show.call(this, {\n point: point,\n anchor: anchor\n }, options, point);\n } else {\n this.hide();\n }\n },\n\n hide: function() {\n delete this._current;\n BaseTooltip.fn.hide.call(this);\n }\n });\n\n var SharedTooltip = BaseTooltip.extend({\n init: function(plotArea, options) {\n BaseTooltip.fn.init.call(this, plotArea.chartService, options);\n\n this.plotArea = plotArea;\n this.formatService = plotArea.chartService.format;\n },\n\n showAt: function(points, coords) {\n var tooltipPoints = grep(points, function(point) {\n var tooltip = point.series.tooltip;\n var excluded = tooltip && tooltip.visible === false;\n\n return !excluded;\n });\n\n if (tooltipPoints.length > 0) {\n var point = tooltipPoints[0];\n var slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n\n var anchor = coords ? this._slotAnchor(coords, slot) : this._defaultAnchor(point, slot);\n\n this.show({\n anchor: anchor,\n shared: true,\n points: points,\n category: point.category,\n categoryText: this.formatService.auto(this.options.categoryFormat, point.category),\n series: this.plotArea.series\n }, this.options);\n }\n },\n\n _slotAnchor: function(point, slot) {\n var axis = this.plotArea.categoryAxis;\n var align = {\n horizontal: \"left\",\n vertical: \"center\"\n };\n\n if (!axis.options.vertical) {\n point.x = slot.center().x;\n }\n\n return {\n point: point,\n align: align\n };\n },\n\n _defaultAnchor: function(point, slot) {\n var box = point.owner.pane.chartsBox();\n var vertical = this.plotArea.categoryAxis.options.vertical;\n var center = box.center();\n var slotCenter = slot.center();\n var align = {\n horizontal: \"center\",\n vertical: \"center\"\n };\n\n var centerPoint;\n if (vertical) {\n centerPoint = new Point(center.x, slotCenter.y);\n } else {\n centerPoint = new Point(slotCenter.x, center.y);\n }\n\n return {\n point: centerPoint,\n align: align\n };\n }\n });\n\n setDefaultOptions(SharedTooltip, {\n categoryFormat: '{0:d}'\n });\n\n var BarChartAnimation = Animation.extend({\n setup: function() {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var bbox = element.bbox();\n\n if (bbox) {\n this.origin = options.origin;\n var axis = options.vertical ? Y : X;\n\n var fromScale = this.fromScale = new GeometryPoint(1, 1);\n fromScale[axis] = START_SCALE;\n\n element.transform(transform()\n .scale(fromScale.x, fromScale.y)\n );\n } else {\n this.abort();\n }\n },\n\n step: function(pos) {\n var scaleX = dataviz.interpolateValue(this.fromScale.x, 1, pos);\n var scaleY = dataviz.interpolateValue(this.fromScale.y, 1, pos);\n\n this.element.transform(transform()\n .scale(scaleX, scaleY, this.origin)\n );\n },\n\n abort: function() {\n Animation.fn.abort.call(this);\n this.element.transform(null);\n }\n });\n\n setDefaultOptions(BarChartAnimation, {\n duration: INITIAL_ANIMATION_DURATION\n });\n\n AnimationFactory.current.register(BAR, BarChartAnimation);\n\n var BubbleAnimation = Animation.extend({\n setup: function() {\n var center = this.center = this.element.bbox().center();\n this.element.transform(transform()\n .scale(START_SCALE, START_SCALE, center)\n );\n },\n\n step: function(pos) {\n this.element.transform(transform()\n .scale(pos, pos, this.center)\n );\n }\n });\n\n setDefaultOptions(BubbleAnimation, {\n easing: \"easeOutElastic\"\n });\n\n AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n\n var FadeInAnimation = Animation.extend({\n setup: function() {\n this.fadeTo = this.element.opacity();\n this.element.opacity(0);\n },\n\n step: function(pos) {\n this.element.opacity(pos * this.fadeTo);\n }\n });\n\n setDefaultOptions(FadeInAnimation, {\n duration: 200,\n easing: \"linear\"\n });\n\n AnimationFactory.current.register(FADEIN, FadeInAnimation);\n\n var PieAnimation = Animation.extend({\n setup: function() {\n this.element.transform(transform()\n .scale(START_SCALE, START_SCALE, this.options.center)\n );\n },\n\n step: function(pos) {\n this.element.transform(transform()\n .scale(pos, pos, this.options.center)\n );\n }\n });\n\n setDefaultOptions(PieAnimation, {\n easing: \"easeOutElastic\",\n duration: INITIAL_ANIMATION_DURATION\n });\n\n AnimationFactory.current.register(PIE, PieAnimation);\n\n var ScatterLineChart = ScatterChart.extend({\n render: function() {\n ScatterChart.fn.render.call(this);\n\n this.renderSegments();\n },\n\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n\n animationPoints: function() {\n var points = ScatterChart.fn.animationPoints.call(this);\n return points.concat(this._segments);\n },\n\n createMissingValue: function(value, missingValues) {\n if (missingValues === ZERO) {\n var missingValue = {\n x: value.x,\n y: value.y\n };\n if (!hasValue(missingValue.x)) {\n missingValue.x = 0;\n }\n if (!hasValue(missingValue.y)) {\n missingValue.y = 0;\n }\n return missingValue;\n }\n }\n });\n\n deepExtend(ScatterLineChart.prototype, LineChartMixin);\n\n function autoMajorUnit(min, max) {\n var diff = round(max - min, DEFAULT_PRECISION - 1);\n\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n\n diff = Math.abs(max);\n }\n\n var scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n var relativeValue = round((diff / scale), DEFAULT_PRECISION);\n var scaleMultiplier = 1;\n\n if (relativeValue < 1.904762) {\n scaleMultiplier = 0.2;\n } else if (relativeValue < 4.761904) {\n scaleMultiplier = 0.5;\n } else if (relativeValue < 9.523809) {\n scaleMultiplier = 1;\n } else {\n scaleMultiplier = 2;\n }\n\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n }\n\n function getScatterTrendlineData(valueMapper, range, options) {\n var data = [];\n var xMin = range.xMin;\n var xMax = range.xMax;\n\n var forecast = (options || {}).forecast;\n if (forecast) {\n if (forecast.before > 0) {\n xMin -= forecast.before;\n }\n\n if (forecast.after > 0) {\n xMax += forecast.after;\n }\n }\n\n var samplingInterval = (options || {}).samplingInterval;\n var delta = valueOrDefault(samplingInterval, autoMajorUnit(xMin, xMax) / 10);\n if (samplingInterval <= 0) {\n delta = xMax - xMin;\n }\n\n for (var x = xMin; x <= xMax; x += delta) {\n data.push([\n x,\n valueMapper(x)\n ]);\n }\n\n return data;\n }\n\n function scatterExponentialTrendline(context) {\n var options = context.options;\n var seriesValues = context.seriesValues;\n\n var data = getData$6({ seriesValues: seriesValues, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'scatterLine',\n data: data});\n }\n\n return null;\n }\n\n var valueGetter$6 = function (fieldName) { return function (ref) {\n var valueFields = ref.valueFields;\n\n return ({ xValue: valueFields.x, yValue: Math.log(valueFields[fieldName]) });\n } };\n\n function getData$6(ref) {\n var seriesValues = ref.seriesValues;\n var options = ref.options;\n\n var sourceValues = seriesValues();\n if (!checkAllPositive(sourceValues, options.field)) {\n return null;\n }\n\n var ref$1 = calculateSlope(sourceValues, valueGetter$6(options.field));\n var slope = ref$1.slope;\n var intercept = ref$1.intercept;\n var count = ref$1.count;\n var xMin = ref$1.xMin;\n var xMax = ref$1.xMax;\n var range = { xMin: xMin, xMax: xMax };\n\n if (count > 0) {\n // Exponential trendline equation:\n // y = a * e ^ (b * x)\n var a = Math.exp(intercept);\n var b = slope;\n\n return getScatterTrendlineData(function (x) { return a * Math.exp(b * x); }, range, options.trendline);\n }\n\n return null;\n }\n\n var scatterValueGetter = function (fieldName) { return function (ref) {\n var valueFields = ref.valueFields;\n\n return ({ xValue: valueFields.x, yValue: valueFields[fieldName] });\n } };\n\n function scatterLinearTrendline(context) {\n var options = context.options;\n var seriesValues = context.seriesValues;\n\n var data = getData$7({ seriesValues: seriesValues, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'scatterLine',\n data: data});\n }\n\n return null;\n }\n\n function getData$7(ref) {\n var seriesValues = ref.seriesValues;\n var options = ref.options;\n\n var ref$1 = calculateSlope(seriesValues(), scatterValueGetter(options.field));\n var slope = ref$1.slope;\n var intercept = ref$1.intercept;\n var count = ref$1.count;\n var xMin = ref$1.xMin;\n var xMax = ref$1.xMax;\n var range = { xMin: xMin, xMax: xMax };\n\n if (count > 0) {\n return getScatterTrendlineData(function (x) { return slope * x + intercept; }, range, options.trendline);\n }\n\n return null;\n }\n\n function xValueLimits(sourceValues, valueGetter) {\n var xMin = Number.MAX_VALUE;\n var xMax = Number.MIN_VALUE;\n\n for (var i = 0; i < sourceValues.length; i++) {\n var value = sourceValues[i];\n var ref = valueGetter(value);\n var xValue = ref.xValue;\n var yValue = ref.yValue;\n\n if (isFinite(xValue) && xValue !== null && isFinite(yValue) && yValue !== null) {\n xMin = Math.min(xValue, xMin);\n xMax = Math.max(xValue, xMax);\n }\n }\n\n return { xMin: xMin, xMax: xMax };\n }\n\n function scatterLogarithmicTrendline(context) {\n var options = context.options;\n var seriesValues = context.seriesValues;\n\n var data = getData$8({ seriesValues: seriesValues, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'scatterLine',\n data: data});\n }\n\n return null;\n }\n\n var valueGetter$7 = function (fieldName) { return function (ref) {\n var valueFields = ref.valueFields;\n\n return ({ xValue: valueFields.x, yValue: valueFields[fieldName] });\n } };\n\n var logValueGetter = function (fieldName) { return function (ref) {\n var valueFields = ref.valueFields;\n\n return ({ xValue: Math.log(valueFields.x), yValue: valueFields[fieldName] });\n } };\n\n function getData$8(ref) {\n var seriesValues = ref.seriesValues;\n var options = ref.options;\n\n var sourceValues = seriesValues();\n if (!checkAllPositive(sourceValues, 'x')) {\n return null;\n }\n\n var ref$1 = calculateSlope(sourceValues, logValueGetter(options.field));\n var slope = ref$1.slope;\n var intercept = ref$1.intercept;\n var count = ref$1.count;\n var range = xValueLimits(sourceValues, valueGetter$7(options.field));\n\n if (count > 0) {\n // Logarithmic trendline equation:\n // y = a * ln (x) + b\n var a = slope;\n var b = intercept;\n\n return getScatterTrendlineData(function (x) { return a * Math.log(x) + b; }, range, options.trendline);\n }\n\n return null;\n }\n\n function scatterMovingAverageTrendline(context) {\n var options = context.options;\n\n var data = getData$9(context);\n if (data) {\n return $.extend({}, options,\n\n {type: 'scatterLine',\n data: data});\n }\n\n return null;\n }\n\n function getData$9(ref) {\n var options = ref.options;\n var seriesValues = ref.seriesValues;\n\n var period = (options.trendline || {}).period || MIN_MOVING_AVERAGE_PERIOD;\n var range = { before: period, after: period };\n var data = calculateMovingAverage(seriesValues(range), scatterValueGetter(options.field), period);\n\n if (data.length > 0) {\n return data;\n }\n\n return null;\n }\n\n function scatterPolynomialTrendline(context) {\n var options = context.options;\n var seriesValues = context.seriesValues;\n\n var data = getData$10({ seriesValues: seriesValues, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'scatterLine',\n data: data});\n }\n\n return null;\n }\n\n function getData$10(ref) {\n var seriesValues = ref.seriesValues;\n var options = ref.options;\n\n var order = (options.trendline || {}).order;\n var valueGetter = scatterValueGetter(options.field);\n var ref$1 = calculatePolynomial(seriesValues(), valueGetter, order);\n var count = ref$1.count;\n var valueMapper = ref$1.valueMapper;\n var xMin = ref$1.xMin;\n var xMax = ref$1.xMax;\n var range = { xMin: xMin, xMax: xMax };\n\n if (count > 0) {\n // Polynomial trendline equation:\n // y = aN * x^N + ... + a2 * x^2 + a1 * x + a0\n return getScatterTrendlineData(valueMapper, range, options.trendline);\n }\n\n return null;\n }\n\n function scatterPowerTrendline(context) {\n var options = context.options;\n var seriesValues = context.seriesValues;\n\n var data = getData$11({ seriesValues: seriesValues, options: options });\n if (data) {\n return $.extend({}, options,\n\n {type: 'scatterLine',\n data: data});\n }\n\n return null;\n }\n\n var valueGetter$8 = function (fieldName) { return function (ref) {\n var valueFields = ref.valueFields;\n\n return ({ xValue: Math.log(valueFields.x), yValue: Math.log(valueFields[fieldName]) });\n } };\n\n function getData$11(ref) {\n var seriesValues = ref.seriesValues;\n var options = ref.options;\n\n var sourceValues = seriesValues();\n if (!checkAllPositive(sourceValues, 'x')) {\n return null;\n }\n\n var ref$1 = calculateSlope(sourceValues, valueGetter$8(options.field));\n var slope = ref$1.slope;\n var intercept = ref$1.intercept;\n var count = ref$1.count;\n var range = xValueLimits(sourceValues, scatterValueGetter(options.field));\n\n if (count > 0) {\n // Power trendline equation:\n // y = a * x ^ b\n var a = Math.exp(intercept);\n var b = slope;\n return getScatterTrendlineData(function (x) { return a * Math.pow(x, b); }, range, options.trendline);\n }\n\n return null;\n }\n\n var scatterRegistry = {};\n scatterRegistry[TRENDLINE_EXPONENTIAL] = scatterExponentialTrendline;\n scatterRegistry[TRENDLINE_LINEAR] = scatterLinearTrendline;\n scatterRegistry[TRENDLINE_LOGARITHMIC] = scatterLogarithmicTrendline;\n scatterRegistry[TRENDLINE_MOVING_AVERAGE] = scatterMovingAverageTrendline;\n scatterRegistry[TRENDLINE_POLYNOMIAL] = scatterPolynomialTrendline;\n scatterRegistry[TRENDLINE_POWER] = scatterPowerTrendline;\n\n var XYPlotArea = PlotAreaBase.extend({\n initFields: function() {\n this.namedXAxes = {};\n this.namedYAxes = {};\n\n this.xAxisRangeTracker = new AxisGroupRangeTracker();\n this.yAxisRangeTracker = new AxisGroupRangeTracker();\n },\n\n render: function(panes) {\n var this$1$1 = this;\n if (panes === void 0) { panes = this.panes; }\n\n this.series = [].concat( this.originalSeries );\n this.createTrendlineSeries();\n\n var seriesByPane = this.groupSeriesByPane();\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this$1$1.addToLegend(paneSeries);\n var filteredSeries = this$1$1.filterVisibleSeries(paneSeries);\n\n if (!filteredSeries) {\n continue;\n }\n\n this$1$1.createScatterChart(\n filterSeriesByType(filteredSeries, SCATTER),\n pane\n );\n\n this$1$1.createScatterLineChart(\n filterSeriesByType(filteredSeries, SCATTER_LINE),\n pane\n );\n\n this$1$1.createBubbleChart(\n filterSeriesByType(filteredSeries, BUBBLE),\n pane\n );\n }\n\n this.createAxes(panes);\n },\n\n appendChart: function(chart, pane) {\n this.xAxisRangeTracker.update(chart.xAxisRanges);\n this.yAxisRangeTracker.update(chart.yAxisRanges);\n\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n\n removeAxis: function(axis) {\n var axisName = axis.options.name;\n\n PlotAreaBase.fn.removeAxis.call(this, axis);\n\n if (axis.options.vertical) {\n this.yAxisRangeTracker.reset(axisName);\n delete this.namedYAxes[axisName];\n } else {\n this.xAxisRangeTracker.reset(axisName);\n delete this.namedXAxes[axisName];\n }\n\n if (axis === this.axisX) {\n delete this.axisX;\n }\n\n if (axis === this.axisY) {\n delete this.axisY;\n }\n },\n\n seriesPaneName: function(series) {\n var options = this.options;\n var xAxisName = series.xAxis;\n var xAxisOptions = [].concat(options.xAxis);\n var xAxis = grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n var panes = options.panes || [ {} ];\n var defaultPaneName = panes[0].name || \"default\";\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n return paneName;\n },\n\n createScatterChart: function(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new ScatterChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n },\n\n createScatterLineChart: function(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new ScatterLineChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n },\n\n createBubbleChart: function(series, pane) {\n if (series.length > 0) {\n this.appendChart(\n new BubbleChart(this, { series: series, clip: pane.options.clip }),\n pane\n );\n }\n },\n\n createXYAxis: function(options, vertical, axisIndex) {\n var axisName = options.name;\n var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n var tracker = vertical ? this.yAxisRangeTracker : this.xAxisRangeTracker;\n var axisOptions = deepExtend({ reverse: !vertical && this.chartService.rtl }, options, { vertical: vertical });\n var isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC);\n var defaultRange = tracker.query();\n var defaultAxisRange = isLog ? { min: 0.1, max: 1 } : { min: 0, max: 1 };\n var range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n var typeSamples = [ axisOptions.min, axisOptions.max ];\n var series = this.series;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n if ((seriesAxisName === axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n var firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\n\n break;\n }\n }\n\n if (axisIndex === 0 && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n var inferredDate;\n\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n\n var axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n axisType = dataviz.DateValueAxis;\n } else if (isLog) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n\n var axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error(((vertical ? \"Y\" : \"X\") + \" axis with name \" + axisName + \" is already defined\"));\n }\n namedAxes[axisName] = axis;\n }\n\n this.appendAxis(axis);\n\n return axis;\n },\n\n createAxes: function(panes) {\n var this$1$1 = this;\n\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n },\n\n _dispatchEvent: function(chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var allAxes = this.axes;\n var length = allAxes.length;\n var xValues = [];\n var yValues = [];\n\n for (var i = 0; i < length; i++) {\n var axis = allAxes[i];\n var values = axis.options.vertical ? yValues : xValues;\n var currentValue = axis.getValue(point);\n if (currentValue !== null) {\n values.push(currentValue);\n }\n }\n\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n },\n\n updateAxisOptions: function(axis, options) {\n var vertical = axis.options.vertical;\n var axes = this.groupAxes(this.panes);\n var index = (vertical ? axes.y : axes.x).indexOf(axis);\n\n updateAxisOptions$1(this.options, index, vertical, options);\n updateAxisOptions$1(this.originalOptions, index, vertical, options);\n },\n\n trendlineFactory: function(options, series) {\n var seriesValues = this.seriesValues.bind(this, series.index);\n\n var trendline = trendlineFactory(scatterRegistry, options.type, {\n options: options,\n seriesValues: seriesValues\n });\n\n if (trendline) {\n // Inherit settings\n trendline.xAxis = series.xAxis;\n trendline.yAxis = series.yAxis;\n }\n\n return trendline;\n },\n\n seriesValues: function(seriesIx) {\n var this$1$1 = this;\n\n var result = [];\n var currentSeries = this.series[seriesIx];\n\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var data = this$1$1.bindPoint(currentSeries, pointIx);\n result.push({ pointIx: pointIx, valueFields: data.valueFields });\n }\n\n return result;\n }\n });\n\n function updateAxisOptions$1(targetOptions, axisIndex, vertical, options) {\n var axisOptions = ([].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis))[axisIndex];\n deepExtend(axisOptions, options);\n }\n\n setDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n\n deepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n\n var PieSegment = ChartElement.extend({\n init: function(value, sector, options) {\n ChartElement.fn.init.call(this, options);\n\n this.value = value;\n this.sector = sector;\n },\n\n render: function() {\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n\n this.createLabel();\n },\n\n createLabel: function() {\n var labels = this.options.labels;\n var chartService = this.owner.chartService;\n var labelText = this.getLabelText(labels);\n\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n labels.color = autoTextColor(this.options.color);\n }\n if (!labels.background) {\n labels.background = this.options.color;\n }\n } else {\n var themeLabels = chartService.theme.seriesDefaults.labels;\n labels.color = labels.color || themeLabels.color;\n labels.background = labels.background || themeLabels.background;\n }\n\n this.label = new TextBox(labelText, deepExtend({}, labels, {\n align: CENTER,\n vAlign: \"\",\n animation: {\n type: FADEIN,\n delay: this.animationDelay\n }\n }), this.pointData());\n\n this.append(this.label);\n }\n },\n\n getLabelText: function(options) {\n var labelTemplate = getTemplate(options);\n\n if (labelTemplate) {\n return labelTemplate(this.pointData());\n }\n\n return this.owner.chartService.format.auto(options.format, this.value);\n },\n\n reflow: function(targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\n },\n\n reflowLabel: function() {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var labelsDistance = labelsOptions.distance;\n var angle = sector.middle();\n\n if (label) {\n var labelHeight = label.box.height();\n var labelWidth = label.box.width();\n var lp;\n\n if (labelsOptions.position === CENTER) {\n sector.radius = Math.abs((sector.radius - labelHeight) / 2) + labelHeight;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else if (labelsOptions.position === INSIDE_END) {\n sector.radius = sector.radius - labelHeight / 2;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n var x1;\n lp = sector.clone().expand(labelsDistance).point(angle);\n if (lp.x >= sector.center.x) {\n x1 = lp.x + labelWidth;\n label.orientation = RIGHT;\n } else {\n x1 = lp.x - labelWidth;\n label.orientation = LEFT;\n }\n label.reflow(new Box(x1, lp.y - labelHeight, lp.x, lp.y));\n }\n }\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n\n ChartElement.fn.createVisual.call(this);\n\n this.addAccessibilityAttributesToVisual();\n\n if (this.value) {\n if (options.visual) {\n var startAngle = (sector.startAngle + 180) % 360;\n var visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n startAngle: startAngle,\n endAngle: startAngle + sector.angle,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n var group = new Group();\n this$1$1.createSegmentVisual(group);\n\n return group;\n }\n });\n\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\n }\n }\n },\n\n createSegmentVisual: function(group) {\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n var borderOptions = options.border || {};\n var border = borderOptions.width > 0 ? {\n stroke: {\n color: borderOptions.color,\n width: borderOptions.width,\n opacity: borderOptions.opacity,\n dashType: borderOptions.dashType\n }\n } : {};\n var color = options.color;\n var fill = {\n color: color,\n opacity: options.opacity\n };\n var visual = this.createSegment(sector, deepExtend({\n fill: fill,\n stroke: {\n opacity: options.opacity\n },\n zIndex: options.zIndex\n }, border));\n\n group.append(visual);\n\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [ sector.center.x, sector.center.y ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\n },\n\n createSegment: function(sector, options) {\n if (options.singleSegment) {\n return new Circle(new GeometryCircle(new GeometryPoint(sector.center.x, sector.center.y), sector.radius), options);\n }\n\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n },\n\n createAnimation: function() {\n var ref = this;\n var options = ref.options;\n var center = ref.sector.center;\n\n deepExtend(options, {\n animation: {\n center: [ center.x, center.y ],\n delay: this.animationDelay\n }\n });\n\n ChartElement.fn.createAnimation.call(this);\n },\n\n createHighlight: function(options) {\n var highlight = this.options.highlight || {};\n var border = highlight.border || {};\n\n return this.createSegment(this.sector, deepExtend({}, options, {\n fill: {\n color: highlight.color,\n opacity: highlight.opacity\n },\n stroke: {\n opacity: border.opacity,\n width: border.width,\n color: border.color\n }\n }));\n },\n\n highlightVisual: function() {\n return this.visual.children[0];\n },\n\n highlightVisualArgs: function() {\n var sector = this.sector;\n\n return {\n options: this.options,\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n startAngle: sector.startAngle,\n endAngle: sector.angle + sector.startAngle,\n visual: this.visual\n };\n },\n\n createFocusHighlight: function(style) {\n var borderWidth = this.options.accessibility.highlight.border.width;\n var result = this.createSegment(this.sector, deepExtend({}, style, {\n stroke: {\n width: borderWidth * 2\n }\n }));\n\n var clipPath = new MultiPath();\n\n clipPath.paths.push(Path.fromRect(result.bbox()));\n clipPath.paths.push(this.createSegment(this.sector, {}));\n\n result.clip(clipPath);\n\n return result;\n },\n\n tooltipAnchor: function() {\n var sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n pointData: function() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n };\n },\n\n getIndex: function() {\n return this.index;\n }\n });\n\n var RAD_30 = round(rad(30), DEFAULT_PRECISION);\n var RAD_60 = round(rad(60), DEFAULT_PRECISION);\n\n function tooltipAlignment(angle) {\n var radians = rad(angle);\n var sine = round(Math.sin(radians), DEFAULT_PRECISION);\n var cosine = round(Math.cos(radians), DEFAULT_PRECISION);\n\n var horizontal;\n if (Math.abs(sine) > RAD_60) {\n horizontal = CENTER;\n } else if (cosine < 0) {\n horizontal = RIGHT;\n } else {\n horizontal = LEFT;\n }\n\n var vertical;\n if (Math.abs(sine) < RAD_30) {\n vertical = CENTER;\n } else if (sine < 0) {\n vertical = BOTTOM;\n } else {\n vertical = TOP;\n }\n\n return {\n horizontal: horizontal,\n vertical: vertical\n };\n }\n\n setDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: {\n gradient: \"roundedBevel\"\n },\n border: {\n width: 0.5\n },\n labels: {\n visible: false,\n distance: 35,\n font: datavizConstants.DEFAULT_FONT,\n margin: getSpacing(0.5),\n align: CIRCLE,\n zIndex: 1,\n position: OUTSIDE_END\n },\n animation: {\n type: PIE\n },\n highlight: {\n visible: true,\n border: {\n width: 1\n }\n },\n visible: true,\n accessibility: {\n role: CHART_POINT_ROLE,\n className: CHART_POINT_CLASSNAME,\n ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n }\n });\n\n deepExtend(PieSegment.prototype, PointEventsMixin);\n deepExtend(PieSegment.prototype, AccessibilityAttributesMixin);\n\n var PieChartMixin = {\n createLegendItem: function(value, point, options) {\n var legendOptions = this.options.legend || {};\n var labelsOptions = legendOptions.labels || {};\n var inactiveItems = legendOptions.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n\n if (options && options.visibleInLegend !== false) {\n var pointVisible = options.visible !== false;\n var labelTemplate = pointVisible ? getTemplate(labelsOptions) :\n getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n var text = options.category;\n\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n series: options.series,\n dataItem: options.dataItem,\n percentage: options.percentage,\n value: value\n });\n }\n\n var itemLabelOptions, markerColor;\n if (pointVisible) {\n itemLabelOptions = {};\n markerColor = point.color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = (inactiveItems.markers || {}).color;\n }\n\n if (hasValue(text) && text !== \"\") {\n this.legendItems.push({\n active: pointVisible,\n pointIndex: options.index,\n text: text,\n series: options.series,\n markerColor: markerColor,\n labels: itemLabelOptions\n });\n }\n }\n }\n };\n\n var PIE_SECTOR_ANIM_DELAY = 70;\n\n var PieChart = ChartElement.extend({\n init: function(plotArea, options) {\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n },\n\n render: function() {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors; if (seriesColors === void 0) { seriesColors = []; }\n var colorsCount = seriesColors.length;\n var series = options.series;\n var seriesCount = series.length;\n\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var data = currentSeries.data;\n var ref$1 = bindSegments(currentSeries);\n var total = ref$1.total;\n var points = ref$1.points;\n var count = ref$1.count;\n var anglePerValue = 360 / total;\n var constantAngle = (void 0);\n if (!isFinite(anglePerValue)) {\n constantAngle = 360 / count;\n }\n var currentAngle = (void 0);\n\n if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n\n var fields = pointData.fields;\n var value = pointData.value;\n var visible = pointData.visible;\n var angle = value !== 0 ? (constantAngle || (value * anglePerValue)) : 0;\n var explode = data.length !== 1 && Boolean(fields.explode);\n\n if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n\n callback(value, new dataviz.Ring(null, 0, 0, currentAngle, angle), {\n owner: this$1$1,\n category: defined(fields.category) ? fields.category : \"\",\n index: i,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: data[i],\n percentage: total !== 0 ? value / total : 0,\n explode: explode,\n visibleInLegend: fields.visibleInLegend,\n visible: visible,\n zIndex: seriesCount - seriesIx,\n animationDelay: this$1$1.animationDelay(i, seriesIx, seriesCount)\n });\n\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n },\n\n evalSegmentOptions: function(options, value, fields) {\n var series = fields.series;\n\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, { defaults: series._defaults, excluded: [\n \"data\", \"content\", \"template\", \"visual\", \"toggle\",\n \"ariaTemplate\", \"ariaContent\"\n ] });\n },\n\n addValue: function(value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n\n this.createLegendItem(value, segmentOptions, fields);\n\n if (fields.visible === false) {\n return;\n }\n\n var segment = new PieSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n\n reflow: function(targetBox) {\n var ref = this;\n var options = ref.options;\n var points = ref.points;\n var seriesConfigs = ref.seriesConfigs; if (seriesConfigs === void 0) { seriesConfigs = []; }\n var count = points.length;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var newBox = new Box(box.x1, box.y1, box.x1 + minWidth, box.y1 + minWidth);\n var newBoxCenter = newBox.center();\n var boxCenter = box.center();\n var seriesCount = options.series.length;\n var leftSideLabels = [];\n var rightSideLabels = [];\n var padding = valueOrDefault(options.padding, defaultPadding);\n\n this.targetBox = targetBox;\n\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n\n var radius = halfMinWidth - padding;\n var center = new Point(\n radius + newBox.x1 + padding,\n radius + newBox.y1 + padding\n );\n\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var seriesIndex = segment.seriesIx;\n sector.radius = radius;\n sector.center = center;\n\n if (seriesConfigs.length) {\n var seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n\n segment.reflow(newBox);\n\n var label = segment.label;\n if (label) {\n if (label.options.position === OUTSIDE_END) {\n if (seriesIndex === seriesCount - 1) {\n if (label.orientation === RIGHT) {\n rightSideLabels.push(label);\n } else {\n leftSideLabels.push(label);\n }\n }\n }\n }\n }\n\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n\n this.box = newBox;\n },\n\n leftLabelsReflow: function(labels) {\n var distances = this.distanceBetweenLabels(labels);\n\n this.distributeLabels(distances, labels);\n },\n\n rightLabelsReflow: function(labels) {\n var distances = this.distanceBetweenLabels(labels);\n\n this.distributeLabels(distances, labels);\n },\n\n distanceBetweenLabels: function(labels) {\n var segment = last(this.points);\n var sector = segment.sector;\n var count = labels.length - 1;\n var lr = sector.radius + segment.options.labels.distance;\n var distances = [];\n var firstBox = labels[0].box;\n var distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n\n distances.push(distance);\n\n for (var i = 0; i < count; i++) {\n var secondBox = labels[i + 1].box;\n\n firstBox = labels[i].box;\n distance = round(secondBox.y1 - firstBox.y2);\n distances.push(distance);\n }\n distance = round(sector.center.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n distances.push(distance);\n\n return distances;\n },\n\n distributeLabels: function(distances, labels) {\n var this$1$1 = this;\n\n var count = distances.length;\n var left, right, remaining;\n\n for (var i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this$1$1._takeDistance(distances, i, --left, remaining);\n remaining = this$1$1._takeDistance(distances, i, ++right, remaining);\n }\n }\n\n this.reflowLabels(distances, labels);\n },\n\n _takeDistance: function(distances, anchor, position, amount) {\n var result = amount;\n if (distances[position] > 0) {\n var available = Math.min(distances[position], result);\n result -= available;\n distances[position] -= available;\n distances[anchor] += available;\n }\n\n return result;\n },\n\n reflowLabels: function(distances, labels) {\n var this$1$1 = this;\n\n var segment = last(this.points);\n var sector = segment.sector;\n var labelOptions = segment.options.labels;\n var labelsCount = labels.length;\n var labelDistance = labelOptions.distance;\n var boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n var boxX;\n\n distances[0] += 2;\n for (var i = 0; i < labelsCount; i++) {\n var label = labels[i];\n var box = label.box;\n\n boxY += distances[i];\n boxX = this$1$1.hAlignLabel(\n box.x2,\n sector.clone().expand(labelDistance),\n boxY,\n boxY + box.height(),\n label.orientation === RIGHT);\n\n if (label.orientation === RIGHT) {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.radius + sector.center.x + labelDistance;\n }\n label.reflow(new Box(boxX + box.width(), boxY, boxX, boxY));\n } else {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.center.x - sector.radius - labelDistance;\n }\n label.reflow(new Box(boxX - box.width(), boxY, boxX, boxY));\n }\n\n boxY += box.height();\n }\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var ref = this;\n var connectors = ref.options.connectors;\n var points = ref.points;\n var count = points.length;\n var space = 4;\n\n ChartElement.fn.createVisual.call(this);\n\n this._connectorLines = [];\n\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var label = segment.label;\n var angle = sector.middle();\n var connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n\n if (label) {\n var connectorLine = new Path({\n stroke: {\n color: connectorsColor,\n width: connectors.width\n },\n animation: {\n type: FADEIN,\n delay: segment.animationDelay\n }\n });\n\n if (label.options.position === OUTSIDE_END) {\n var box = label.box;\n var centerPoint = sector.center;\n var start = sector.point(angle);\n var middle = new Point(box.x1, box.center().y);\n var sr = (void 0), end = (void 0), crossing = (void 0);\n\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n // TODO: Extract into a method to remove duplication\n if (label.orientation === RIGHT) {\n end = new Point(box.x1 - connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x - space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.min(crossing.x, middle.x);\n\n if (this$1$1.pointInCircle(crossing, sector.center, sector.radius + space) ||\n crossing.x < sector.center.x) {\n sr = sector.center.x + sector.radius + space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr < middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x + space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n } else {\n end = new Point(box.x2 + connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x + space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.max(crossing.x, middle.x);\n\n if (this$1$1.pointInCircle(crossing, sector.center, sector.radius + space) ||\n crossing.x > sector.center.x) {\n sr = sector.center.x - sector.radius - space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr > middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x - space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n }\n\n connectorLine.lineTo(end.x, end.y);\n\n this$1$1._connectorLines.push(connectorLine);\n this$1$1.visual.append(connectorLine);\n }\n }\n }\n },\n\n renderVisual: function() {\n ChartElement.fn.renderVisual.call(this);\n\n if (dataviz.find(this.options.series, function (options) { return options.autoFit; })) {\n var targetBox = this.targetBox;\n var pieCenter = this.box.center();\n var bbox = this.visual.bbox();\n if (!bbox) {\n return;\n }\n\n var bboxBottom = bbox.bottomRight();\n\n var scale = Math.min(\n (pieCenter.y - targetBox.y1) / (pieCenter.y - bbox.origin.y),\n (targetBox.y2 - pieCenter.y) / (bboxBottom.y - pieCenter.y),\n (pieCenter.x - targetBox.x1) / (pieCenter.x - bbox.origin.x),\n (targetBox.x2 - pieCenter.x) / (bboxBottom.x - pieCenter.x)\n );\n\n if (scale < 1) {\n this.visual.transform(transform().scale(scale, scale, [ pieCenter.x, pieCenter.y ]));\n }\n }\n },\n\n labelComparator: function(reverse) {\n var reverseValue = reverse ? -1 : 1;\n\n return function(a, b) {\n var first = (a.parent.sector.middle() + 270) % 360;\n var second = (b.parent.sector.middle() + 270) % 360;\n return (first - second) * reverseValue;\n };\n },\n\n hAlignLabel: function(originalX, sector, y1, y2, direction) {\n var radius = sector.radius;\n var sector_center = sector.center;\n var cx = sector_center.x;\n var cy = sector_center.y;\n var t = Math.min(Math.abs(cy - y1), Math.abs(cy - y2));\n\n if (t > radius) {\n return originalX;\n }\n\n return cx + Math.sqrt((radius * radius) - (t * t)) * (direction ? 1 : -1);\n },\n\n pointInCircle: function(point, center, radius) {\n return Math.pow(center.x - point.x, 2) + Math.pow(center.y - point.y, 2) < Math.pow(radius, 2);\n },\n\n formatPointValue: function(point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n\n animationDelay: function(categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n },\n\n stackRoot: function() {\n return this;\n }\n });\n\n function intersection(a1, a2, b1, b2) {\n var uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n var ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n var result;\n if (ub !== 0) {\n var ua = (uat / ub);\n\n result = new Point(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n );\n }\n\n return result;\n }\n\n setDefaultOptions(PieChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: \"#939393\",\n padding: 8\n },\n inactiveItems: {\n markers: {},\n labels: {}\n }\n });\n\n deepExtend(PieChart.prototype, PieChartMixin);\n\n PieChart.prototype.isStackRoot = true;\n\n var PiePlotArea = PlotAreaBase.extend({\n render: function() {\n this.createPieChart(this.series);\n },\n\n createPieChart: function(series) {\n var firstSeries = series[0];\n var pieChart = new PieChart(this, {\n series: series,\n padding: firstSeries.padding,\n startAngle: firstSeries.startAngle,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n\n this.appendChart(pieChart);\n },\n\n appendChart: function(chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.data, chart.legendItems);\n },\n\n getPointBelow: function(point) {\n return this.getPointToTheRight(point);\n },\n\n getPointAbove: function(point) {\n return this.getPointToTheLeft(point);\n }\n });\n\n var DonutSegment = PieSegment.extend({\n reflowLabel: function() {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var angle = sector.middle();\n\n if (label) {\n var labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n\n var lp = sector.point(angle);\n\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n PieSegment.fn.reflowLabel.call(this);\n }\n }\n },\n\n createSegment: function(sector, options) {\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n }\n });\n\n setDefaultOptions(DonutSegment, {\n overlay: {\n gradient: \"roundedGlass\"\n },\n labels: {\n position: CENTER\n },\n animation: {\n type: PIE\n }\n });\n\n deepExtend(DonutSegment.prototype, PointEventsMixin);\n\n var DONUT_SECTOR_ANIM_DELAY = 50;\n\n var DonutChart = PieChart.extend({\n addValue: function(value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n\n this.createLegendItem(value, segmentOptions, fields);\n\n if (fields.visible === false) {\n return;\n }\n\n var segment = new DonutSegment(value, sector, segmentOptions);\n\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var options = this.options;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var series = options.series;\n var seriesCount = series.length;\n\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n\n var totalSize = halfMinWidth - padding;\n var seriesWithoutSize = 0;\n var holeSize;\n\n for (var i = 0; i < seriesCount; i++) {\n var currentSeries = series[i];\n if (i === 0) {\n if (defined(currentSeries.holeSize)) {\n holeSize = currentSeries.holeSize;\n totalSize -= currentSeries.holeSize;\n }\n }\n\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n\n if (!defined(holeSize)) {\n var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n\n var innerRadius = holeSize;\n var margin = 0;\n var size, radius;\n\n this.seriesConfigs = [];\n\n for (var i$1 = 0; i$1 < seriesCount; i$1++) {\n var currentSeries$1 = series[i$1];\n size = valueOrDefault(currentSeries$1.size, totalSize / seriesWithoutSize);\n innerRadius += margin;\n radius = innerRadius + size;\n this$1$1.seriesConfigs.push({ innerRadius: innerRadius, radius: radius });\n margin = currentSeries$1.margin || 0;\n innerRadius = radius;\n }\n\n PieChart.fn.reflow.call(this, targetBox);\n },\n\n animationDelay: function(categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY +\n (INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1));\n }\n });\n\n setDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: \"#939393\",\n padding: 8\n }\n });\n\n var DonutPlotArea = PiePlotArea.extend({\n render: function() {\n this.createDonutChart(this.series);\n },\n\n createDonutChart: function(series) {\n var firstSeries = series[0];\n var donutChart = new DonutChart(this, {\n series: series,\n padding: firstSeries.padding,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n\n this.appendChart(donutChart);\n },\n\n getPointBelow: function(point) {\n return this._getNextPoint(point, this._pointsByVertical, -1);\n },\n\n getPointAbove: function(point) {\n return this._getNextPoint(point, this._pointsByVertical, 1);\n }\n });\n\n var DEFAULT_PADDING = 0.15;\n\n var PolarPlotAreaBase = PlotAreaBase.extend({\n initFields: function() {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n },\n\n render: function() {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n },\n\n alignAxes: function() {\n var axis = this.valueAxis;\n var range = axis.range();\n var crossingValue = axis.options.reverse ? range.max : range.min;\n var slot = axis.getSlot(crossingValue);\n var center = this.polarAxis.getSlot(0).center;\n var axisBox = axis.box.translate(\n center.x - slot.x1,\n center.y - slot.y1\n );\n\n axis.reflow(axisBox);\n },\n\n createValueAxis: function() {\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var axisOptions = this.valueAxisOptions({\n roundToMajorUnit: false,\n zIndex: -1\n });\n var axisType, axisDefaultRange;\n\n if (axisOptions.type === LOGARITHMIC) {\n axisType = dataviz.RadarLogarithmicAxis;\n axisDefaultRange = { min: 0.1, max: 1 };\n } else {\n axisType = dataviz.RadarNumericAxis;\n axisDefaultRange = { min: 0, max: 1 };\n }\n\n var range = tracker.query(name) || defaultRange || axisDefaultRange;\n\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n\n var valueAxis = new axisType(\n range.min, range.max,\n axisOptions,\n this.chartService\n );\n\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n },\n\n reflowAxes: function() {\n var ref = this;\n var options = ref.options.plotArea;\n var valueAxis = ref.valueAxis;\n var polarAxis = ref.polarAxis;\n var box = ref.box;\n var defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n var padding = getSpacing(options.padding || {}, defaultPadding);\n var paddingBox = box.clone().unpad(padding);\n var axisBox = paddingBox.clone();\n\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n\n var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n\n polarAxis.reflow(axisBox);\n valueAxis.reflow(valueAxisBox);\n var heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n },\n\n backgroundBox: function() {\n return this.box;\n },\n\n detachLabels: function() {}\n });\n\n var PolarScatterChart = ScatterChart.extend({\n pointSlot: function(slotX, slotY) {\n var valueRadius = slotX.center.y - slotY.y1;\n var slot = Point.onCircle(slotX.center, slotX.startAngle, valueRadius);\n\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n });\n\n setDefaultOptions(PolarScatterChart, {\n clip: false\n });\n\n var PolarLineChart = ScatterLineChart.extend({\n\n });\n\n PolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n\n setDefaultOptions(PolarLineChart, {\n clip: false\n });\n\n var SplinePolarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function(fillPath) {\n var center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n },\n\n _polarAxisCenter: function() {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n return center;\n },\n\n strokeSegments: function() {\n var segments = this._strokeSegments;\n\n if (!segments) {\n var center = this._polarAxisCenter();\n var curveProcessor = new CurveProcessor(false);\n var linePoints = this.points();\n\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n\n return segments;\n }\n });\n\n var PolarAreaSegment = AreaSegment.extend({\n fillToAxes: function(fillPath) {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n var centerSegment = new geometry.Segment([ center.x, center.y ]);\n\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\n }\n });\n\n var PolarAreaChart = PolarLineChart.extend({\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segment;\n\n if (style === SMOOTH) {\n segment = new SplinePolarAreaSegment(linePoints, currentSeries, seriesIx);\n } else {\n segment = new PolarAreaSegment(linePoints, currentSeries, seriesIx);\n }\n return segment;\n },\n\n createMissingValue: function(value, missingValues) {\n var missingValue;\n\n if (hasValue(value.x) && missingValues !== INTERPOLATE) {\n missingValue = {\n x: value.x,\n y: value.y\n };\n if (missingValues === ZERO) {\n missingValue.y = 0;\n }\n }\n\n return missingValue;\n },\n\n seriesMissingValues: function(series) {\n return series.missingValues || ZERO;\n },\n\n _hasMissingValuesGap: function() {\n var this$1$1 = this;\n\n var series = this.options.series;\n\n for (var idx = 0; idx < series.length; idx++) {\n if (this$1$1.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n },\n\n sortPoints: function(points) {\n var this$1$1 = this;\n\n points.sort(xComparer);\n\n if (this._hasMissingValuesGap()) {\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n var value = point.value;\n if (!hasValue(value.y) && this$1$1.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n\n return points;\n }\n });\n\n function xComparer(a, b) {\n return a.value.x - b.value.x;\n }\n\n var PolarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function() {\n var polarAxis = new dataviz.PolarAxis(this.options.xAxis, this.chartService);\n\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n },\n\n render: function() {\n this.series = [].concat( this.originalSeries );\n this.createTrendlineSeries();\n\n PolarPlotAreaBase.fn.render.call(this);\n },\n\n valueAxisOptions: function(defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n },\n\n createValueAxis: function() {\n PolarPlotAreaBase.fn.createValueAxis.call(this);\n this.axisY = this.valueAxis;\n },\n\n trendlineFactory: function(options, series) {\n var trendline = XYPlotArea.prototype.trendlineFactory.call(this, options, series);\n if (trendline) {\n trendline.type = POLAR_LINE;\n }\n\n return trendline;\n },\n\n appendChart: function(chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n },\n\n createCharts: function() {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n\n this.createLineChart(\n filterSeriesByType(series, [ POLAR_LINE ]),\n pane\n );\n\n this.createScatterChart(\n filterSeriesByType(series, [ POLAR_SCATTER ]),\n pane\n );\n\n this.createAreaChart(\n filterSeriesByType(series, [ POLAR_AREA ]),\n pane\n );\n },\n\n createLineChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var lineChart = new PolarLineChart(this, { series: series });\n\n this.appendChart(lineChart, pane);\n },\n\n createScatterChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var scatterChart = new PolarScatterChart(this, { series: series });\n\n this.appendChart(scatterChart, pane);\n },\n\n createAreaChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var areaChart = new PolarAreaChart(this, { series: series });\n\n this.appendChart(areaChart, pane);\n },\n\n _dispatchEvent: function(chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var xValue = this.axisX.getValue(point);\n var yValue = this.axisY.getValue(point);\n\n if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n },\n\n createCrosshairs: function() {}\n });\n\n setDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n\n deepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin, {\n seriesValues: XYPlotArea.prototype.seriesValues\n });\n\n function groupBySeriesIx(segments) {\n var seriesSegments = [];\n for (var idx = 0; idx < segments.length; idx++) {\n var segment = segments[idx];\n seriesSegments[segment.seriesIx] = seriesSegments[segment.seriesIx] || [];\n seriesSegments[segment.seriesIx].push(segment);\n }\n\n return seriesSegments;\n }\n\n var RadarLineChart = LineChart.extend({\n pointSlot: function(categorySlot, valueSlot) {\n var valueRadius = categorySlot.center.y - valueSlot.y1;\n var slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n\n return new Box(slot.x, slot.y, slot.x, slot.y);\n },\n\n renderSegments: function() {\n LineChart.fn.renderSegments.call(this);\n\n if (this._segments && this._segments.length > 1) {\n var seriesSegments = groupBySeriesIx(this._segments);\n\n for (var idx = 0; idx < seriesSegments.length; idx++) {\n var segments = seriesSegments[idx];\n if (segments && segments.length > 1) {\n var firstPoint = segments[0].linePoints[0];\n var lastSegment = last(segments);\n var lastPoint = last(lastSegment.linePoints);\n var isFirstDataPoint = firstPoint.categoryIx === 0;\n var isLastDataPoint = lastPoint.categoryIx === lastPoint.categoriesCount - 1;\n if (isFirstDataPoint && isLastDataPoint) {\n last(segments).linePoints.push(firstPoint);\n }\n }\n }\n }\n },\n\n createSegment: function(linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n\n var segment = new pointType(linePoints, currentSeries, seriesIx);\n var missingValues = this.seriesMissingValues(currentSeries);\n\n if (linePoints.length === currentSeries.data.length || missingValues === INTERPOLATE) {\n segment.options.closed = true;\n }\n\n return segment;\n }\n });\n\n setDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\n });\n\n var SplineRadarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function() {}\n });\n\n var RadarAreaSegment = AreaSegment.extend({\n fillToAxes: function() {}\n });\n\n var RadarAreaChart = RadarLineChart.extend({\n createSegment: function(linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n var stackPoints;\n var segment;\n\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\n\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n segment.options.closed = true;\n } else {\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n\n return segment;\n },\n\n seriesMissingValues: function(series) {\n return series.missingValues || ZERO;\n }\n });\n\n var RadarSegment = DonutSegment.extend({\n init: function(value, options) {\n DonutSegment.fn.init.call(this, value, null, options);\n },\n\n getIndex: function() {\n return this.categoryIx;\n }\n });\n\n setDefaultOptions(RadarSegment, {\n overlay: {\n gradient: \"none\"\n },\n labels: {\n distance: 10\n }\n });\n\n var RadarClusterLayout = ChartElement.extend({\n init: function(options) {\n ChartElement.fn.init.call(this, options);\n\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\n\n reflow: function(sector) {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var gap = options.gap;\n var spacing = options.spacing;\n var count = children.length;\n var slots = count + gap + (spacing * (count - 1));\n var slotAngle = sector.angle / slots;\n var angle = sector.startAngle + slotAngle * (gap / 2);\n\n this.forEach(children, function (child) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n\n child.reflow(slotSector);\n child.sector = slotSector;\n\n angle += slotAngle + (slotAngle * spacing);\n });\n }\n });\n\n setDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n });\n\n var RadarStackLayout = ChartElement.extend({\n reflow: function(sector) {\n var ref = this;\n var reverse = ref.options.reverse;\n var children = ref.children;\n var childrenCount = children.length;\n var first = reverse ? childrenCount - 1 : 0;\n var step = reverse ? -1 : 1;\n\n this.box = new Box();\n\n for (var i = first; i >= 0 && i < childrenCount; i += step) {\n var childSector = children[i].sector;\n childSector.startAngle = sector.startAngle;\n childSector.angle = sector.angle;\n }\n }\n });\n\n var RadarBarChart = BarChart.extend({\n pointType: function() {\n return RadarSegment;\n },\n\n clusterType: function() {\n return RadarClusterLayout;\n },\n\n stackType: function() {\n return RadarStackLayout;\n },\n\n categorySlot: function(categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n\n pointSlot: function(categorySlot, valueSlot) {\n var slot = categorySlot.clone();\n var y = categorySlot.center.y;\n\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n\n return slot;\n },\n\n reflowPoint: function(point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n },\n\n createAnimation: function() {\n this.options.animation.center = this.box.toRect().center();\n BarChart.fn.createAnimation.call(this);\n }\n });\n\n RadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n\n setDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: {\n type: \"pie\"\n }\n });\n\n var RadarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function() {\n var categoryAxis = new dataviz.RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createTrendlineSeries();\n this.createCategoryAxesLabels();\n },\n\n valueAxisOptions: function(defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: \"P0\" }\n });\n }\n\n return deepExtend(defaults, this.options.valueAxis);\n },\n\n aggregateCategories: function() {\n // No separate panes in radar charts\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n },\n\n createCategoryAxesLabels: function() {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n },\n\n filterSeries: function(currentSeries) {\n // Not supported for radar charts\n return currentSeries;\n },\n\n trendlineFactory: function(options, series) {\n var trendline = CategoricalPlotArea.prototype.trendlineFactory.call(this, options, series);\n if (trendline) {\n trendline.type = RADAR_LINE;\n }\n\n return trendline;\n },\n\n createCharts: function() {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n\n this.createAreaChart(\n filterSeriesByType(series, [ RADAR_AREA ]),\n pane\n );\n\n this.createLineChart(\n filterSeriesByType(series, [ RADAR_LINE ]),\n pane\n );\n\n this.createBarChart(\n filterSeriesByType(series, [ RADAR_COLUMN ]),\n pane\n );\n },\n\n chartOptions: function(series) {\n var options = { series: series };\n var firstSeries = series[0];\n if (firstSeries) {\n var filteredSeries = this.filterVisibleSeries(series);\n var stack = firstSeries.stack;\n options.isStacked = stack && filteredSeries.length > 1;\n options.isStacked100 = stack && stack.type === \"100%\" && filteredSeries.length > 1;\n\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n\n return options;\n },\n\n createAreaChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n },\n\n createLineChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n },\n\n createBarChart: function(series, pane) {\n if (series.length === 0) {\n return;\n }\n\n var firstSeries = series[0];\n var options = this.chartOptions(series);\n var filteredSeries = this.filterVisibleSeries(series);\n var anyStackedSeries = filteredSeries.some(function (s) { return s.stack; });\n var isStacked100 = filteredSeries.some(function (s) { return s.stack && s.stack.type === \"100%\"; });\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n options.defaultStack = firstSeries.stack && filteredSeries.length > 1;\n options.isStacked = anyStackedSeries && filteredSeries.length > 1;\n options.isStacked100 = isStacked100 && filteredSeries.length > 1;\n\n var barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n\n this._hasBarCharts = true;\n },\n\n seriesCategoryAxis: function() {\n return this.categoryAxis;\n },\n\n _dispatchEvent: function(chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var category = this.categoryAxis.getCategory(point);\n var value = this.valueAxis.getValue(point);\n\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n },\n\n createCrosshairs: function() {},\n\n _pointsByVertical: function(basePoint) {\n return PolarPlotAreaBase.fn._pointsByVertical.call(this, basePoint).sort(this._getSeriesCompareFn());\n },\n\n _getSeriesCompareFn: function() {\n return function (a, b) { return b.value - a.value; };\n }\n });\n\n deepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries,\n seriesSourcePoints: CategoricalPlotArea.prototype.seriesSourcePoints,\n seriesValues: CategoricalPlotArea.prototype.seriesValues\n });\n\n setDefaultOptions(RadarPlotArea, {\n categoryAxis: {\n categories: []\n },\n valueAxis: {}\n });\n\n var FunnelSegment = ChartElement.extend({\n init: function(value, options, segmentOptions) {\n ChartElement.fn.init.call(this, options);\n\n this.value = value;\n this.options.index = segmentOptions.index;\n },\n\n getLabelText: function(options) {\n var labelTemplate = getTemplate(options);\n\n if (labelTemplate) {\n return labelTemplate(this.pointData());\n } else if (options.format) {\n return this.formatValue(options.format);\n }\n\n return this.value;\n },\n\n reflow: function(chartBox) {\n var points = this.points;\n var label = this.children[0];\n var x1 = Math.min(points[0].x, points[3].x);\n var x2 = Math.max(points[1].x, points[2].x);\n\n this.box = new Box(x1, points[0].y, x2, points[2].y);\n\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n },\n\n createVisual: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var visual;\n\n ChartElement.fn.createVisual.call(this);\n\n this.addAccessibilityAttributesToVisual();\n\n if (options.visual) {\n visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n points: this.points,\n options: options,\n sender: this.getSender(),\n createVisual: function () { return this$1$1.createPath(); }\n });\n } else {\n visual = this.createPath();\n }\n\n if (visual) {\n this.visual.append(visual);\n }\n },\n\n createPath: function() {\n var options = this.options;\n var border = options.border;\n var path = Path.fromPoints(this.points, {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: {\n color: border.color,\n opacity: border.opacity,\n width: border.width\n }\n }).close();\n\n return path;\n },\n\n createHighlight: function(style) {\n return Path.fromPoints(this.points, style);\n },\n\n highlightVisual: function() {\n return this.visual.children[0];\n },\n\n highlightVisualArgs: function() {\n var path = Path.fromPoints(this.points).close();\n\n return {\n options: this.options,\n path: path\n };\n },\n\n createFocusHighlight: function(style) {\n var borderWidth = this.options.accessibility.highlight.border.width;\n var result = Path.fromPoints(this.points, deepExtend({}, style, {\n stroke: {\n width: borderWidth * 2\n }\n })).close();\n\n var clipPath = new MultiPath();\n\n clipPath.paths.push(Path.fromRect(this.box.clone().pad(borderWidth).toRect()));\n clipPath.paths.push(Path.fromPoints(this.points));\n\n result.clip(clipPath);\n\n return result;\n },\n\n tooltipAnchor: function() {\n var box = this.box;\n return {\n point: new Point(box.center().x, box.y1),\n align: {\n horizontal: \"center\",\n vertical: \"top\"\n }\n };\n },\n\n formatValue: function(format) {\n var point = this;\n return point.owner.formatPointValue(point, format);\n },\n\n pointData: function() {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n };\n },\n\n getIndex: function() {\n return this.index;\n }\n });\n\n setDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: {\n width: 1\n },\n labels: {\n format: \"\"\n },\n accessibility: {\n role: CHART_POINT_ROLE,\n className: CHART_POINT_CLASSNAME,\n ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n }\n });\n\n deepExtend(FunnelSegment.prototype, PointEventsMixin);\n deepExtend(FunnelSegment.prototype, AccessibilityAttributesMixin);\n\n var FunnelChart = ChartElement.extend({\n init: function(plotArea, options) {\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n },\n\n formatPointValue: function(point, format) {\n return this.plotArea.chartService.format.auto(format,point.value);\n },\n\n render: function() {\n var this$1$1 = this;\n\n var seriesIx = 0;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors; if (seriesColors === void 0) { seriesColors = []; }\n var series = options.series[seriesIx];\n var data = series.data;\n\n if (!data) {\n return;\n }\n\n var ref$1 = bindSegments(series);\n var total = ref$1.total;\n var points = ref$1.points;\n\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n\n if (!pointData) {\n continue;\n }\n\n var fields = pointData.fields;\n\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n\n fields = deepExtend({\n index: i,\n owner: this$1$1,\n series: series,\n seriesIx: seriesIx,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n\n var value = pointData.valueFields.value;\n var segment = this$1$1.createSegment(value, fields);\n var label = this$1$1.createLabel(value, fields);\n\n if (segment && label) {\n segment.append(label);\n }\n }\n },\n\n evalSegmentOptions: function(options, value, fields) {\n var series = fields.series;\n\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, { defaults: series._defaults, excluded: [\n \"data\", \"content\", \"template\", \"toggle\", \"visual\",\n \"ariaTemplate\", \"ariaContent\"\n ] });\n },\n\n createSegment: function(value, fields) {\n var seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n\n this.createLegendItem(value, seriesOptions, fields);\n\n if (fields.visible !== false) {\n\n var segment = new FunnelSegment(value, seriesOptions, fields);\n $.extend(segment, fields);\n\n this.append(segment);\n this.points.push(segment);\n\n return segment;\n }\n },\n\n createLabel: function(value, fields) {\n var series = fields.series;\n var dataItem = fields.dataItem;\n var labels = deepExtend({}, this.options.labels, series.labels);\n var text = value;\n\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var data = {\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n };\n if (labelTemplate) {\n text = labelTemplate(data);\n } else if (labels.format) {\n text = this.chartService.format.auto(labels.format, text);\n }\n\n if (!labels.color) {\n labels.color = autoTextColor(series.color);\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n\n this.evalSegmentOptions(labels, value, fields);\n var textBox = new TextBox(text, deepExtend({\n vAlign: labels.position\n }, labels), data);\n\n this.labels.push(textBox);\n\n return textBox;\n }\n },\n\n labelPadding: function() {\n var labels = this.labels;\n var padding = { left: 0, right: 0 };\n\n for (var i = 0; i < labels.length; i++) {\n var label = labels[i];\n var align = label.options.align;\n if (align !== CENTER) {\n var width = labels[i].box.width();\n\n if (align === LEFT) {\n padding.left = Math.max(padding.left, width);\n } else {\n padding.right = Math.max(padding.right, width);\n }\n }\n }\n\n return padding;\n },\n\n dynamicSlopeReflow: function(box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var firstSegment = segments[0];\n var maxSegment = firstSegment;\n\n for (var idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n\n var lastUpperSide = (firstSegment.percentage / maxSegment.percentage) * width;\n var previousOffset = (width - lastUpperSide) / 2;\n var previousHeight = 0;\n\n for (var idx$1 = 0; idx$1 < count; idx$1++) {\n var percentage = segments[idx$1].percentage;\n var nextSegment = segments[idx$1 + 1];\n var nextPercentage = (nextSegment ? nextSegment.percentage : percentage);\n var points = segments[idx$1].points = [];\n var height = (options.dynamicHeight) ? (totalHeight * percentage) : (totalHeight / count);\n var offset = (void 0);\n\n if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n\n offset = limitValue(offset, 0, width);\n\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + offset, box.y1 + height + previousHeight));\n\n previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\n }\n },\n\n constantSlopeReflow: function(box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var decreasingWidth = options.neckRatio <= 1;\n var neckRatio = decreasingWidth ? options.neckRatio * width : width;\n var previousOffset = decreasingWidth ? 0 : (width - width / options.neckRatio) / 2;\n var topMostWidth = decreasingWidth ? width : width - previousOffset * 2;\n var finalNarrow = (topMostWidth - neckRatio) / 2;\n var previousHeight = 0;\n\n for (var idx = 0; idx < count; idx++) {\n var points = segments[idx].points = [];\n var percentage = segments[idx].percentage;\n var offset = (options.dynamicHeight) ? (finalNarrow * percentage) : (finalNarrow / count);\n var height = (options.dynamicHeight) ? (totalHeight * percentage) : (totalHeight / count);\n\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + previousOffset + offset,box.y1 + height + previousHeight));\n previousOffset += offset;\n previousHeight += height + options.segmentSpacing;\n }\n },\n\n reflow: function(chartBox) {\n var points = this.points;\n var count = points.length;\n\n if (!count) {\n return;\n }\n\n var options = this.options;\n var box = chartBox.clone().unpad(this.labelPadding());\n var totalHeight = box.height() - options.segmentSpacing * (count - 1);\n var width = box.width();\n\n if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n\n for (var idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\n }\n }\n });\n\n setDefaultOptions(FunnelChart, {\n neckRatio: 0.3,\n width: 300,\n dynamicSlope: false,\n dynamicHeight: true,\n segmentSpacing: 0,\n labels: {\n visible: false,\n align: CENTER,\n position: CENTER,\n zIndex: 1\n }\n });\n\n deepExtend(FunnelChart.prototype, PieChartMixin);\n\n var MAX_NECK_RATIO = 1e6;\n\n var PyramidChart = FunnelChart.extend({\n init: function(plotArea, options) {\n options.dynamicSlope = false;\n options.neckRatio = MAX_NECK_RATIO;\n\n FunnelChart.fn.init.call(this, plotArea, options);\n }\n });\n\n var FunnelPlotArea = PlotAreaBase.extend({\n render: function() {\n this.createChart(FunnelChart, filterSeriesByType(this.series, [ FUNNEL ]));\n this.createChart(PyramidChart, filterSeriesByType(this.series, [ PYRAMID ]));\n },\n\n createChart: function(chartType, series) {\n var firstSeries = series[0];\n if (!firstSeries) {\n return;\n }\n\n var chart = new chartType(this, {\n series: series,\n legend: this.options.legend,\n neckRatio: firstSeries.neckRatio,\n dynamicHeight: firstSeries.dynamicHeight,\n dynamicSlope: firstSeries.dynamicSlope,\n segmentSpacing: firstSeries.segmentSpacing,\n highlight: firstSeries.highlight\n });\n\n this.appendChart(chart);\n },\n\n appendChart: function(chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.data, chart.legendItems);\n },\n\n _pointsByVertical: function(basePoint) {\n return this.pointsBySeriesIndex(basePoint.series.index);\n },\n\n getPointToTheRight: function(point) {\n return this.getPointBelow(point);\n },\n\n getPointToTheLeft: function(point) {\n return this.getPointAbove(point);\n }\n });\n\n // Linear color scale from the given color to white minus minimum lightness offset.\n var colorScale = function (color, minLightnessOffset) {\n if (minLightnessOffset === void 0) { minLightnessOffset = 0.05; }\n\n var baseColor = kendo.parseColor(color);\n var offset = 1 - minLightnessOffset;\n\n return function (value) {\n var hsl = baseColor.toHSL();\n var range = 100 - hsl.l;\n var point = offset - value;\n hsl.l += Math.min(point * range, range);\n\n return hsl.toCss();\n };\n };\n\n var HeatmapPoint = ChartElement.extend({\n init: function(value, options) {\n ChartElement.fn.init.call(this);\n\n this.options = options;\n this.color = options.color || WHITE;\n this.value = value;\n },\n\n render: function() {\n if (this._rendered) {\n return;\n }\n\n this._rendered = true;\n\n this.createMarker();\n this.createLabel();\n this.createNote();\n },\n\n createLabel: function() {\n var options = this.options;\n var labels = options.labels;\n\n if (labels.visible) {\n this.label = this.createLabelElement(labels);\n this.append(this.label);\n }\n },\n\n createLabelElement: function(options) {\n var labelColor = options.color;\n\n if (!labelColor) {\n labelColor = autoTextColor(this.color);\n }\n\n return new TextBox(this.getLabelText(options),\n deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n },\n options, {\n color: labelColor\n }),\n this.pointData()\n );\n },\n\n getLabelText: function(options) {\n var labelTemplate = getTemplate(options);\n\n if (labelTemplate) {\n return labelTemplate(this.pointData());\n }\n\n return this.formatValue(options.format);\n },\n\n formatValue: function(format) {\n return this.owner.formatPointValue(this, format);\n },\n\n reflow: function(targetBox) {\n this.render();\n\n var label = this.label;\n\n this.box = targetBox;\n\n if (label) {\n label.reflow(this.markerBox());\n }\n\n if (this.note) {\n this.note.reflow(targetBox);\n }\n\n this.marker.reflow(this.markerBox());\n },\n\n createVisual: function() {\n ChartElement.fn.createVisual.call(this);\n\n this.addAccessibilityAttributesToVisual();\n },\n\n markerBox: function() {\n var options = this.options;\n var markers = options.markers;\n var border = markers.border;\n var rect = this.box.toRect();\n var type = valueOrDefault(markers.type, 'rect');\n var isRoundRect = type === datavizConstants.ROUNDED_RECT;\n var borderWidth = valueOrDefault(border.width, isRoundRect ? 1 : 0);\n var halfBorderWidth = Math.round(borderWidth / 2);\n\n if (markers.size) {\n var center = rect.center();\n rect.size.width = rect.size.height = markers.size;\n rect.origin.x = Math.round(center.x - rect.size.width / 2);\n rect.origin.y = Math.round(center.y - rect.size.height / 2);\n }\n\n rect.size.width -= borderWidth;\n rect.size.height -= borderWidth;\n rect.origin.y += halfBorderWidth + 0.5;\n rect.origin.x += halfBorderWidth + 0.5;\n\n return dataviz.rectToBox(rect);\n },\n\n markerBorder: function() {\n var options = this.options;\n var markers = options.markers;\n var border = markers.border;\n var opacity = valueOrDefault(border.opacity, options.opacity);\n\n return {\n color: border.color || this.color,\n width: border.width,\n opacity: opacity,\n dashType: border.dashType\n };\n },\n\n createMarker: function() {\n var options = this.options;\n var markerOptions = options.markers;\n var marker = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n\n this.marker = marker;\n this.append(marker);\n },\n\n createHighlight: function(style) {\n var options = this.options;\n var markerOptions = this.options.highlight.markers || this.options.markers;\n\n var highlight = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: markerOptions.color || this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n });\n\n highlight.reflow(this.markerBox());\n var visual = highlight.getElement();\n\n visual.options.fill = style.fill;\n visual.options.stroke = style.stroke;\n\n return visual;\n },\n\n highlightVisual: function() {\n return this.rectVisual;\n },\n\n highlightVisualArgs: function() {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n },\n\n createFocusHighlight: function() {\n var markerOptions = this.options.markers;\n var highlightOptions = this.options.accessibility.highlight;\n\n var highlight = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: highlightOptions.color,\n border: highlightOptions.border,\n borderRadius: markerOptions.borderRadius,\n padding: highlightOptions.border.width / 2,\n zIndex: highlightOptions.zIndex\n });\n\n highlight.reflow(this.markerBox());\n\n return highlight.getElement();\n },\n\n tooltipAnchor: function() {\n var left = this.box.center().x;\n var top = this.box.y1 - TOOLTIP_OFFSET;\n\n return {\n point: new Point(left, top),\n align: {\n horizontal: CENTER,\n vertical: BOTTOM\n }\n };\n },\n\n overlapsBox: function(box) {\n return this.box.overlaps(box);\n },\n\n unclipElements: function() {\n /* noop, clip labels */\n },\n\n pointData: function() {\n return {\n x: this.value.x,\n y: this.value.y,\n value: this.value.value,\n dataItem: this.dataItem,\n series: this.series\n };\n }\n });\n\n deepExtend(HeatmapPoint.prototype, PointEventsMixin);\n deepExtend(HeatmapPoint.prototype, NoteMixin);\n deepExtend(HeatmapPoint.prototype, AccessibilityAttributesMixin);\n\n HeatmapPoint.prototype.defaults = {\n markers: {\n type: 'rect',\n borderRadius: 4,\n border: {\n color: 'transparent'\n }\n },\n padding: { top: 1 },\n labels: {\n visible: false,\n padding: 3\n },\n opacity: 1,\n notes: {\n label: {}\n },\n accessibility: {\n role: CHART_POINT_ROLE,\n className: CHART_POINT_CLASSNAME,\n ariaRoleDescription: CHART_POINT_ROLE_DESCRIPTION\n }\n };\n\n var HeatmapChart = ChartElement.extend({\n init: function(plotArea, options) {\n ChartElement.fn.init.call(this, options);\n\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n\n this.render();\n },\n\n _initFields: function() {\n this.points = [];\n this.seriesOptions = [];\n this.valueRange = { min: MAX_VALUE, max: MIN_VALUE };\n this._evalSeries = [];\n },\n\n render: function() {\n this.setRange();\n this.traverseDataPoints(this.addValue.bind(this));\n },\n\n setRange: function() {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref.options.series;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1$1.plotArea.bindPoint(currentSeries, pointIx);\n var valueFields = ref$1.valueFields;\n if (defined(valueFields.value) && valueFields.value !== null) {\n this$1$1.valueRange.min = Math.min(this$1$1.valueRange.min, valueFields.value);\n this$1$1.valueRange.max = Math.max(this$1$1.valueRange.max, valueFields.value);\n }\n }\n }\n },\n\n addValue: function(value, fields) {\n var point;\n if (value && defined(value.value) && value.value !== null) {\n point = this.createPoint(value, fields);\n if (point) {\n $.extend(point, fields);\n }\n }\n\n this.points.push(point);\n },\n\n evalPointOptions: function(options, value, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = {\n defaults: series._defaults,\n excluded: [\n \"data\", \"tooltip\", \"content\", \"template\",\n \"visual\", \"toggle\", \"drilldownSeriesFactory\",\n \"ariaTemplate\", \"ariaContent\"\n ]\n };\n\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n min: this.valueRange.min,\n max: this.valueRange.max\n }, state);\n }\n\n return pointOptions;\n },\n\n pointType: function() {\n return HeatmapPoint;\n },\n\n pointOptions: function(series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: {\n opacity: series.opacity\n },\n tooltip: {\n format: this.options.tooltip.format\n },\n labels: {\n format: this.options.labels.format\n }\n }, series);\n }\n\n return options;\n },\n\n createPoint: function(value, fields) {\n var series = fields.series;\n var pointOptions = this.pointOptions(series, fields.seriesIx);\n var color = fields.color || series.color;\n\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n\n if (isFunction(series.color)) {\n color = pointOptions.color;\n } else if (this.valueRange.max !== 0) {\n var scale = colorScale(color);\n color = scale(value.value / this.valueRange.max);\n }\n\n var point = new HeatmapPoint(value, pointOptions);\n point.color = color;\n\n this.append(point);\n\n return point;\n },\n\n seriesAxes: function(series) {\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var plotArea = this.plotArea;\n var xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n var yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return { xAxis: xAxis, yAxis: yAxis };\n },\n\n reflow: function(targetBox) {\n var this$1$1 = this;\n\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var ref = this$1$1.seriesAxes(fields.series);\n var xAxis = ref.xAxis;\n var yAxis = ref.yAxis;\n var indexX = xAxis.categoryIndex(value.x);\n var indexY = yAxis.categoryIndex(value.y);\n var slotX = xAxis.getSlot(indexX, indexX, limit);\n var slotY = yAxis.getSlot(indexY, indexY, limit);\n\n if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n\n this.box = targetBox;\n },\n\n pointSlot: function(slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n\n traverseDataPoints: function(callback) {\n var this$1$1 = this;\n\n var ref = this;\n var series = ref.options.series;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var ref$1 = this$1$1.seriesAxes(currentSeries);\n var xAxis = ref$1.xAxis;\n var yAxis = ref$1.yAxis;\n var xRange = xAxis.currentRangeIndices();\n var yRange = yAxis.currentRangeIndices();\n\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$2 = this$1$1.plotArea.bindPoint(currentSeries, pointIx);\n var value = ref$2.valueFields;\n var fields = ref$2.fields;\n var xIndex = xAxis.totalIndex(value.x);\n var yIndex = yAxis.totalIndex(value.y);\n var xIn = xRange.min <= xIndex && xIndex <= xRange.max;\n var yIn = yRange.min <= yIndex && yIndex <= yRange.max;\n\n if (xIn && yIn) {\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1$1\n }, fields));\n }\n }\n }\n },\n\n formatPointValue: function(point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.value);\n },\n\n animationPoints: function() {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n });\n setDefaultOptions(HeatmapChart, {\n series: [],\n tooltip: {\n format: \"{0}, {1}: {2}\"\n },\n labels: {\n format: \"{2}\"\n },\n clip: true\n });\n\n var HeatmapPlotArea = PlotAreaBase.extend({\n initFields: function() {\n this.namedXAxes = {};\n this.namedYAxes = {};\n },\n\n render: function(panes) {\n if (panes === void 0) { panes = this.panes; }\n\n this.bindCategories();\n this.createAxes(panes);\n this.createCharts(panes);\n this.createAxisLabels();\n },\n\n bindCategories: function() {\n var this$1$1 = this;\n\n var series = this.srcSeries || this.series;\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var data = currentSeries.data || [];\n var ref = this$1$1.seriesAxes(currentSeries);\n var xAxis = ref.xAxis;\n var yAxis = ref.yAxis;\n\n var xCategories = dataviz.createHashSet(xAxis.categories || []);\n var yCategories = dataviz.createHashSet(yAxis.categories || []);\n\n for (var pointIndex = 0; pointIndex < data.length; pointIndex++) {\n var ref$1 = SeriesBinder.current.bindPoint(currentSeries, pointIndex).valueFields;\n var x = ref$1.x;\n var y = ref$1.y;\n\n if (!xCategories.has(x)) {\n xCategories.add(x);\n }\n\n if (!yCategories.has(y)) {\n yCategories.add(y);\n }\n }\n\n xAxis.categories = xCategories.values();\n yAxis.categories = yCategories.values();\n }\n },\n\n createCharts: function(panes) {\n var this$1$1 = this;\n\n var seriesByPane = this.groupSeriesByPane();\n\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || \"default\"] || [];\n this$1$1.addToLegend(paneSeries);\n var filteredSeries = this$1$1.filterVisibleSeries(paneSeries);\n\n if (!filteredSeries) {\n continue;\n }\n\n this$1$1.createHeatmapChart(\n filterSeriesByType(filteredSeries, [ HEATMAP ]),\n pane\n );\n }\n },\n\n createHeatmapChart: function(series, pane) {\n var chart = new HeatmapChart(this, {\n series: series\n });\n\n this.appendChart(chart, pane);\n },\n\n seriesPaneName: function(series) {\n var options = this.options;\n var xAxisName = series.xAxis;\n var xAxisOptions = [].concat(options.xAxis);\n var xAxis = grep(xAxisOptions, function(a) { return a.name === xAxisName; })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function(a) { return a.name === yAxisName; })[0];\n var panes = options.panes || [ {} ];\n var defaultPaneName = panes[0].name || \"default\";\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n\n return paneName;\n },\n\n seriesAxes: function(series) {\n var xAxis;\n var yAxis;\n\n var options = this.options;\n\n var xAxisOptions = [].concat(options.xAxis);\n var xAxisName = series.xAxis;\n if (xAxisName) {\n xAxis = xAxisOptions.find(function (axis) { return axis.name === xAxisName; });\n } else {\n xAxis = xAxisOptions[0];\n }\n\n var yAxisOptions = [].concat(options.yAxis);\n var yAxisName = series.yAxis;\n if (yAxisName) {\n yAxis = yAxisOptions.find(function (axis) { return axis.name === yAxisName; });\n } else {\n yAxis = yAxisOptions[0];\n }\n\n if (!xAxis) {\n throw new Error(\"Unable to locate X axis with name \" + xAxisName);\n }\n\n if (!yAxis) {\n throw new Error(\"Unable to locate Y axis with name \" + yAxisName);\n }\n\n return { xAxis: xAxis, yAxis: yAxis };\n },\n\n createAxisLabels: function() {\n var axes = this.axes;\n for (var i = 0; i < axes.length; i++) {\n axes[i].createLabels();\n }\n },\n\n createXYAxis: function(options, vertical, axisIndex) {\n var axisName = options.name;\n var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n var axisOptions = $.extend({\n axisCrossingValue: 0\n }, options, {\n vertical: vertical,\n reverse: (vertical || this.chartService.rtl) ? !options.reverse : options.reverse,\n justified: false\n });\n var firstCategory = axisOptions.categories ? axisOptions.categories[0] : null;\n var typeSamples = [ axisOptions.min, axisOptions.max, firstCategory ];\n var series = this.series;\n\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesAxisName = currentSeries[vertical ? \"yAxis\" : \"xAxis\"];\n if ((seriesAxisName === axisOptions.name) || (axisIndex === 0 && !seriesAxisName)) {\n var firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? \"y\" : \"x\"]);\n\n break;\n }\n }\n\n var inferredDate;\n\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n\n var axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || (!axisOptions.type && inferredDate)) {\n axisType = dataviz.DateCategoryAxis;\n } else {\n axisType = CategoryAxis;\n }\n\n var axis = new axisType(axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error(((vertical ? \"Y\" : \"X\") + \" axis with name \" + axisName + \" is already defined\"));\n }\n namedAxes[axisName] = axis;\n }\n\n this.appendAxis(axis);\n axis.indexCategories();\n\n return axis;\n },\n\n createAxes: function(panes) {\n var this$1$1 = this;\n\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n },\n\n removeAxis: function(axis) {\n var axisName = axis.options.name;\n\n PlotAreaBase.fn.removeAxis.call(this, axis);\n\n if (axis.options.vertical) {\n delete this.namedYAxes[axisName];\n } else {\n delete this.namedXAxes[axisName];\n }\n\n if (axis === this.axisX) {\n delete this.axisX;\n }\n\n if (axis === this.axisY) {\n delete this.axisY;\n }\n },\n\n _dispatchEvent: function(chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var allAxes = this.axes;\n var length = allAxes.length;\n var xValues = [];\n var yValues = [];\n\n for (var i = 0; i < length; i++) {\n var axis = allAxes[i];\n var values = axis.options.vertical ? yValues : xValues;\n appendIfNotNull(values, axis.getCategory(point));\n }\n\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n },\n\n updateAxisOptions: function(axis, options) {\n var vertical = axis.options.vertical;\n var axes = this.groupAxes(this.panes);\n var index = (vertical ? axes.y : axes.x).indexOf(axis);\n\n updateAxisOptions$2(this.options, index, vertical, options);\n updateAxisOptions$2(this.originalOptions, index, vertical, options);\n },\n\n crosshairOptions: function(axis) {\n // Stack the crosshair above the series points.\n return $.extend({}, axis.options.crosshair, { zIndex: 0 });\n },\n\n _pointsByVertical: function(basePoint, offset) {\n var this$1$1 = this;\n if (offset === void 0) { offset = 0; }\n\n var normalizedOffset = this.axisX.options.reverse ? offset * -1 : offset;\n var axisXItems = this.axisX.children;\n var xIndex = this._getPointAxisXIndex(basePoint) + normalizedOffset;\n\n xIndex = cycleIndex(xIndex, axisXItems.length);\n var targetXValue = axisXItems[xIndex].value;\n\n var points = this\n .filterPoints(function (point) { return compareValues(point.pointData().x, targetXValue); })\n .sort(function (a, b) { return this$1$1._getPointAxisYIndex(a) - this$1$1._getPointAxisYIndex(b); });\n\n if (this.axisY.options.reverse) {\n return points.reverse();\n }\n\n return points;\n },\n\n _pointsByHorizontal: function(basePoint, offset) {\n var this$1$1 = this;\n if (offset === void 0) { offset = 0; }\n\n var normalizedOffset = this.axisY.options.reverse ? offset * -1 : offset;\n var axisYItems = this.axisY.children;\n var yIndex = this._getPointAxisYIndex(basePoint) + normalizedOffset;\n\n yIndex = cycleIndex(yIndex, axisYItems.length);\n var targetYValue = axisYItems[yIndex].value;\n\n var points = this\n .filterPoints(function (point) { return compareValues(point.pointData().y, targetYValue); })\n .sort(function (a, b) { return this$1$1._getPointAxisXIndex(a) - this$1$1._getPointAxisXIndex(b); });\n\n if (this.axisX.options.reverse) {\n return points.reverse();\n }\n\n return points;\n },\n\n _getPointAxisXIndex: function(point) {\n return this._getPointAxisIndex(this.axisX, point.pointData().x);\n },\n\n _getPointAxisYIndex: function(point) {\n return this._getPointAxisIndex(this.axisY, point.pointData().y);\n },\n\n _getPointAxisIndex: function(axis, pointValue) {\n return axis.children.findIndex(function (axisItem) { return compareValues(pointValue, axisItem.value); });\n }\n });\n\n function compareValues(a, b) {\n if (a instanceof Date && b instanceof Date) {\n return dataviz.dateEquals(a, b);\n }\n\n return a === b;\n }\n\n function updateAxisOptions$2(targetOptions, axisIndex, vertical, options) {\n var axisOptions = ([].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis))[axisIndex];\n deepExtend(axisOptions, options);\n }\n\n setDefaultOptions(HeatmapPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n\n deepExtend(HeatmapPlotArea.prototype, PlotAreaEventsMixin);\n\n var COLOR = \"color\";\n var FIRST = \"first\";\n var FROM = \"from\";\n var MAX = \"max\";\n var MIN = \"min\";\n var NOTE_TEXT = \"noteText\";\n var SUMMARY_FIELD = \"summary\";\n var TO = \"to\";\n\n PlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA,\n CANDLESTICK, OHLC, BULLET, VERTICAL_BULLET, BOX_PLOT, VERTICAL_BOX_PLOT,\n RANGE_COLUMN, RANGE_BAR, WATERFALL, HORIZONTAL_WATERFALL, RANGE_AREA, VERTICAL_RANGE_AREA ].concat( TRENDLINE_SERIES\n ));\n\n PlotAreaFactory.current.register(XYPlotArea, [\n SCATTER, SCATTER_LINE, BUBBLE ].concat( TRENDLINE_SERIES\n ));\n\n PlotAreaFactory.current.register(PiePlotArea, [ PIE ]);\n PlotAreaFactory.current.register(DonutPlotArea, [ DONUT ]);\n PlotAreaFactory.current.register(FunnelPlotArea, [ FUNNEL, PYRAMID ]);\n\n PlotAreaFactory.current.register(PolarPlotArea, [\n POLAR_AREA, POLAR_LINE, POLAR_SCATTER ].concat( TRENDLINE_SERIES\n ));\n\n PlotAreaFactory.current.register(RadarPlotArea, [\n RADAR_AREA, RADAR_COLUMN, RADAR_LINE ].concat( TRENDLINE_SERIES\n ));\n\n PlotAreaFactory.current.register(HeatmapPlotArea, [ HEATMAP ]);\n\n SeriesBinder.current.register(\n [ BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA ],\n [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, ERROR_LOW_FIELD, ERROR_HIGH_FIELD, DRILLDOWN_FIELD ]\n );\n\n SeriesBinder.current.register(\n [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n [ FROM, TO ], [ CATEGORY, COLOR, NOTE_TEXT, DRILLDOWN_FIELD ]\n );\n\n SeriesBinder.current.register(\n [ WATERFALL, HORIZONTAL_WATERFALL ],\n [ VALUE ], [ CATEGORY, COLOR, NOTE_TEXT, SUMMARY_FIELD, DRILLDOWN_FIELD ]\n );\n\n SeriesBinder.current.register([ POLAR_AREA, POLAR_LINE, POLAR_SCATTER ], [ X, Y ], [ COLOR, DRILLDOWN_FIELD ]);\n SeriesBinder.current.register([ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ], [ VALUE ], [ CATEGORY, COLOR, DRILLDOWN_FIELD ]);\n\n SeriesBinder.current.register(\n [ FUNNEL, PYRAMID ],\n [ VALUE ], [ CATEGORY, COLOR, \"visibleInLegend\", \"visible\", DRILLDOWN_FIELD ]\n );\n\n DefaultAggregates.current.register(\n [ BAR, COLUMN, LINE, VERTICAL_LINE, AREA, VERTICAL_AREA, WATERFALL, HORIZONTAL_WATERFALL ],\n { value: MAX, color: FIRST, noteText: FIRST, errorLow: MIN, errorHigh: MAX }\n );\n\n DefaultAggregates.current.register(\n [ RANGE_COLUMN, RANGE_BAR, RANGE_AREA, VERTICAL_RANGE_AREA ],\n { from: MIN, to: MAX, color: FIRST, noteText: FIRST }\n );\n\n DefaultAggregates.current.register(\n [ RADAR_AREA, RADAR_COLUMN, RADAR_LINE ],\n { value: MAX, color: FIRST }\n );\n\n SeriesBinder.current.register(\n [ SCATTER, SCATTER_LINE, BUBBLE ],\n [ X, Y ], [ COLOR, NOTE_TEXT, X_ERROR_LOW_FIELD, X_ERROR_HIGH_FIELD, Y_ERROR_LOW_FIELD, Y_ERROR_HIGH_FIELD ]\n );\n\n SeriesBinder.current.register(\n [ BUBBLE ], [ X, Y, \"size\" ], [ COLOR, CATEGORY, NOTE_TEXT ]\n );\n\n SeriesBinder.current.register(\n [ HEATMAP ],\n [ X, Y, VALUE ], [ COLOR, NOTE_TEXT ]\n );\n\n SeriesBinder.current.register(\n [ CANDLESTICK, OHLC ],\n [ \"open\", \"high\", \"low\", \"close\" ], [ CATEGORY, COLOR, \"downColor\", NOTE_TEXT ]\n );\n\n DefaultAggregates.current.register(\n [ CANDLESTICK, OHLC ],\n { open: MAX, high: MAX, low: MIN, close: MAX,\n color: FIRST, downColor: FIRST, noteText: FIRST }\n );\n\n SeriesBinder.current.register(\n [ BOX_PLOT, VERTICAL_BOX_PLOT ],\n [ \"lower\", \"q1\", \"median\", \"q3\", \"upper\", \"mean\", \"outliers\" ], [ CATEGORY, COLOR, NOTE_TEXT, DRILLDOWN_FIELD ]\n );\n\n DefaultAggregates.current.register(\n [ BOX_PLOT, VERTICAL_BOX_PLOT ],\n { lower: MAX, q1: MAX, median: MAX, q3: MAX, upper: MAX, mean: MAX, outliers: FIRST,\n color: FIRST, noteText: FIRST }\n );\n\n SeriesBinder.current.register(\n [ BULLET, VERTICAL_BULLET ],\n [ \"current\", \"target\" ], [ CATEGORY, COLOR, \"visibleInLegend\", NOTE_TEXT, DRILLDOWN_FIELD ]\n );\n\n DefaultAggregates.current.register(\n [ BULLET, VERTICAL_BULLET ],\n { current: MAX, target: MAX, color: FIRST, noteText: FIRST }\n );\n\n SeriesBinder.current.register(\n [ PIE, DONUT ],\n [ VALUE ], [ CATEGORY, COLOR, \"explode\", \"visibleInLegend\", \"visible\", DRILLDOWN_FIELD ]\n );\n\n var AXIS_NAMES = [ CATEGORY, VALUE, X, Y ];\n\n var MOUSEDOWN = \"mousedown\";\n var MOUSEMOVE = \"mousemove\";\n var CONTEXTMENU = \"contextmenu\";\n var MOUSELEAVE = \"mouseleave\";\n var KEYDOWN = \"keydown\";\n var FOCUS = \"focus\";\n var BLUR = \"blur\";\n var MOUSEMOVE_DELAY = 20;\n\n var Chart = Class.extend({\n init: function(element, userOptions, themeOptions, context) {\n var this$1$1 = this;\n if (context === void 0) { context = {}; }\n\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new services.ChartService(this, context);\n this.chartService.theme = themeOptions;\n\n this._initElement(element);\n\n var options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n this._focusState = {};\n\n this._initHandlers();\n this._initSurface();\n\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\n this$1$1.fontLoaded = true;\n if (!this$1$1._destroyed) {\n this$1$1.trigger('init');\n this$1$1._redraw();\n this$1$1._attachEvents();\n }\n });\n },\n\n _initElement: function(element) {\n this._setElementClass(element);\n element.style.position = \"relative\";\n element.tabIndex = element.getAttribute(\"tabindex\") ? element.getAttribute(\"tabindex\") : 0;\n // To support user agents and assistive technologies based on the ARIA 1.0 specification, authors may wish to include the document role as a fallback value, in the form role=\"graphics-document document\".\n element.setAttribute(\"role\", \"graphics-document document\");\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n this.element = element;\n },\n\n _setElementClass: function(element) {\n dataviz.addClass(element, \"k-chart\");\n },\n\n _initTheme: function(options, themeOptions) {\n var seriesCopies = [];\n var series = options.series || [];\n\n for (var i = 0; i < series.length; i++) {\n seriesCopies.push($.extend({}, series[i]));\n }\n options.series = seriesCopies;\n\n resolveAxisAliases(options);\n this.applyDefaults(options, themeOptions);\n\n // Clean up default if not overriden by data attributes\n if (options.seriesColors === null) {\n delete options.seriesColors;\n }\n\n if (isString(options.title)) {\n options.title = { text: options.title };\n }\n\n this.options = deepExtend({}, themeOptions, options);\n this.applySeriesColors();\n },\n\n getSize: function() {\n var chartArea = this.options.chartArea || {};\n var width = chartArea.width ? parseInt(chartArea.width, 10) : Math.floor(this.element.offsetWidth);\n var height = chartArea.height ? parseInt(chartArea.height, 10) : Math.floor(this.element.offsetHeight);\n\n return {\n width: width,\n height: height\n };\n },\n\n resize: function(force) {\n var size = this.getSize();\n var currentSize = this._size;\n var hasSize = size.width > 0 || size.height > 0;\n\n if (force || hasSize && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger(\"resize\", size);\n } else if (hasSize && this._selections && dataviz.find(this._selections, function (s) { return !s.visible; })) {\n this._destroySelections();\n this._setupSelection();\n }\n },\n\n _resize: function() {\n this._noTransitionsRedraw();\n },\n\n redraw: function(paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\n\n if (paneName) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPane(paneName);\n plotArea.redraw(pane);\n } else {\n this._redraw();\n }\n },\n\n getAxis: function(name) {\n return findAxisByName(name, this._plotArea.axes);\n },\n\n findAxisByName: function(name) {\n return this.getAxis(name);\n },\n\n findPaneByName: function(name) {\n var panes = this._plotArea.panes;\n\n for (var idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(panes[idx]);\n }\n }\n },\n\n findPaneByIndex: function(idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(panes[idx]);\n }\n },\n\n plotArea: function() {\n return new ChartPlotArea(this._plotArea);\n },\n\n toggleHighlight: function(show, filter) {\n var plotArea = this._plotArea;\n var firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n var points;\n\n if (isFunction(filter)) {\n points = plotArea.filterPoints(filter);\n } else {\n var seriesName, categoryName;\n if (isObject(filter)) {\n seriesName = filter.series;\n categoryName = filter.category;\n } else {\n seriesName = categoryName = filter;\n }\n\n if (firstSeries.type === DONUT) {\n points = pointByCategoryName(plotArea.pointsBySeriesName(seriesName), categoryName);\n } else if (inArray(firstSeries.type, [ PIE, FUNNEL, PYRAMID ])) {\n points = pointByCategoryName((plotArea.charts[0] || {}).points, categoryName);\n } else {\n points = plotArea.pointsBySeriesName(seriesName);\n }\n }\n\n if (points) {\n this.togglePointsHighlight(show, points);\n }\n },\n\n togglePointsHighlight: function(show, points) {\n var highlight = this._highlight;\n for (var idx = 0; idx < points.length; idx++) {\n highlight.togglePointHighlight(points[idx], show);\n }\n },\n\n showTooltip: function(filter) {\n var shared = this._sharedTooltip();\n var ref = this;\n var tooltip = ref._tooltip;\n var plotArea = ref._plotArea;\n var point, categoryIndex;\n\n if (isFunction(filter)) {\n point = plotArea.findPoint(filter);\n if (point && shared) {\n categoryIndex = point.categoryIx;\n }\n } else if (shared && defined(filter)) {\n categoryIndex = plotArea.categoryAxis.categoryIndex(filter);\n }\n\n if (shared) {\n if (categoryIndex >= 0) {\n var points = this._plotArea.pointsByCategoryIndex(categoryIndex);\n tooltip.showAt(points);\n }\n } else if (point) {\n tooltip.show(point);\n }\n },\n\n hideTooltip: function() {\n this._tooltip.hide();\n },\n\n _initSurface: function() {\n var surface = this.surface;\n var wrap = this._surfaceWrap();\n\n var chartArea = this.options.chartArea || {};\n if (chartArea.width) {\n dataviz.elementSize(wrap, { width: chartArea.width });\n }\n if (chartArea.height) {\n dataviz.elementSize(wrap, { height: chartArea.height });\n }\n\n if (!surface || surface.options.type !== this.options.renderAs) {\n this._destroySurface();\n\n this.surface = drawing.Surface.create(wrap, {\n type: this.options.renderAs\n });\n\n this.surface.bind(\"mouseenter\", this._surfaceMouseenterHandler);\n this.surface.bind(\"mouseleave\", this._surfaceMouseleaveHandler);\n\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n\n _surfaceWrap: function() {\n return this.element;\n },\n\n _redraw: function() {\n var model = this._getModel();\n this._size = {\n width: model.options.width,\n height: model.options.height\n };\n\n this._destroyView();\n\n this._setElementAccessibilityAttributes();\n\n this._model = model;\n this._plotArea = model._plotArea;\n this._legend = model._legend;\n\n model.renderVisual();\n\n if (this.options.transitions !== false) {\n model.traverse(function(element) {\n if (element.animation) {\n element.animation.setup();\n }\n });\n }\n\n this._initSurface();\n this.surface.draw(model.visual);\n\n if (this.options.transitions !== false) {\n model.traverse(function(element) {\n if (element.animation) {\n element.animation.play();\n }\n });\n }\n\n this._tooltip = this._createTooltip();\n this._highlight = new Highlight();\n this._setupSelection();\n this._createPannable();\n this._createZoomSelection();\n this._createMousewheelZoom();\n\n this.trigger(RENDER);\n triggerPaneRender(this._plotArea.panes);\n\n if (!this._navState) {\n this._cancelDomEvents();\n }\n\n this._redrawFocusHighlight();\n },\n\n _redrawFocusHighlight: function() {\n var ref = this;\n var ref_focusState = ref._focusState;\n var legendInFocus = ref_focusState.legendInFocus;\n var preserveHighlight = ref_focusState.preserveHighlight;\n\n if (legendInFocus && preserveHighlight) {\n this._focusElement(this._getFocusedLegendItem(), false);\n this._focusState.preserveHighlight = false;\n }\n },\n\n _setElementAccessibilityAttributes: function() {\n var titleOptions = this.options.title;\n var title = isString(titleOptions) ? titleOptions : (titleOptions.description || titleOptions.text);\n\n if (title) {\n this.element.setAttribute(\"aria-roledescription\", title);\n }\n },\n\n exportVisual: function(exportOptions) {\n var visual;\n if (exportOptions && (exportOptions.width || exportOptions.height || exportOptions.options)) {\n var currentOptions = this.options;\n var options = deepExtend({}, exportOptions.options, {\n chartArea: {\n width: exportOptions.width,\n height: exportOptions.height\n }\n });\n\n clearMissingValues(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions, options);\n this._initTheme(this.options, this._theme);\n this.bindCategories();\n\n var model = this._getModel();\n\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n\n visual = model.visual;\n\n this.options = currentOptions;\n } else {\n visual = this.surface.exportVisual();\n }\n\n return visual;\n },\n\n _sharedTooltip: function() {\n return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip && this.options.tooltip.shared;\n },\n\n _createPannable: function() {\n var options = this.options;\n if (options.pannable !== false) {\n this._pannable = new Pannable(this._plotArea, options.pannable);\n }\n },\n\n _createZoomSelection: function() {\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n if (zoomable !== false && selection !== false) {\n this._zoomSelection = new ZoomSelection(this, selection);\n }\n },\n\n _createMousewheelZoom: function() {\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel;\n if (zoomable !== false && mousewheel !== false) {\n this._mousewheelZoom = new MousewheelZoom(this, mousewheel);\n }\n },\n\n _toggleDragZoomEvents: function() {\n var pannable = this.options.pannable;\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n var mousewheel = (zoomable || {}).mousewheel;\n var allowDrag = !pannable && (zoomable === false || selection === false) && !this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ]);\n var allowZoom = (zoomable === false || mousewheel === false) && !this.requiresHandlers([ ZOOM_START, ZOOM, ZOOM_END ]);\n var element = this.element;\n\n if (this._dragZoomEnabled && allowDrag && allowZoom) {\n element.style.touchAction = this._touchAction || '';\n this._dragZoomEnabled = false;\n } else if (!this._dragZoomEnabled && !(allowDrag && allowZoom)) {\n element.style.touchAction = \"none\";\n\n this._dragZoomEnabled = true;\n }\n\n this._toggleDomEvents(!allowDrag, !allowZoom);\n },\n\n _toggleDomEvents: function(drag, zoom) {\n var domEvents = this.domEvents;\n if (!domEvents) {\n return;\n }\n\n if (domEvents.toggleDrag) {\n domEvents.toggleDrag(drag);\n }\n\n if (domEvents.toggleZoom) {\n domEvents.toggleZoom(zoom);\n }\n },\n\n _createTooltip: function() {\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var tooltip;\n\n if (this._sharedTooltip()) {\n tooltip = this._createSharedTooltip(tooltipOptions);\n } else {\n tooltip = new Tooltip(this.chartService, tooltipOptions);\n }\n\n return tooltip;\n },\n\n _createSharedTooltip: function(options) {\n return new SharedTooltip(this._plotArea, options);\n },\n\n applyDefaults: function(options, themeOptions) {\n applyAxisDefaults(options, themeOptions);\n applySeriesDefaults(options, themeOptions);\n },\n\n applySeriesColors: function() {\n var options = this.options;\n var series = options.series;\n var colors = options.seriesColors || [];\n\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var seriesColor = colors[i % colors.length];\n var defaults = currentSeries._defaults;\n\n currentSeries.color = currentSeries.color || seriesColor;\n if (defaults) {\n defaults.color = defaults.color || seriesColor;\n }\n }\n },\n\n _getModel: function() {\n var options = this.options;\n var plotArea = this._createPlotArea();\n var model = new dataviz.RootElement(this._modelOptions());\n model.chart = this;\n model._plotArea = plotArea;\n\n var title = Title.buildTitle(options.title);\n var subtitle = Title.buildTitle(options.subtitle, {\n align: options.title.align,\n position: options.title.position\n });\n model.append.apply(model, Title.orderTitles([title, subtitle]));\n\n if (options.legend && options.legend.visible) {\n var legend = new Legend(plotArea.options.legend, this.chartService);\n model.append(legend);\n model._legend = legend;\n }\n model.append(plotArea);\n model.reflow();\n\n return model;\n },\n\n _modelOptions: function() {\n var options = this.options;\n var size = this.getSize();\n\n return deepExtend({\n transitions: options.transitions,\n width: size.width || datavizConstants.DEFAULT_WIDTH,\n height: size.height || datavizConstants.DEFAULT_HEIGHT\n }, options.chartArea);\n },\n\n _createPlotArea: function(skipSeries) {\n var options = this.options;\n\n var plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n\n return plotArea;\n },\n\n _setupSelection: function() {\n var this$1$1 = this;\n\n var ref = this;\n var axes = ref._plotArea.axes;\n var selections = this._selections = [];\n\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var options = axis.options;\n if (axis instanceof CategoryAxis && options.select && !options.vertical) {\n var range = axis.range();\n\n var selection = new Selection(this$1$1, axis,\n deepExtend({ min: range.min, max: range.max }, options.select)\n );\n\n selections.push(selection);\n }\n }\n },\n\n _selectStart: function(e) {\n return this.trigger(SELECT_START, e);\n },\n\n _select: function(e) {\n return this.trigger(SELECT, e);\n },\n\n _selectEnd: function(e) {\n return this.trigger(SELECT_END, e);\n },\n\n _initHandlers: function() {\n this._clickHandler = this._click.bind(this);\n this._keydownHandler = this._keydown.bind(this);\n this._focusHandler = this._focus.bind(this);\n this._blurHandler = this._blur.bind(this);\n this._mousedownHandler = this._mousedown.bind(this);\n this._mousewheelHandler = this._mousewheel.bind(this);\n this._mouseleaveHandler = this._mouseleave.bind(this);\n this._surfaceMouseenterHandler = this._mouseover.bind(this);\n this._surfaceMouseleaveHandler = this._mouseout.bind(this);\n\n this._mousemove = kendo.throttle(\n this._mousemove.bind(this),\n MOUSEMOVE_DELAY\n );\n },\n\n addObserver: function(observer) {\n if (observer) {\n this.observers.push(observer);\n }\n },\n\n removeObserver: function(observer) {\n var index = this.observers.indexOf(observer);\n if (index >= 0) {\n this.observers.splice(index, 1);\n }\n },\n\n requiresHandlers: function(eventNames) {\n var observers = this.observers;\n for (var idx = 0; idx < observers.length; idx++) {\n if (observers[idx].requiresHandlers(eventNames)) {\n return true;\n }\n }\n },\n\n trigger: function(name, args) {\n if (args === void 0) { args = {}; }\n\n args.sender = this;\n\n if (name === SHOW_TOOLTIP) {\n args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n } else if (name === SERIES_OVER) {\n this._updateDrilldownPoint(args.point);\n } else if (name === SERIES_LEAVE) {\n this._resetDrilldownPoint();\n } else if (name === SERIES_CLICK) {\n this._focusPoint(args.point);\n this._startDrilldown(args.point);\n } else if (name === LEGEND_ITEM_CLICK) {\n this._focusLegendItem(args);\n }\n\n var observers = this.observers;\n var isDefaultPrevented = false;\n for (var idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n\n return isDefaultPrevented;\n },\n\n _attachEvents: function() {\n var element = this.element;\n\n this._touchAction = element.style.touchAction;\n\n var obj;\n bindEvents(element, ( obj = {}, obj[ CONTEXTMENU ] = this._clickHandler, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj[ MOUSELEAVE ] = this._mouseleaveHandler, obj[ KEYDOWN ] = this._keydownHandler, obj[ MOUSEDOWN ] = this._mousedownHandler, obj[ FOCUS ] = this._focusHandler, obj[ BLUR] = this._blurHandler, obj ));\n\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(element, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mousemove, obj$1 ));\n }\n\n this.domEvents = services.DomEventsBuilder.create(this.element, {\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n\n this._toggleDragZoomEvents();\n },\n\n _mouseleave: function(e) {\n if (this._hoveredPoint) {\n this._hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n\n if (this._plotAreaHovered) {\n this._plotAreaHovered = false;\n this.trigger(PLOT_AREA_LEAVE);\n }\n\n if (this._hasInactiveOpacity() && this._activeChartInstance) {\n this._applySeriesOpacity(this._activeChartInstance.children, null, true);\n this._updateSeriesOpacity(null, true);\n }\n },\n\n _cancelDomEvents: function() {\n if (this.domEvents && this.domEvents.cancel) {\n this.domEvents.cancel();\n }\n },\n\n _gesturestart: function(e) {\n if (this._mousewheelZoom && !this._stopChartHandlers(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this._clearFocusedElement();\n this.surface.suspendTracking();\n }\n },\n\n _gestureend: function(e) {\n if (this._zooming && !this._stopChartHandlers(e)) {\n if (this.surface) {\n this.surface.resumeTracking();\n }\n this._zooming = false;\n this.trigger(ZOOM_END, {});\n }\n },\n\n _gesturechange: function(e) {\n var mousewheelZoom = this._mousewheelZoom;\n\n if (mousewheelZoom && !this._stopChartHandlers(e)) {\n e.preventDefault();\n var previousGestureDistance = this._gestureDistance;\n var scaleDelta = -e.distance / previousGestureDistance + 1;\n\n if (Math.abs(scaleDelta) >= 0.1) {\n scaleDelta = Math.round(scaleDelta * 10);\n\n this._gestureDistance = e.distance;\n var args = { delta: scaleDelta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n var coords = this._eventCoordinates(e);\n\n if (!this._zooming) {\n this._zooming = true;\n }\n\n var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta, coords);\n if (ranges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n }\n }\n }\n },\n\n _mouseout: function(e) {\n if (e.element) {\n var element = this._drawingChartElement(e.element, e);\n\n if (element && element.leave) {\n element.leave(this, e.originalEvent);\n }\n }\n },\n\n _start: function(e) {\n var coords = this._eventCoordinates(e);\n\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n\n if (this.requiresHandlers([ DRAG_START, DRAG, DRAG_END ])) {\n this._startNavigation(e, coords, DRAG_START);\n }\n\n if (this._pannable && this._pannable.start(e)) {\n this.surface.suspendTracking();\n this._unsetActivePoint();\n this._clearFocusedElement();\n this._suppressHover = true;\n this.chartService.panning = true;\n }\n\n if (this._zoomSelection) {\n if (this._zoomSelection.start(e)) {\n this.trigger(ZOOM_START, { axisRanges: axisRanges(this._plotArea.axes), originalEvent: e });\n }\n }\n },\n\n _move: function(e) {\n var ref = this;\n var state = ref._navState;\n var pannable = ref._pannable;\n\n if (this._stopChartHandlers(e)) {\n return;\n }\n\n if (pannable) {\n var ranges = pannable.move(e);\n\n if (ranges && !this.trigger(DRAG, { axisRanges: ranges, originalEvent: e })) {\n pannable.pan();\n }\n } else if (state) {\n var ranges$1 = {};\n var axes = state.axes;\n\n for (var i = 0; i < axes.length; i++) {\n var currentAxis = axes[i];\n var axisName = currentAxis.options.name;\n if (axisName) {\n var axis = currentAxis.options.vertical ? e.y : e.x;\n var delta = axis.startLocation - axis.location;\n\n if (delta !== 0) {\n ranges$1[currentAxis.options.name] = currentAxis.translateRange(delta);\n }\n }\n }\n\n state.axisRanges = ranges$1;\n this.trigger(DRAG, {\n axisRanges: ranges$1,\n originalEvent: e\n });\n }\n\n if (this._zoomSelection) {\n this._zoomSelection.move(e);\n }\n },\n\n _end: function(e) {\n if (this._stopChartHandlers(e)) {\n return;\n }\n\n var pannable = this._pannable;\n if (pannable && pannable.end(e)) {\n this.surface.resumeTracking();\n this.trigger(DRAG_END, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n this._suppressHover = false;\n this.chartService.panning = false;\n } else {\n this._endNavigation(e, DRAG_END);\n }\n\n if (this._zoomSelection) {\n var ranges = this._zoomSelection.end(e);\n if (ranges && !this.trigger(ZOOM, { axisRanges: ranges, originalEvent: e })) {\n this._zoomSelection.zoom();\n this.trigger(ZOOM_END, { axisRanges: ranges, originalEvent: e });\n }\n }\n },\n\n _stopChartHandlers: function(e) {\n var selections = this._selections || [];\n if (!selections.length) {\n return false;\n }\n\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n if (pane) {\n for (var idx = 0; idx < selections.length; idx++) {\n if (selections[idx].onPane(pane)) {\n return true;\n }\n }\n }\n },\n\n _mousewheelZoomRate: function() {\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel || {};\n return valueOrDefault(mousewheel.rate, MOUSEWHEEL_ZOOM_RATE);\n },\n\n _mousewheel: function(e) {\n var this$1$1 = this;\n\n var delta = dataviz.mousewheelDelta(e);\n var mousewheelZoom = this._mousewheelZoom;\n var coords = this._eventCoordinates(e);\n\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n\n if (mousewheelZoom) {\n var args = { delta: delta, axisRanges: axisRanges(this._plotArea.axes), originalEvent: e };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n e.preventDefault();\n\n if (!this._zooming) {\n this._unsetActivePoint();\n this._clearFocusedElement();\n this.surface.suspendTracking();\n this._zooming = true;\n }\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n args.axisRanges = mousewheelZoom.updateRanges(delta, coords);\n if (args.axisRanges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n\n this._mwTimeout = setTimeout(function () {\n this$1$1.trigger(ZOOM_END, args);\n this$1$1._zooming = false;\n if (this$1$1.surface) {\n this$1$1.surface.resumeTracking();\n }\n }, MOUSEWHEEL_DELAY);\n }\n } else {\n var state = this._navState;\n if (!state) {\n var prevented = this._startNavigation(e, coords, ZOOM_START);\n if (!prevented) {\n state = this._navState;\n }\n }\n\n if (state) {\n var totalDelta = state.totalDelta || delta;\n state.totalDelta = totalDelta + delta;\n\n var axes = this._navState.axes;\n var ranges = {};\n\n for (var i = 0; i < axes.length; i++) {\n var currentAxis = axes[i];\n var axisName = currentAxis.options.name;\n if (axisName) {\n ranges[axisName] = currentAxis.scaleRange(-totalDelta * this$1$1._mousewheelZoomRate(), coords);\n }\n }\n\n this.trigger(ZOOM, {\n delta: delta,\n axisRanges: ranges,\n originalEvent: e\n });\n\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n\n this._mwTimeout = setTimeout(function () {\n this$1$1._endNavigation(e, ZOOM_END);\n }, MOUSEWHEEL_DELAY);\n }\n }\n },\n\n _startNavigation: function(e, coords, chartEvent) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPointPane(coords);\n var axes = plotArea.axes.slice(0);\n\n if (!pane) {\n return;\n }\n\n var ranges = axisRanges(axes);\n\n var prevented = this.trigger(chartEvent, {\n axisRanges: ranges,\n originalEvent: e\n });\n\n if (prevented) {\n this._cancelDomEvents();\n } else {\n this._suppressHover = true;\n this._unsetActivePoint();\n this._clearFocusedElement();\n this._navState = {\n axisRanges: ranges,\n pane: pane,\n axes: axes\n };\n }\n },\n\n _endNavigation: function(e, chartEvent) {\n if (this._navState) {\n this.trigger(chartEvent, {\n axisRanges: this._navState.axisRanges,\n originalEvent: e\n });\n this._suppressHover = false;\n this._navState = null;\n }\n },\n\n _getChartElement: function(e, match) {\n var element = this.surface.eventTarget(e);\n if (element) {\n return this._drawingChartElement(element, e, match);\n }\n },\n\n _drawingChartElement: function(element, e, match) {\n var current = element;\n var chartElement;\n while (current && !chartElement) {\n chartElement = current.chartElement;\n current = current.parent;\n }\n\n if (chartElement) {\n if (chartElement.aliasFor) {\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n }\n\n if (match) {\n chartElement = chartElement.closest(match);\n if (chartElement && chartElement.aliasFor) {\n chartElement = chartElement.aliasFor();\n }\n }\n\n return chartElement;\n }\n },\n\n _eventCoordinates: function(e) {\n var coordinates = dataviz.eventCoordinates(e);\n return this._toModelCoordinates(coordinates.x, coordinates.y);\n },\n\n _elementPadding: function() {\n if (!this._padding) {\n var ref = elementStyles(this.element, [ \"paddingLeft\", \"paddingTop\" ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n this._padding = {\n top: paddingTop,\n left: paddingLeft\n };\n }\n\n return this._padding;\n },\n\n _toDocumentCoordinates: function(point) {\n var padding = this._elementPadding();\n var offset = dataviz.elementOffset(this.element);\n\n return {\n left: round(point.x + padding.left + offset.left),\n top: round(point.y + padding.top + offset.top)\n };\n },\n\n _toModelCoordinates: function(clientX, clientY) {\n var element = this.element;\n var offset = dataviz.elementOffset(element);\n var padding = this._elementPadding();\n var inverseTransform = dataviz.elementScale(element).invert();\n var point = new GeometryPoint(\n clientX - offset.left - padding.left,\n clientY - offset.top - padding.top\n ).transform(inverseTransform);\n\n return new Point(point.x, point.y);\n },\n\n _tap: function(e) {\n var this$1$1 = this;\n\n var drawingElement = this.surface.eventTarget(e);\n var element = this._drawingChartElement(drawingElement, e);\n var sharedTooltip = this._sharedTooltip();\n\n if (!this._startHover(drawingElement, e) && !sharedTooltip) {\n this._unsetActivePoint();\n }\n\n if (sharedTooltip) {\n this._trackSharedTooltip(this._eventCoordinates(e), e, true);\n }\n\n this._propagateClick(element, e);\n\n //part of fix for hover issue on windows touch\n this.handlingTap = true;\n setTimeout(function () {\n this$1$1.handlingTap = false;\n }, 0);\n },\n\n _click: function(e) {\n var element = this._getChartElement(e);\n this._propagateClick(element, e);\n },\n\n _propagateClick: function(element, e) {\n var this$1$1 = this;\n\n var current = element;\n while (current) {\n if (current.click) {\n current.click(this$1$1, e);\n }\n\n current = current.parent;\n }\n },\n\n _isLegendBeforeChart: function() {\n var ref = this;\n var legendPosition = ref.options.legend.position;\n var legend = ref._legend;\n\n return legend && legend.hasItems() && (legendPosition === TOP || legendPosition === LEFT);\n },\n\n _focus: function() {\n if (!this._preventInitialPointFocus) {\n if (this._isLegendBeforeChart()) {\n this._focusFirstLegendItem();\n } else {\n this._focusFirstPoint();\n }\n }\n\n this._preventInitialPointFocus = false;\n },\n\n _keydown: function(e) {\n var ref = this;\n var ref_focusState = ref._focusState;\n var legendInFocus = ref_focusState.legendInFocus;\n var focusedElement = ref_focusState.focusedElement;\n var legend = ref._legend;\n\n if (e.key === datavizConstants.TAB) {\n this._clearFocusedElement();\n var isLegendBeforeChart = this._isLegendBeforeChart();\n\n if (legendInFocus && isLegendBeforeChart !== e.shiftKey) {\n this._navigatePoints(e);\n } else if (!legendInFocus && isLegendBeforeChart === e.shiftKey && legend.hasItems()) {\n this._navigateLegend(e);\n }\n } else if (e.key === datavizConstants.ESCAPE) {\n if (focusedElement) {\n e.stopPropagation();\n }\n\n if (this._tooltip && this._tooltip.visible) {\n this._hideTooltip();\n } else {\n this._blur();\n }\n } else if (e.key === datavizConstants.ENTER) {\n if (focusedElement) {\n this._focusState.preserveHighlight = true;\n this._propagateClick(focusedElement, e);\n this._focusElement(focusedElement);\n }\n } else if (!legendInFocus) {\n this._navigatePoints(e);\n } else {\n this._navigateLegend(e);\n }\n },\n\n _navigatePoints: function(e) {\n var this$1$1 = this;\n\n var ref = this;\n var focusState = ref._focusState;\n var plotArea = ref._plotArea;\n\n focusState.legendInFocus = false;\n\n if (!focusState.focusedElement) {\n this._focusFirstPoint();\n e.preventDefault();\n return;\n }\n\n var moveFocus = function (point) {\n focusState.focusedPoint = point;\n\n this$1$1._focusElement(focusState.focusedPoint);\n this$1$1._displayTooltip(point);\n e.preventDefault();\n };\n\n switch (e.key) {\n case datavizConstants.ARROW_RIGHT:\n moveFocus(plotArea.getPointToTheRight(focusState.focusedPoint));\n break;\n case datavizConstants.ARROW_LEFT:\n moveFocus(plotArea.getPointToTheLeft(focusState.focusedPoint));\n break;\n case datavizConstants.ARROW_DOWN:\n moveFocus(plotArea.getPointBelow(focusState.focusedPoint));\n break;\n case datavizConstants.ARROW_UP:\n moveFocus(plotArea.getPointAbove(focusState.focusedPoint));\n break;\n default:\n break;\n }\n },\n\n _navigateLegend: function(e) {\n var this$1$1 = this;\n\n var ref = this;\n var focusState = ref._focusState;\n var legend = ref._legend;\n var rtl = ref.chartService.rtl;\n\n focusState.legendInFocus = true;\n\n if (!focusState.focusedElement) {\n this._focusFirstLegendItem();\n e.preventDefault();\n return;\n }\n\n var itemsLength = legend.getItems().length;\n var moveFocus = function (cycleFunc) {\n focusState.focusedLegendItemIndex = cycleFunc(\n focusState.focusedLegendItemIndex,\n itemsLength\n );\n this$1$1._focusElement(this$1$1._getFocusedLegendItem());\n e.preventDefault();\n };\n\n switch (e.key) {\n case datavizConstants.ARROW_UP:\n case datavizConstants.ARROW_LEFT:\n moveFocus(rtl ? dataviz.cycleUp : dataviz.cycleDown);\n break;\n case datavizConstants.ARROW_DOWN:\n case datavizConstants.ARROW_RIGHT:\n moveFocus(rtl ? dataviz.cycleDown : dataviz.cycleUp);\n break;\n default:\n break;\n }\n },\n\n _focusFirstPoint: function() {\n var point = this._focusState.focusedPoint = this._plotArea.getFirstPoint();\n\n if (point) {\n this._focusElement(point);\n this._displayTooltip(point);\n }\n },\n\n _hasFocus: function() {\n return this.element.ownerDocument.activeElement === this.element;\n },\n\n _mousedown: function() {\n if (!this._hasFocus()) {\n this._preventInitialPointFocus = true;\n }\n },\n\n _focusChart: function() {\n if (!this._hasFocus()) {\n this._preventInitialPointFocus = true;\n this.element.focus();\n }\n },\n\n _focusPoint: function(point) {\n this._focusState.focusedPoint = point;\n\n this._focusChart();\n\n this._focusElement(point, true);\n },\n\n _focusFirstLegendItem: function() {\n var ref = this;\n var focusState = ref._focusState;\n\n focusState.focusedLegendItemIndex = 0;\n this._focusElement(this._getFocusedLegendItem());\n focusState.legendInFocus = true;\n\n this._hideTooltip();\n },\n\n _focusLegendItem: function(args) {\n var ref = this;\n var focusState = ref._focusState;\n\n focusState.focusedLegendItemIndex = this._legend\n .getItems()\n .findIndex(function (x) { return x.options.series.index === args.seriesIndex\n && x.options.pointIndex === args.pointIndex; });\n\n focusState.legendInFocus = true;\n\n this._focusChart();\n\n this._focusElement(this._getFocusedLegendItem(), true);\n },\n\n _getFocusedLegendItem: function() {\n var ref = this;\n var focusState = ref._focusState;\n var legend = ref._legend;\n\n return legend.getItems()[focusState.focusedLegendItemIndex];\n },\n\n _focusElement: function(element, omitHighlight) {\n var ref = this;\n var focusState = ref._focusState;\n\n this._clearFocusedElement();\n\n if (!element) {\n return;\n }\n\n focusState.focusedElement = element;\n\n this._setElementActiveDescendant(element);\n\n if (!omitHighlight) {\n element.focusVisual();\n\n if (focusState.legendInFocus) {\n var options = element.options;\n\n this._showSeriesInactiveOpacity(options.series.index, options.pointIndex);\n } else {\n this._showInactiveOpacity(element);\n }\n }\n },\n\n _clearFocusedElement: function() {\n var ref = this;\n var focusState = ref._focusState;\n\n if (!focusState) {\n return;\n }\n\n if (focusState.focusedElement) {\n focusState.focusedElement.clearFocusFromVisual();\n this._clearElementActiveDescendant();\n }\n\n focusState.focusedElement = null;\n },\n\n _setElementActiveDescendant: function(element) {\n if (this.options.renderAs === \"canvas\") {\n this._pseudoFocusedElement = this._createPseudoFocusedElement(element);\n this.element.append(this._pseudoFocusedElement);\n }\n\n this.element.setAttribute(datavizConstants.ARIA_ACTIVE_DESCENDANT, element._id);\n },\n\n _clearElementActiveDescendant: function() {\n if (this._pseudoFocusedElement) {\n this._pseudoFocusedElement.remove();\n this._pseudoFocusedElement = null;\n }\n\n this.element.removeAttribute(datavizConstants.ARIA_ACTIVE_DESCENDANT);\n },\n\n _createPseudoFocusedElement: function(element) {\n var pseudoElement = document.createElement(\"div\");\n var accessibilityOptions = element.options.accessibility;\n\n pseudoElement.id = element._id;\n pseudoElement.setAttribute(\"aria-label\", element.getAriaLabelText());\n pseudoElement.setAttribute(\"role\", accessibilityOptions.role);\n pseudoElement.setAttribute(\"aria-roledescription\", accessibilityOptions.ariaRoleDescription);\n\n var checked = accessibilityOptions.ariaChecked;\n if (defined(checked)) {\n pseudoElement.setAttribute(\"aria-checked\", checked);\n }\n\n return pseudoElement;\n },\n\n _blur: function() {\n this._focusState.legendInFocus = false;\n this._clearFocusedElement();\n this._hideInactiveOpacity();\n },\n\n _startHover: function(element, e) {\n if (this._suppressHover) {\n return false;\n }\n\n var point = this._drawingChartElement(element, e, function(element) {\n return (element.hover || element.over) && !(element instanceof PlotAreaBase);\n });\n\n var activePoint = this._activePoint;\n\n this._updateHoveredPoint(point, e);\n\n if (point && activePoint !== point && point.hover) {\n this._activePoint = point;\n\n if (!this._sharedTooltip() && !point.hover(this, e)) {\n this._displayTooltip(point);\n\n this._showInactiveOpacity(point);\n }\n }\n\n return point;\n },\n\n _displayTooltip: function(point) {\n var tooltipOptions = deepExtend({}, this.options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n this._tooltip.show(point);\n }\n },\n\n _hideTooltip: function() {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n\n _displayInactiveOpacity: function(activePoint, multipleSeries, highlightPoints) {\n var chartInstance = this._activeChartInstance = this._chartInstanceFromPoint(activePoint);\n if (!chartInstance) {\n return;\n }\n\n if (multipleSeries) {\n this._updateSeriesOpacity(activePoint);\n this._applySeriesOpacity(chartInstance.children, null, true);\n this._applySeriesOpacity(chartInstance.children, activePoint.series);\n this._highlight.show(highlightPoints || activePoint);\n } else {\n var inactivePoints;\n\n if (!chartInstance.supportsPointInactiveOpacity()) {\n this._highlight.show(activePoint);\n return;\n }\n\n inactivePoints = this._getInactivePoints(activePoint, chartInstance);\n\n if (inactivePoints && inactivePoints.length) {\n this._highlight.show(inactivePoints, 1 - this._getInactiveOpacityForSeries(activePoint.series));\n }\n }\n },\n\n _getInactivePoints: function(activePoint, chartInstance) {\n var allPoints = this._getAllPointsOfType(chartInstance, activePoint.constructor);\n\n return allPoints.filter(function (point) { return point !== activePoint; });\n },\n\n _getAllPointsOfType: function(container, type) {\n var this$1$1 = this;\n\n var points = [];\n\n for (var i = 0; i < container.children.length; i++) {\n var element = container.children[i];\n\n if (element.constructor === type) {\n points.push(element);\n } else if (element.children && element.children.length) {\n points = points.concat(this$1$1._getAllPointsOfType(element, type));\n }\n }\n\n return points;\n },\n\n _updateHoveredPoint: function(point, e) {\n var hoveredPoint = this._hoveredPoint;\n\n if (hoveredPoint && hoveredPoint !== point) {\n hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n\n if (point && hoveredPoint !== point && point.over) {\n this._hoveredPoint = point;\n point.over(this, e);\n }\n },\n\n _updateDrilldownPoint: function(point) {\n if (!point || !point.series) {\n return;\n }\n\n var ref = SeriesBinder.current.bindPoint(point.series, null, point.dataItem);\n var fields = ref.fields;\n if (fields.drilldown) {\n this._drilldownState = { cursor: this.element.style.cursor };\n this.element.style.cursor = 'pointer';\n }\n },\n\n _resetDrilldownPoint: function() {\n if (this._drilldownState) {\n this.element.style.cursor = this._drilldownState.cursor;\n this._drilldownState = null;\n }\n },\n\n _startDrilldown: function(point) {\n if (!point || !point.series) {\n return;\n }\n\n var series = point.series;\n var ref = SeriesBinder.current.bindPoint(series, null, point.dataItem);\n var fields = ref.fields;\n var value = fields.drilldown;\n if (value) {\n var args = { series: series, point: point, value: value, sender: this };\n this.trigger(DRILLDOWN, args);\n }\n },\n\n _updateSeriesOpacity: function(point, resetOpacity) {\n var this$1$1 = this;\n\n var plotArea = this._plotArea;\n var length = plotArea.series.length;\n\n for (var i = 0; i < length; i++) {\n var currSeries = plotArea.series[i];\n var defaultOpacity = this$1$1._getDefaultOpacityForSeries(currSeries);\n var inactiveOpacity = this$1$1._getInactiveOpacityForSeries(currSeries);\n\n if (!resetOpacity && currSeries !== point.series) {\n currSeries.defaultOpacity = defaultOpacity;\n currSeries.opacity = inactiveOpacity;\n\n if (currSeries.line) {\n currSeries.line.opacity = inactiveOpacity;\n }\n } else {\n currSeries.opacity = defaultOpacity;\n\n if (currSeries.line) {\n currSeries.line.opacity = defaultOpacity;\n }\n }\n }\n },\n\n _applySeriesOpacity: function(elements, activeSeries, reset, series) {\n var this$1$1 = this;\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var currSeries = element.series || series;\n var shouldHighlight = currSeries && (currSeries.highlight || {}).visible;\n\n if (shouldHighlight && element.visual) {\n var opacity = series ? series.opacity : element.series.opacity;\n if (currSeries !== activeSeries || reset) {\n element.visual.opacity(reset ? 1 : opacity);\n }\n }\n\n if (element.children && element.children.length) {\n this$1$1._applySeriesOpacity(element.children, activeSeries, reset, element.series);\n }\n }\n },\n\n _chartInstanceFromPoint: function(point) {\n var chartInstance = point.parent;\n\n while (chartInstance && !chartInstance.plotArea) {\n chartInstance = chartInstance.parent;\n }\n\n return chartInstance;\n },\n\n _showInactiveOpacity: function(point) {\n var multipleSeries = this._plotArea.series.length > 1;\n var hasInactiveOpacity = this._hasInactiveOpacity();\n\n if (hasInactiveOpacity) {\n this._displayInactiveOpacity(point, multipleSeries);\n } else {\n this._highlight.show(point);\n }\n },\n\n _hideInactiveOpacity: function(point) {\n var multipleSeries = this._plotArea.series.length > 1;\n var hasInactiveOpacity = this._hasInactiveOpacity();\n if (hasInactiveOpacity) {\n if (multipleSeries && this._activeChartInstance) {\n this._updateSeriesOpacity(point, true);\n this._applySeriesOpacity(this._activeChartInstance.children, null, true);\n this._activeChartInstance = null;\n }\n this._highlight && this._highlight.hide();\n this._activePoint = null;\n }\n },\n\n _hasInactiveOpacity: function() {\n var hasDefaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity !== undefined;\n var hasInactiveOpacity = this.options.series.filter(function (s) { return s.highlight.inactiveOpacity !== undefined; } ).length > 0;\n return hasDefaultInactiveOpacity || hasInactiveOpacity;\n },\n\n _getInactiveOpacityForSeries: function(series) {\n var defaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity;\n var seriesInactiveOpacity = series.highlight.inactiveOpacity;\n return seriesInactiveOpacity || defaultInactiveOpacity || series.opacity || datavizConstants.DEFAULT_SERIES_OPACITY;\n },\n\n _getDefaultOpacityForSeries: function(series) {\n return series.defaultOpacity || series.opacity || datavizConstants.DEFAULT_SERIES_OPACITY;\n },\n\n _mouseover: function(e) {\n var point = this._startHover(e.element, e.originalEvent);\n\n if (point && point.tooltipTracking && !this._mouseMoveTrackHandler && !this._sharedTooltip()) {\n this._mouseMoveTrackHandler = this._mouseMoveTracking.bind(this);\n var obj;\n bindEvents(document, ( obj = {}, obj[ MOUSEMOVE ] = this._mouseMoveTrackHandler, obj ));\n }\n },\n\n _mouseMoveTracking: function(e) {\n var ref = this;\n var options = ref.options;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n var point = ref._activePoint;\n var coords = this._eventCoordinates(e);\n\n if (this._plotArea.box.containsPoint(coords)) {\n if (point && point.tooltipTracking && point.series && point.parent.getNearestPoint) {\n var seriesPoint = point.parent.getNearestPoint(coords.x, coords.y, point.seriesIx);\n if (seriesPoint && seriesPoint !== point) {\n this._activePoint = seriesPoint;\n\n if (!seriesPoint.hover(this, e)) {\n var tooltipOptions = deepExtend({}, options.tooltip, seriesPoint.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(seriesPoint);\n }\n\n highlight.show(seriesPoint);\n }\n }\n }\n } else {\n var obj;\n unbindEvents(document, ( obj = {}, obj[ MOUSEMOVE ] = this._mouseMoveTrackHandler, obj ));\n this._unsetActivePoint();\n this._clearFocusedElement();\n this._mouseMoveTrackHandler = null;\n\n this._hideInactiveOpacity(point);\n }\n },\n\n _mousemove: function(e) {\n var coords = this._eventCoordinates(e);\n var plotArea = this._plotArea;\n\n this._trackCrosshairs(coords);\n\n if (plotArea.hover) {\n var overPlotArea = plotArea.backgroundContainsPoint(coords);\n if (overPlotArea) {\n this._plotAreaHovered = true;\n this._plotArea.hover(this, e);\n } else if (this._plotAreaHovered && !overPlotArea) {\n this._plotAreaHovered = false;\n this.trigger(PLOT_AREA_LEAVE);\n }\n }\n\n if (this._sharedTooltip()) {\n this._trackSharedTooltip(coords, e);\n }\n },\n\n _trackCrosshairs: function(coords) {\n var crosshairs = this._plotArea.crosshairs;\n\n for (var i = 0; i < crosshairs.length; i++) {\n var current = crosshairs[i];\n\n if (current.box.containsPoint(coords)) {\n current.showAt(coords);\n } else {\n current.hide();\n }\n }\n },\n\n _trackSharedTooltip: function(coords, e, toggle) {\n if (this._suppressHover) {\n return;\n }\n\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var plotArea = ref._plotArea;\n var categoryAxis = ref._plotArea.categoryAxis;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n\n if (plotArea.backgroundContainsPoint(coords)) {\n var index = categoryAxis.pointCategoryIndex(coords);\n if (index !== this._tooltipCategoryIx || (!this._sharedHighlight && toggle)) {\n var points = plotArea.pointsByCategoryIndex(index);\n var pointArgs = points.map(function(point) {\n return point.eventArgs(e);\n });\n var hoverArgs = pointArgs[0] || {};\n hoverArgs.categoryPoints = pointArgs;\n\n if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\n if (tooltipOptions.visible) {\n tooltip.showAt(points, coords);\n }\n\n highlight.show(points);\n\n this._sharedHighlight = true;\n } else {\n tooltip.hide();\n }\n\n this._tooltipCategoryIx = index;\n } else if (toggle && this._sharedHighlight) {\n highlight.hide();\n tooltip.hide();\n this._sharedHighlight = false;\n }\n } else if (this._sharedHighlight) {\n highlight.hide();\n tooltip.hide();\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n }\n },\n\n hideElements: function(options) {\n var plotArea = this._plotArea;\n this._mousemove.cancel();\n\n plotArea.hideCrosshairs();\n\n this._unsetActivePoint(options);\n },\n\n _unsetActivePoint: function(options) {\n var ref = this;\n var highlight = ref._highlight;\n\n this._activePoint = null;\n this._hoveredPoint = null;\n\n if (!options || !options.keepTooltipOpen) {\n this._hideTooltip();\n }\n\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n\n if (highlight) {\n highlight.hide();\n }\n },\n\n _deferRedraw: function() {\n this._redraw();\n },\n\n _clearRedrawTimeout: function() {\n if (this._redrawTimeout) {\n clearInterval(this._redrawTimeout);\n this._redrawTimeout = null;\n }\n },\n\n bindCategories: function() {\n var this$1$1 = this;\n\n var options = this.options;\n var definitions = [].concat(options.categoryAxis);\n\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n this$1$1.bindCategoryAxisFromSeries(axis, axisIx);\n }\n }\n },\n\n bindCategoryAxisFromSeries: function(axis, axisIx) {\n var this$1$1 = this;\n\n var uniqueCategories = new Set();\n var seriesOnAxis = this.options.series.filter(function (series) { return series.categoryAxis === axis.name || (!series.categoryAxis && axisIx === 0); });\n var hasCategoryBinding = seriesOnAxis.some(function (series) { return Boolean(series.categoryField); });\n var seriesWithData = seriesOnAxis.filter(function (series) { return series.data && series.data.length > 0; });\n var categorySamples = seriesWithData.map(function (series) { return SeriesBinder.current.bindPoint(series, 0).fields.category; });\n var dateAxis = categorySamples.reduce(function (result, firstCategory) { return result || isDateAxis(axis, firstCategory); }, false);\n var seriesWithBinding = seriesWithData.filter(function (series, seriesIx) { return series.categoryField || defined(categorySamples[seriesIx]); });\n\n seriesWithBinding.forEach(function (series) { return series.data.forEach(function (row, index) {\n var category = SeriesBinder.current.bindPoint(series, index).fields.category;\n if (dateAxis) {\n var date = parseDateCategory(category, row, this$1$1.chartService.intl);\n category = date ? date.getTime() : undefined;\n }\n\n uniqueCategories.add(category);\n }); });\n\n if (uniqueCategories.size > 0) {\n var categories = Array.from(uniqueCategories.values());\n if (dateAxis) {\n categories = categories.sort().map(function (time) { return time && new Date(time); });\n }\n\n axis.categories = categories;\n } else if (hasCategoryBinding) {\n axis.categories = [];\n }\n },\n\n _isBindable: function(series) {\n var valueFields = SeriesBinder.current.valueFields(series);\n var result = true;\n\n for (var i = 0; i < valueFields.length; i++) {\n var field = valueFields[i];\n if (field === VALUE) {\n field = \"field\";\n } else {\n field = field + \"Field\";\n }\n\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n\n return result;\n },\n\n _noTransitionsRedraw: function() {\n var options = this.options;\n var transitionsState;\n\n if (options.transitions !== false) {\n options.transitions = false;\n transitionsState = true;\n }\n\n this._redraw();\n\n if (transitionsState) {\n options.transitions = true;\n }\n },\n\n _legendItemHover: function(seriesIndex, pointIndex) {\n this._showSeriesInactiveOpacity(seriesIndex, pointIndex);\n },\n\n _showSeriesInactiveOpacity: function(seriesIndex, pointIndex) {\n var ref = this;\n var plotArea = ref._plotArea;\n var highlight = ref._highlight;\n var currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n var items;\n\n if (inArray(currentSeries.type, [ PIE, DONUT, FUNNEL, PYRAMID ])) {\n items = plotArea.findPoint(function(point) {\n return point.series.index === seriesIndex && point.index === pointIndex;\n });\n } else {\n items = plotArea.pointsBySeriesIndex(seriesIndex);\n }\n\n if (this._hasInactiveOpacity() && currentSeries.visible && items) {\n var multipleSeries = plotArea.series.length > 1;\n var point = items.length ? items[0] : items;\n\n this._displayInactiveOpacity(point, multipleSeries, items);\n } else {\n highlight.show(items);\n }\n },\n\n _shouldAttachMouseMove: function() {\n return this._plotArea.crosshairs.length || (this._tooltip && this._sharedTooltip()) || this.requiresHandlers([ PLOT_AREA_HOVER, PLOT_AREA_LEAVE ]);\n },\n\n updateMouseMoveHandler: function() {\n var obj;\n unbindEvents(this.element, ( obj = {}, obj[ MOUSEMOVE ] = this._mousemove, obj ));\n\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(this.element, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mousemove, obj$1 ));\n }\n },\n\n applyOptions: function(options, theme) {\n clearMissingValues(this._originalOptions, options);\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n\n if (theme) {\n this._theme = theme;\n this.chartService.theme = theme;\n }\n this._initTheme(this.options, this._theme);\n\n this._toggleDragZoomEvents();\n },\n\n setOptions: function(options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n },\n\n setDirection: function(rtl) {\n this.chartService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this._destroySurface();\n }\n },\n\n setIntlService: function(intl) {\n this.chartService.intl = intl;\n },\n\n noTransitionsRedraw: function() {\n this._noTransitionsRedraw();\n },\n\n destroy: function() {\n this._destroyed = true;\n\n var obj;\n unbindEvents(this.element, ( obj = {}, obj[ CONTEXTMENU ] = this._clickHandler, obj[ MOUSEWHEEL ] = this._mousewheelHandler, obj[ MOUSEMOVE ] = this._mousemove, obj[ MOUSELEAVE ] = this._mouseleaveHandler, obj[ KEYDOWN ] = this._keydownHandler, obj[ FOCUS ] = this._focusHandler, obj[ BLUR] = this._blurHandler, obj ));\n\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n\n if (this._mouseMoveTrackHandler) {\n var obj$1;\n unbindEvents(document, ( obj$1 = {}, obj$1[ MOUSEMOVE ] = this._mouseMoveTrackHandler, obj$1 ));\n }\n\n this._focusState = null;\n\n this._destroyView();\n\n this._destroySurface();\n\n this._clearRedrawTimeout();\n },\n\n _destroySurface: function() {\n var surface = this.surface;\n if (surface) {\n surface.unbind(\"mouseenter\", this._surfaceMouseenterHandler);\n surface.unbind(\"mouseleave\", this._surfaceMouseleaveHandler);\n surface.destroy();\n\n this.surface = null;\n }\n },\n\n _destroySelections: function() {\n var selections = this._selections;\n\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n },\n\n _destroyView: function() {\n var model = this._model;\n\n if (model) {\n model.destroy();\n this._model = null;\n }\n\n this._unsetActivePoint();\n this._clearFocusedElement();\n this._resetDrilldownPoint();\n this._destroySelections();\n\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n\n if (this._highlight) {\n this._highlight.destroy();\n }\n\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n });\n\n function resolveAxisAliases(options) {\n var aliases = AXIS_NAMES;\n\n for (var idx = 0; idx < aliases.length; idx++) {\n var alias = aliases[idx] + \"Axes\";\n if (options[alias]) {\n options[aliases[idx] + \"Axis\"] = options[alias];\n delete options[alias];\n }\n }\n }\n\n function pointByCategoryName(points, name) {\n if (points) {\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx].category === name) {\n return [ points[idx] ];\n }\n }\n }\n }\n\n function applyAxisDefaults(options, themeOptions) {\n var themeAxisDefaults = ((themeOptions || {}).axisDefaults) || {};\n var axisName, axisDefaults, axes;\n\n function mapAxisOptions(axisOptions) {\n var axisColor = (axisOptions || {}).color || axisDefaults.color;\n var result = deepExtend({},\n themeAxisDefaults,\n themeAxisDefaults[axisName],\n axisDefaults,\n axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n },\n axisOptions\n );\n\n delete result[axisName];\n\n return result;\n }\n\n for (var idx = 0; idx < AXIS_NAMES.length; idx++) {\n axisName = AXIS_NAMES[idx] + \"Axis\";\n axisDefaults = options.axisDefaults || {};\n axes = [].concat(options[axisName]);\n\n axes = axes.map(mapAxisOptions);\n\n options[axisName] = axes.length > 1 ? axes : axes[0];\n }\n }\n\n function applySeriesDefaults(options, themeOptions) {\n var series = options.series;\n var seriesLength = series.length;\n var seriesDefaults = options.seriesDefaults;\n var commonDefaults = deepExtend({}, options.seriesDefaults);\n var themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {};\n var commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n\n cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n\n for (var i = 0; i < seriesLength; i++) {\n var seriesType = series[i].type || options.seriesDefaults.type;\n\n var baseOptions = deepExtend(\n { data: [] },\n commonThemeDefaults,\n themeSeriesDefaults[seriesType],\n { tooltip: options.tooltip },\n commonDefaults,\n seriesDefaults[seriesType]\n );\n\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n series[i].data = series[i].data || [];\n }\n }\n\n function cleanupNestedSeriesDefaults(seriesDefaults) {\n delete seriesDefaults.bar;\n delete seriesDefaults.column;\n delete seriesDefaults.rangeColumn;\n delete seriesDefaults.line;\n delete seriesDefaults.verticalLine;\n delete seriesDefaults.pie;\n delete seriesDefaults.donut;\n delete seriesDefaults.area;\n delete seriesDefaults.verticalArea;\n delete seriesDefaults.scatter;\n delete seriesDefaults.scatterLine;\n delete seriesDefaults.bubble;\n delete seriesDefaults.candlestick;\n delete seriesDefaults.ohlc;\n delete seriesDefaults.boxPlot;\n delete seriesDefaults.bullet;\n delete seriesDefaults.verticalBullet;\n delete seriesDefaults.polarArea;\n delete seriesDefaults.polarLine;\n delete seriesDefaults.radarArea;\n delete seriesDefaults.radarLine;\n delete seriesDefaults.waterfall;\n }\n\n function axisRanges(axes) {\n var ranges = {};\n\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var axisName = axis.options.name;\n if (axisName) {\n ranges[axisName] = axis.range();\n }\n }\n\n return ranges;\n }\n\n var DATA_FIELDS = [ 'data', 'categories' ];\n\n function clearMissingValues(originalOptions, options) {\n for (var field in options) {\n if (!inArray(field, DATA_FIELDS) && dataviz.hasOwnProperty(options, field)) {\n var fieldValue = options[field];\n var originalValue = originalOptions[field];\n if (defined(originalValue)) {\n var nullValue = fieldValue === null;\n if ((nullValue || !defined(fieldValue))) {\n delete originalOptions[field];\n if (nullValue) {\n delete options[field];\n }\n } else if (originalValue && isObject(fieldValue)) {\n if (isObject(originalValue)) {\n clearMissingValues(originalValue, fieldValue);\n }\n }\n }\n }\n }\n }\n\n function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\n }\n\n setDefaultOptions(Chart, {\n renderAs: \"\",\n chartArea: {},\n legend: {\n visible: true,\n labels: {},\n accessibility: {\n highlight: {\n border: {\n opacity: 1,\n color: BLACK,\n width: 2\n }\n }\n }\n },\n categoryAxis: {},\n seriesDefaults: {\n type: COLUMN,\n data: [],\n highlight: {\n visible: true\n },\n labels: {},\n negativeValues: {\n visible: false\n },\n accessibility: {\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n zIndex: 200\n }\n }\n },\n series: [],\n seriesColors: null,\n tooltip: {\n visible: false\n },\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [ {} ],\n pannable: false,\n zoomable: false\n });\n\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Aggregates: Aggregates,\n AreaChart: AreaChart,\n AreaSegment: AreaSegment,\n AxisGroupRangeTracker: AxisGroupRangeTracker,\n Bar: Bar,\n BarChart: BarChart,\n BarLabel: BarLabel,\n BoxPlotChart: BoxPlotChart,\n BoxPlot: BoxPlot,\n BubbleChart: BubbleChart,\n Bullet: Bullet,\n BulletChart: BulletChart,\n CandlestickChart: CandlestickChart,\n Candlestick: Candlestick,\n CategoricalChart: CategoricalChart,\n CategoricalErrorBar: CategoricalErrorBar,\n CategoricalPlotArea: CategoricalPlotArea,\n Chart: Chart,\n ChartContainer: ChartContainer,\n ClipAnimation: ClipAnimation,\n ClusterLayout: ClusterLayout,\n Crosshair: Crosshair,\n CrosshairTooltip: CrosshairTooltip,\n DefaultAggregates: DefaultAggregates,\n DonutChart: DonutChart,\n DonutPlotArea: DonutPlotArea,\n DonutSegment: DonutSegment,\n ErrorBarBase: ErrorBarBase,\n ErrorRangeCalculator: ErrorRangeCalculator,\n Highlight: Highlight,\n SharedTooltip: SharedTooltip,\n Legend: Legend,\n LegendItem: LegendItem,\n LegendLayout: LegendLayout,\n LineChart: LineChart,\n LinePoint: LinePoint,\n LineSegment: LineSegment,\n Pane: Pane,\n PieAnimation: PieAnimation,\n PieChart: PieChart,\n PieChartMixin: PieChartMixin,\n PiePlotArea: PiePlotArea,\n PieSegment: PieSegment,\n PlotAreaBase: PlotAreaBase,\n PlotAreaEventsMixin: PlotAreaEventsMixin,\n PlotAreaFactory: PlotAreaFactory,\n PointEventsMixin: PointEventsMixin,\n RangeBar: RangeBar,\n RangeBarChart: RangeBarChart,\n RangeAreaPoint: RangeAreaPoint,\n RangeAreaChart: RangeAreaChart,\n ScatterChart: ScatterChart,\n ScatterErrorBar: ScatterErrorBar,\n ScatterLineChart: ScatterLineChart,\n Selection: Selection,\n SeriesAggregator: SeriesAggregator,\n SeriesBinder: SeriesBinder,\n SplineSegment: SplineSegment,\n SplineAreaSegment: SplineAreaSegment,\n StackWrap: StackWrap,\n Tooltip: Tooltip,\n OHLCChart: OHLCChart,\n OHLCPoint: OHLCPoint,\n WaterfallChart: WaterfallChart,\n WaterfallSegment: WaterfallSegment,\n XYPlotArea: XYPlotArea,\n MousewheelZoom: MousewheelZoom,\n ZoomSelection: ZoomSelection,\n Pannable: Pannable,\n ChartAxis: ChartAxis,\n ChartPane: ChartPane,\n ChartPlotArea: ChartPlotArea,\n findAxisByName: findAxisByName,\n anyHasZIndex: anyHasZIndex,\n appendIfNotNull: appendIfNotNull,\n areNumbers: areNumbers,\n bindSegments: bindSegments,\n categoriesCount: categoriesCount,\n countNumbers: countNumbers,\n equalsIgnoreCase: equalsIgnoreCase,\n evalOptions: evalOptions,\n filterSeriesByType: filterSeriesByType,\n parseDateCategory: parseDateCategory,\n getField: getField,\n hasGradientOverlay: hasGradientOverlay,\n hasValue: hasValue,\n isDateAxis: isDateAxis,\n segmentVisible: segmentVisible,\n singleItemOrArray: singleItemOrArray,\n createOutOfRangePoints: createOutOfRangePoints\n });\n\n })(window.kendo.jQuery);\n\n (function($, undefined$1) {\n\n const kendo = window.kendo;\n const dataviz = kendo.dataviz;\n const Widget = kendo.ui.Widget;\n\n const ChartBreadcrumb = Widget.extend({\n init: function(element, options) {\n Widget.fn.init.call(this, element, options);\n\n if (!options.chart) {\n throw new Error('ChartBreadcrumb: No Chart instance supplied as `options.chart`');\n }\n\n this._attachChartEvents();\n this._renderBreadcrumb();\n\n kendo.notify(this, dataviz.ui);\n },\n\n events: [],\n\n options: {\n name: \"ChartBreadcrumb\",\n rootItem: {\n type: 'rootitem',\n icon: 'home',\n text: 'Home',\n showIcon: true\n }\n },\n\n destroy: function() {\n if (this.breadcrumb) {\n this.breadcrumb.destroy();\n this.breadcrumb = null;\n }\n\n if (this.chart) {\n this.chart.unbind('drilldown', this._onChartDrilldown);\n this.chart.unbind('drilldownLevelChange', this._onChartDrilldownLevelChange);\n this.chart = null;\n }\n\n Widget.fn.destroy.call(this);\n },\n\n _attachChartEvents(deferred) {\n const options = this.options;\n\n if (typeof options.chart.resetDrilldownLevel === 'function') {\n this.chart = options.chart;\n } else if (typeof options.chart === 'string') {\n this.chart = $(options.chart).getKendoChart() || $('#' + options.chart).getKendoChart();\n\n if (!this.chart && !deferred) {\n setTimeout(() => this._attachChartEvents(true));\n return;\n }\n } else {\n throw new Error('ChartBreadcrumb: `options.chart` must be a Chart instance, element ID or a selector');\n }\n\n this._onChartDrilldown = this._onChartDrilldown.bind(this);\n this.chart.bind('drilldown', this._onChartDrilldown);\n\n this._onChartDrilldownLevelChange = this._onChartDrilldownLevelChange.bind(this);\n this.chart.bind('drilldownLevelChange', this._onChartDrilldownLevelChange);\n },\n\n _renderBreadcrumb: function() {\n const breadcrumbElement = $('