{"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","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","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","legendInFocus","TAB","isLegendBeforeChart","_navigatePoints","_navigateLegend","focusState","focusedElement","moveFocus","focusedPoint","_focusElement","ARROW_RIGHT","ARROW_LEFT","ARROW_DOWN","ARROW_UP","itemsLength","cycleFunc","focusedLegendItemIndex","_getFocusedLegendItem","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","_displayTooltip","_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","_hideTooltip","_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\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 (stack === true && otherStack !== true) {\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 = stack ? stack.group || stack : 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\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\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\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 _pointsByHorizontal: function(basePoint) {\n return [basePoint];\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\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 legendInFocus = ref._focusState.legendInFocus;\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 (!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 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 }\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\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 _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 tooltip = ref._tooltip;\n var highlight = ref._highlight;\n\n this._activePoint = null;\n this._hoveredPoint = null;\n\n if (tooltip && !(options && options.keepTooltipOpen)) {\n tooltip.hide();\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 var kendo = window.kendo;\n var dataviz = kendo.dataviz;\n var Widget = kendo.ui.Widget;\n\n var 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: function _attachChartEvents(deferred) {\n var this$1$1 = this;\n\n var 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(function () { return this$1$1._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 var this$1$1 = this;\n\n var breadcrumbElement = $('