{"version":3,"sources":["kendo.dataviz.chart.js"],"names":["f","define","$","normalizeText","text","String","replace","REPLACE_REGEX","SPACE","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","window","kendo","util","Class","extend","init","size","this","_size","_length","_map","put","value","map","entry","_head","_tail","newer","older","get","baselineMarkerSize","document","createElement","cssText","options","_cache","styleKey","cacheKey","cachedResult","baselineMarker","textStr","box","_baselineMarker","cloneNode","textContent","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","deepExtend","jQuery","amd","a1","a2","a3","findAxisByName","name","axes","idx","prepareUserOptions","ChartAxis","countNumbers","values","num","count","isNumber","getField","field","row","getter","evalOptions","context","state","dryRun","defaults","depth","needsEval","property","propValue","excluded","MAX_EXPAND_DEPTH","inArray","hasOwnProperty","isFunction","valueOrDefault","isObject","categoriesCount","series","seriesCount","categories","Math","max","data","toGeometryPoint","lintPoint","stepAxis","stepDir","axis","dir","result","GeometryPoint","anyHasZIndex","elements","defined","zIndex","hasGradientOverlay","overlay","gradient","forEach","callback","forEachReverse","areNumbers","hasValue","wrapData","seriesItem","isArray","paneID","ID","appendIfNotNull","array","element","segmentVisible","fields","index","pointVisibility","visible","bindSegments","pointData","points","sum","SeriesBinder","bindPoint","valueFields","isString","parseFloat","abs","total","equalsIgnoreCase","a","b","toLowerCase","filterSeriesByType","types","currentSeries","seriesTypes","concat","type","getDateField","intlService","parseDate","isDateAxis","axisOptions","sampleCategory","dateCategory","Date","DATE","singleItemOrArray","seriesMissingValues","missingValues","AREA_REGEX","test","stack","ZERO","INTERPOLATE","hasValue$1","item","dataviz","convertableToNumber","findNext","ref","pointHasValue","outPoint","start","min","getter$$1","hasItem","createOutOfRangePoints","range","minPoint","maxPoint","hasMinPoint","hasMaxPoint","_outOfRangeMinPoint","_outOfRangeMaxPoint","isSingleAxis","pane","some","vertical","axisGroupBox","axisBox","contentBox","lineBox","wrap","clone","Box","paneAnchor","anchor","isTransparent","color","setValue","fieldName","target","parentObj","indexOf","split","shift","updateAxisOptions","targetOptions","axesOptions","CategoryAxis","categoryAxis","valueAxis","axisIndex","groupSeries","axisIx","grep","s","preventDefault","_defaultPrevented","acceptKey","e","mouseKey","event","accept","ctrlKey","shiftKey","altKey","toChartAxisRanges","axisRanges","axisRange","ranges","createDiv","className","closestHandle","hasClasses","updateAxisOptions$1","yAxis","xAxis","tooltipAlignment","angle","horizontal","radians","rad","sine","round","sin","DEFAULT_PRECISION","cosine","cos","RAD_60","CENTER","RIGHT","LEFT","RAD_30","BOTTOM","TOP","intersection","b1","b2","ua","uat","x","y","ub","Point","xComparer","groupBySeriesIx","segments","segment","seriesSegments","seriesIx","updateAxisOptions$2","resolveAxisAliases","alias","aliases","AXIS_NAMES","pointByCategoryName","category","applyAxisDefaults","themeOptions","mapAxisOptions","axisColor","axisDefaults","themeAxisDefaults","axisName","line","labels","title","applySeriesDefaults","seriesType","baseOptions","seriesLength","seriesDefaults","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","tooltip","_defaults","bar","column","rangeColumn","verticalLine","pie","donut","area","verticalArea","scatter","scatterLine","bubble","candlestick","ohlc","boxPlot","bullet","verticalBullet","polarArea","polarLine","radarArea","radarLine","waterfall","sortDates","dates","comparer","dateComparer","uniqueDates","srcDates","last","transpose","rows","rowIx","colCount","colIx","rowCount","clearMissingValues","originalOptions","fieldValue","originalValue","nullValue","DATA_FIELDS","triggerPaneRender","panes","notifyRender","datavizConstants","MAX_VALUE","MIN_VALUE","VALUE","WHITE","CIRCLE","X","Y","BLACK","ARC","ChartElement","alignPathToPixel","setDefaultOptions","eventElement","getTemplate","TextBox","ShapeElement","getSpacing","CurveProcessor","append","styleValue","BoxElement","limitValue","elementStyles","bindEvents","services","unbindEvents","support","drawing","Path","Animation","AnimationFactory","Group","Color","geometry","transform","ChartPane","ChartPlotArea","Aggregates","STD_ERR","STD_DEV","percentRegex","standardDeviationRegex","ErrorRangeCalculator","browser","INITIAL_ANIMATION_DURATION","FADEIN","GLASS","BORDER_BRIGHTNESS","TOOLTIP_OFFSET","START_SCALE","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","X_ERROR_LOW_FIELD","X_ERROR_HIGH_FIELD","Y_ERROR_LOW_FIELD","Y_ERROR_HIGH_FIELD","LINE_MARKER_SIZE","GAP","ABOVE","BELOW","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","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","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","LOGARITHMIC","CATEGORY","INSIDE_END","INSIDE_BASE","OUTSIDE_END","MOUSEWHEEL","MOUSEWHEEL_DELAY","MOUSEWHEEL_ZOOM_RATE","constants","DEFAULT_ERROR_BAR_WIDTH","ErrorBarBase","CategoricalErrorBar","CategoricalChart","PointEventsMixin","NoteMixin","LinePoint","LineSegment","StepLineMixin","StepLineSegment","SplineSegment","LineChartMixin","ClipAnimation","ClipAnimationMixin","LineChart","AreaSegment","StepAreaSegment","SplineAreaSegment","AreaChart","AxisGroupRangeTracker","BarLabel","BAR_ALIGN_MIN_WIDTH","Bar","ClusterLayout","StackWrap","BarChart","Candlestick","CandlestickChart","BoxPlot","VerticalBoxPlot","BoxPlotChart","ScatterErrorBar","ScatterChart","Bubble","BubbleChart","Target","Bullet","BulletChart","BaseTooltip","CrosshairTooltip","Crosshair","ChartContainer","Pane","PlotAreaBase","allPaneAxes","PlotAreaEventsMixin","SeriesAggregator","DefaultAggregates","RangeBar","RangeBarChart","RangeLinePoint","AUTO","DEFAULT_FROM_FORMAT","DEFAULT_TO_FORMAT","RangeAreaPoint","RangeAreaSegment","SplineRangeAreaSegment","StepRangeAreaSegment","RangeAreaChart","OHLCPoint","OHLCChart","WaterfallSegment","WaterfallChart","AREA_SERIES","OUT_OF_RANGE_SERIES","CategoricalPlotArea","Highlight","Pannable","ZoomSelection","MousewheelZoom","LegendLayout","LegendItem","HORIZONTAL","POINTER","CUSTOM","Legend","PlotAreaFactory","ZOOM_ACCELERATION","SELECTOR_HEIGHT_ADJUST","Selection","Tooltip","SharedTooltip","BarChartAnimation","BubbleAnimation","FadeInAnimation","PieAnimation","ScatterLineChart","XYPlotArea","PieSegment","PieChartMixin","PIE_SECTOR_ANIM_DELAY","PieChart","PiePlotArea","DonutSegment","DONUT_SECTOR_ANIM_DELAY","DonutChart","DonutPlotArea","DEFAULT_PADDING","PolarPlotAreaBase","PolarScatterChart","PolarLineChart","SplinePolarAreaSegment","PolarAreaSegment","PolarAreaChart","PolarPlotArea","RadarLineChart","SplineRadarAreaSegment","RadarAreaSegment","RadarAreaChart","RadarSegment","RadarClusterLayout","RadarStackLayout","RadarBarChart","RadarPlotArea","FunnelSegment","FunnelChart","FunnelPlotArea","colorScale","HeatmapPoint","HeatmapChart","HeatmapPlotArea","COLOR","FIRST","FROM","MAX","MIN","NOTE_TEXT","SUMMARY_FIELD","TO","MOUSEMOVE","CONTEXTMENU","MOUSELEAVE","MOUSEMOVE_DELAY","Chart","_axis","point","getCategory","getValue","slot","from","to","limit","valueRange","visual","chartsVisual","chartContainer","_pane","plotArea","_plotArea","backgroundVisual","_bgVisual","sumOrNull","avg","first","_valueFields","_otherFields","_nullValue","_undefinedValue","register","otherFields","this$1","_makeValue","undefined","canonicalFields","pointIx","fieldData","srcValueFields","srcPointFields","Array","slice","_bindFromArray","sourceFields","_bindFromObject","initialValue","srcFields","srcFieldName","sourceFieldName","RegExp","errorValue","initGlobalRanges","average","deviation","multiple","errorRange","standardError","deviationMatch","exec","valueGetter","createValueGetter","getAverage","getStandardDeviation","low","high","globalRange","getStandardError","binder","OBJECT","getErrorRange","pointValue","percentValue","Error","sqrt","isSample","squareDifferenceSum","pow","msie","isVertical","chart","fn","call","reflow","targetBox","linePoints","endCaps","getAxis","valueBox","getSlot","centerBox","center","capsWidth","getCapsWidth","capValue","capStart","capEnd","y1","y2","x1","x2","boxSize","floor","createVisual","rect","toRect","sender","getSender","createDefaultVisual","defaultVisual","lineOptions","stroke","dashType","moveTo","lineTo","animation","delay","seriesValueAxis","chartService","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","render","traverseDataPoints","addValue","bind","pointOptions","pointType","prototype","invertAxes","plotValue","categoryIx","otherValues","categorySum","other","otherStack","isStacked100","group","plotRange","startValue","positive","prevValue","isStackedBar","otherValue","axisCrossingValue","isStacked","STRING","categoryAxisCrossingValue","stackLimits","stackName","pIx","isFinite","updateStackRange","limits","errorTotals","chartSeries","limitsCache","negative","sparseArrayLimits","addErrorBar","errorBars","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","errorBar","updateRange","createPoint","owner","noteText","dataItem","evalPointOptions","doEval","namedValueAxes","categorySlots","chartPoints","valueSlot","pointSlot","categorySlot","aboveAxis","stackValue","percentage","reflowPoint","reflowCategories","clip","limitPoints","limitPoint","limittedSlot","limitSlot","equals","reverse","crossingValues","axisCrossingValues","slotX","slotY","seriesIx$1","currentCategory","seriesIx$2","_outOfRangeCallback","categoryAt","_bindPoint","outOfRangePoint","bindCache","_bindCache","formatPointValue","format","auto","click","trigger","eventArgs","hover","over","out","runningTotal","originalEvent","createNote","notes","label","note","Note","tooltipTracking","labelTemplate","labelText","markers","_rendered","createMarker","formatValue","align","vAlign","margin","left","right","markerBorder","background","border","brightness","toHex","rotation","opacity","markerBox","_childBox","childBox","noteTargetBox","reflowLabel","position","alignTo","createHighlight","highlight","defaultColor","shadow","getElement","highlightVisual","highlightVisualArgs","halfSize","paddingBox","Rect","tooltipAnchor","horizontalAlign","verticalAlign","clipBox","showTooltip","overlaps","overlapsBox","unclipElements","noclip","padding","HIGHLIGHT_ZINDEX","toGeometryPoints","customVisual","segmentVisual","fromPoints","closed","close","aliasFor","coords","parent","getNearestPoint","calculateStepPoints","stepPoint","justified","previousPoint","curveProcessor","curve","process","apply","renderSegments","lastSegment","sortedPoints","pointCount","_segments","sortPoints","createSegment","_addSegment","children","unshift","assumeZero","nearestPoint","pointBox","pointDistance","allPoints","nearestPointDistance","distanceTo","setup","_setEnd","step","pos","interpolateValue","topRight","bottomRight","suspend","setX","resume","duration","createAnimation","clipPath","root","getRoot","transitions","fromRect","_setChildrenAnimation","animationPoints","supportsPointInactiveOpacity","prevSegment","stackPoints","createFill","fill","createStroke","lineCap","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","Segment","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","end","controlOut","controlIn","previousSegment","_gapStackPoints","stackPoint","_stackPoints","endIdx","pointOffset","currentSeriesIx","gapStackPoint","startIdx","_previousSegmentPoint","_createGapStackPoint","segmentIx","seriesIdx","update","chartAxisRanges","chartRange","reset","query","content","textBox","textOptions","labelBox","top","bottom","alignToClipBox","parentBox","createLabel","rectVisual","createRect","path","strokeOpacity","getBorderColor","lineJoin","createGradientOverlay","baseColor","_brightness","borderColor","rtl","gap","spacing","slots","slotSize","child","currentChild","positionAxis","childrenCount","snapTo","clusterType","stackType","cluster","stackWrap","labelOptions","negativeColor","getStackWrap","stackGroup","wraps","_stackGroup","zeroSlot","stackAxis","childrenLength","_setAnimationOptions","pointVisual","origin","mid","ocSlot","open","lhSlot","realBody","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","container","set","drawLines","lineStyle","normalColor","valueParts","splitValue","downColor","whiskerSlot","boxSlot","medianSlot","meanSlot","q1","q3","reflowBoxSlot","lower","upper","reflowWhiskerSlot","median","mean","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","renderOutliers","outlierValue","markersBorder","shape","outliers","outerFence","extremes","reflowOutliers","move","whiskers","CROSS","filterOutliers","items","seriesAxes","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","intl","xAxisName","yAxisName","xAxisRange","yAxisRange","namedXAxes","axisX","namedYAxes","axisY","currentSeriesPoints","ref$1","radius","highlightGroup","Circle","createGradient","stops","offset","_maxSize","negativeValues","updateBubblesSize","pointsCount","animationOptions","minSize","maxSize","minR","maxR","minArea","maxArea","areaRange","areaRatio","baseZIndex","PI","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","create","bulletOptions","isNaN","getStyle","pointColor","backgroundColor","font","borderWidth","paddingTop","paddingBottom","paddingLeft","paddingRight","show","tooltipOptions","isDark","notify","hide","destroy","crosshair","formatService","initAxisName","showAt","stickyMode","formattedValue","dateFormats","baseUnit","getAnchor","ref_options","bbox","bottomLeft","translate","topLeft","moveLine","lineEnd","getBox","dim","lineStart","pointCategoryIndex","axisLineBox","currentAxis","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","stackRoot","j","charts","isStackRoot","id","createTitle","titleOptions","Title","buildTitle","appendAxis","appendAxisAt","splice","appendChart","empty","i$1","removeAxis","removeChart","pop","visualStyle","renderComplete","createGridLines","clipRoot","gridLines","altAxis","allAxes","vGridLines","hGridLines","refresh","clear","renderVisual","axisValueField","length$1","idx$1","axis$1","lineBox$1","service","getService","paneIndex","shrinkToFit","initFields","initSeries","legend","crosshairs","createPanes","createCrosshairs","currentPane","paneDefaults","paneOptions","panesLength","crosshairOptions","currentCrosshair","removeCrosshairs","hideCrosshairs","findPane","matchingPane","findPointPane","containsPoint","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","seriesVisible","itemLabelOptions","markerColor","inactiveItems","inactiveItemsLabels","visibleInLegend","active","groupAxes","paneIx","paneAxes","xAxes","yAxes","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","unpad","reflowPanes","detachLabels","reflowAxes","reflowCharts","redraw","panesArray","cleanGradients","crossingAxes","valuesToAdd","defaultValue","alignAxisTo","targetAxis","targetCrossingValue","slotEdge","targetEdge","alignAxes","paneId","anchorCrossings","pane$1","paneId$1","visible$1","anchor$1","anchorCrossings$1","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","_overlap","_mirrored","mirror","COORD_PRECISION","shrinkAxisWidth","overflowX","shrink","shrinkAxisHeight","shrinked","overflowY","fitAxes","paneBox","offsetY","currentAxis$1","offsetX","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","rotated","autoRotateLabels","chartPane","percents","currentPane$1","i$2","currentPane$2","remainingHeight","remainingPanes","autoHeightPanes","parseInt","backgroundBox","axisA","axisB","axesCount","chartsBoxes","boxes","addBackgroundPaths","multipath","paths","backgroundContainsPoint","bg","MultiPath","appendVisual","pointsByCategoryIndex","categoryIndex","pointsBySeriesIndex","seriesIndex","filterPoints","pointsBySeriesName","findPoint","paneByPoint","detachAxisGroupLabels","labelAxis","labelAxisCount","createLabelAxis","edge","onAxis","END","START","plotBands","reduce","acc","_dispatchEvent","defaultAggregates","fieldAggregate","seriesFields","_seriesFields","rootAggregate","aggregate","_series","_binder","canonicalName","aggregatePoints","srcPoints","srcValues","_bindPoints","firstDataItem","dataItems","_bindField","aggregates","fromOptions","toOptions","labelFrom","_createLabel","labelTo","plotLimits","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","toPoints","fromSegments","toPath","fromPath","createCurveSegments","segmentType","fromSlot","toSlot","oPoints","cPoints","lhPoints","oSlot","cSlot","createSegments","summary","totalCategories","prevPoint","namedCategoryAxes","valueAxisRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","paneSeries","visibleSeries","groups","groupIx","groupSeriesByCategoryAxis","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","axisPane","dateAxis","srcSeries","processedSeries","_currentPointsCache","_seriesPointsCache","categoryField","aggregateSeries","filterSeries","outOfRangePoints","dataLength","_seriesMax","currentRangeIndices","clearSeriesPointsCache","seriesSourcePoints","srcCategories","srcData","getFn","categoriesHash","mapCategories","totalIndex","aggregator","categoryItem","categoryIdx","totalCount","categoriesToAdd","defaultPaneName","paneName","stackableChartOptions","firstSeries","axisSeries","categoryAxes","unique","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","seriesAxis","centeredSeries","aggregatedAxis","createLabels","primaryAxis","definitions","isJustified","DateCategoryAxis","defaultAxisRange","axisType","tracker","defaultRange","roundToMajorUnit","LogarithmicAxis","NumericAxis","eventType","_eventCoordinates","pointPane","_points","arrayPoints","toggleHighlight","hasHighlight","togglePointHighlight","toggleHandler","toggle","isHighlighted","_active","_panAxes","pan","delta","lock","updatedAxes","limitRange","marqueeColor","marquee","_marquee","removeElement","setStyles","styles","zoomPane","_zoomPane","_elementOffset","_zoomPaneClipBox","pageX","pageY","chartElement","elementOffset","_selectionPosition","elementOffset$$1","selectionPosition","_updateAxisRanges","zoom","pointsRange","startLocation","location","rate","updateRanges","zoomRange","legendItem","Layout","lineSpacing","orientation","alignItems","clippedBBox","rectToBox","addVisual","createContainer","FloatElement","markerOptions","cursor","eventSink","_itemOverlay","widget","args","_legendItemHover","pointIndex","_unsetActivePoint","renderChildren","createContainers","createLegendTitle","createItems","userAlign","itemsContainer","hasTitle","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","layout","_registry","registry","match","observer","_dateAxis","initOptions","createElements","_index","onPane","selection","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","wrapper","direction","leftMask","rightMask","borderLeftWidth","borderRightWidth","mousewheel","_mousewheelHandler","_mousewheel","obj","_domEvents","DomEventsBuilder","stopPropagation","_start","_move","_end","tap","_tap","press","_press","gesturestart","_gesturestart","gesturechange","_gesturechange","gestureend","_gestureend","clearTimeout","_mwTimeout","_state","_rangeEventArgs","_value","moveTarget","handle","addClass","oldRange","span","scale","removeClass","rightClick","which","mousewheelDelta","expand","setTimeout","p0","_toModelCoordinates","touches","p1","_slot","rightMaskWidth","distance","leftMaskWidth","fromValue","toValue","zDir","relative","minDelta","maxDelta","_current","tooltipPoints","_slotAnchor","_defaultAnchor","shared","categoryText","categoryFormat","centerPoint","slotCenter","fromScale","abort","scaleX","scaleY","easing","fadeTo","missingValue","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","xAxisOptions","yAxisOptions","createXYAxis","seriesAxisName","firstPointValue","inferredDate","namedAxes","isLog","typeSamples","DateValueAxis","axisPane$1","xAxesOptions","yAxesOptions","currentValue","xValues","yValues","sector","themeLabels","autoTextColor","theme","animationDelay","labelHeight","labelWidth","lp","labelsOptions","labelsDistance","middle","startAngle","innerRadius","endAngle","createSegmentVisual","borderOptions","fallbackFill","userSpace","singleSegment","ShapeBuilder","createRing","midAndle","midPoint","DEFAULT_FONT","createLegendItem","pointVisible","legendOptions","legendItems","colorsCount","anglePerValue","constantAngle","currentAngle","explode","seriesColors","Ring","evalSegmentOptions","segmentOptions","space","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","boxCenter","leftSideLabels","rightSideLabels","seriesConfig","seriesConfigs","setRadius","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","secondBox","lr","firstBox","remaining","_takeDistance","reflowLabels","amount","available","boxX","labelsCount","labelDistance","boxY","hAlignLabel","connectorsColor","connectorLine","sr","crossing","connectors","_connectorLines","pointInCircle","pieCenter","bboxBottom","find","autoFit","reverseValue","second","originalX","sector_center","cx","cy","t","createPieChart","pieChart","totalSize","seriesWithoutSize","holeSize","currentSize","currentSeries$1","createDonutChart","donutChart","createPolarAxis","createValueAxis","polarAxis","axisDefaultRange","valueAxisOptions","RadarLogarithmicAxis","RadarNumericAxis","valueAxisBox","heightDiff","valueRadius","onCircle","_polarAxisCenter","centerSegment","_hasMissingValuesGap","PolarAxis","majorGridLines","minorGridLines","scatterChart","xValue","yValue","isFirstDataPoint","isLastDataPoint","slotAngle","slotSector","childSector","RadarCategoryAxis","_hasBarCharts","_isStacked100","chartOptions","chartBox","createPath","labelPadding","dynamicSlopeReflow","totalHeight","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","firstSegment","maxSegment","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","topMostWidth","finalNarrow","dynamicSlope","createFunnelChart","funnelChart","minLightnessOffset","parseColor","hsl","toHSL","l","toCss","labelColor","isRoundRect","ROUNDED_RECT","halfBorderWidth","borderRadius","setRange","indexX","indexY","xRange","yRange","ref$2","xIndex","yIndex","xIn","yIn","bindCategories","createAxisLabels","xCategories","yCategories","createHashSet","has","add","createHeatmapChart","firstCategory","errorLow","errorHigh","userOptions","observers","addObserver","ChartService","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","FontLoader","preloadFonts","fontLoaded","_destroyed","_redraw","_attachEvents","_setElementClass","firstChild","seriesCopies","applyDefaults","applySeriesColors","getSize","chartArea","resize","force","hasSize","_resize","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","_model","findPaneByName","findPaneByIndex","filter","seriesName","categoryName","togglePointsHighlight","_highlight","_sharedTooltip","_tooltip","hideTooltip","surface","_surfaceWrap","elementSize","renderAs","_destroySurface","Surface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","model","_getModel","_destroyView","traverse","draw","play","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","_navState","_cancelDomEvents","exportVisual","exportOptions","currentOptions","pannable","_pannable","zoomable","_zoomSelection","_mousewheelZoom","_toggleDragZoomEvents","allowDrag","requiresHandlers","allowZoom","_dragZoomEnabled","touchAction","_touchAction","_toggleDomEvents","drag","domEvents","toggleDrag","toggleZoom","_createSharedTooltip","seriesColor","colors","_createPlotArea","RootElement","_modelOptions","DEFAULT_WIDTH","DEFAULT_HEIGHT","skipSeries","selections","select","_selectStart","_select","_selectEnd","_clickHandler","_click","_mouseleaveHandler","_mouseleave","_mouseover","_mouseout","_mousemove","throttle","removeObserver","eventNames","isDefaultPrevented","_toDocumentCoordinates","obj$1","_shouldAttachMouseMove","_hoveredPoint","hovered","cancel","_stopChartHandlers","_gestureDistance","suspendTracking","_zooming","resumeTracking","previousGestureDistance","scaleDelta","mousewheelZoom","_drawingChartElement","leave","_startNavigation","_suppressHover","panning","ranges$1","translateRange","_endNavigation","_mousewheelZoomRate","prevented","totalDelta","scaleRange","chartEvent","_getChartElement","eventTarget","closest","coordinates","eventCoordinates","_elementPadding","_padding","clientX","clientY","inverseTransform","elementScale","invert","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","activePoint","multipleSeries","hasInactiveOpacity","_activePoint","_hasInactiveOpacity","_updateHoveredPoint","_displayTooltip","_displayInactiveOpacity","_activeChartInstance","_updateSeriesOpacity","_applySeriesOpacity","highlightPoints","inactivePoints","chartInstance","_chartInstanceFromPoint","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","constructor","hoveredPoint","resetOpacity","currSeries","defaultOpacity","inactiveOpacity","_getDefaultOpacityForSeries","activeSeries","hasDefaultInactiveOpacity","defaultInactiveOpacity","seriesInactiveOpacity","DEFAULT_SERIES_OPACITY","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","overPlotArea","_trackCrosshairs","pointArgs","hoverArgs","_tooltipCategoryIx","_sharedHighlight","hideElements","keepTooltipOpen","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","clearInterval","autoBind","bindCategoryAxisFromSeries","dataIx","dataRow","uniqueCategories","HashMap","bindable","_isBindable","transitionsState","updateMouseMoveHandler","applyOptions","setOptions","setDirection","setIntlService","noTransitionsRedraw","unbind","createProxyMember","instance","_instance","arguments","nameTemplate","seriesClone","legacyTemplate","groupNameTemplate","logToConsole","template","_slotCount","_groupIx","_groupValue","normalizeStyle","ChartInstanceObserver","proxyMembers","SeriesVisibilityState","geom","ChartSeries","NS","outerWidth","_outerWidth","outerHeight","_outerHeight","KendoChart","Widget","ui","DataSource","InstanceObserver","proxy","MOUSELEAVE_NS","AXIS_LABEL_CLICK","NOTE_CLICK","NOTE_HOVER","NOTE_LEAVE","DOCUMENT_ELEMENT","documentElement","CHANGE","DATABOUND","LEAVE","MOUSEDOWN","Observable","TOOLTIP_ANIMATION_DURATION","TOOLTIP_SHOW_DELAY","TOOLTIP_INVERSE","SHARED_TOOLTIP_CLASS","RTL","events","UserEvents","global","multiTouch","fastTap","handlerMap","legendItemClick","dataSource","_seriesVisibility","_initDataSource","_bindSeries","_bindCategories","dimensions","_setEvents","_getThemeOptions","_sourceSeries","setDataSource","_hasDataSource","_onDataChanged","_dataChangeHandler","_hasData","fetch","off","_destroyCrosshairTooltips","findSeries","findSeriesByName","_createSeries","findSeriesByIndex","originalChartArea","_seriesOptions","on","relatedTarget","autoHide","themes","themeName","SASS_THEMES","autoTheme","_initChart","_createChart","_isRtl","_onInit","_initTooltip","tooltips","_crosshairTooltips","_getCrosshairTooltip","_showTooltip","_hideTooltip","_onRender","_copyMembers","names","_events","_tooltipleave","_onLegendItemClick","_legendItemClick","save","_bindData","groupedSeries","view","grouped","seriesVisibility","read","applyByGroup","applyByIndex","seriesData","categoriesData","_bindCategoryAxis","isRtl","css","ExportMixin","PDFMixin","plugin","action","persistSeriesVisibility","saveState","mobileScrollerSelector","useWithBlock","paramName","attr","_mobileScroller","downEvent","applyEventMap","guid","_closeTooltipHandler","_closeTooltip","_clearShowTimeout","remove","sharedTemplate","_offset","_ensureElement","stop","animate","showTimeout","_measure","zoomLevel","viewport","scrollTop","pageYOffset","scrollLeft","pageXOffset","movable","_fit","toggleClass","_sharedContent","_pointContent","html","forceHide","_hideElement","is","nameColumn","colorMarker","colspan","appendTo","contains","fadeOut","always","tooltipTemplate","xLow","xHigh","yLow","yHigh","viewPortSize","output","_chart","_options","_filterPoints","_clearFields","toggleVisibility","hasFilter","_filterData"],"mappings":"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ClCxO,EAAOwO,GAASxO,EAAOwO,OACvBxO,EAAOwO,GAAO3V,KAAKoF,EAAIuQ,GAG/B,OAAOxO,GAMX,QAAS0O,IAAmBC,EAAiBhT,GAA7C,GACaqC,GAEG4Q,EACAC,EAEIC,CALhB,KAAS9Q,IAASrC,IACTmD,GAAQd,EAAO+Q,KAAgBpT,EAAQoD,eAAef,KACnD4Q,EAAajT,EAAQqC,GACrB6Q,EAAgBF,EAAgB3Q,GAChCoC,GAAQyO,KACJC,EAA2B,OAAfF,EACZE,IAAc1O,GAAQwO,UACfD,GAAgB3Q,GACnB8Q,SACOnT,GAAQqC,IAEZ6Q,GAAiB3P,GAAS0P,IAC7B1P,GAAS2P,IACTH,GAAmBG,EAAeD,KAO1D,QAASI,IAAkBC,GACvB,IAAK,GAAI1R,GAAM,EAAGA,EAAM0R,EAAM7V,OAAQmE,IAClC0R,EAAM1R,GAAK2R,eAz6YtB,GAEO/K,IACA7J,GACAwD,GACAqR,GACAC,GACAC,GACAC,GACA/F,GACAK,GACAD,GACAF,GACA8F,GACAC,GACAC,GACAC,GACAlG,GACAmG,GACAnM,GACA2F,GACAyG,GACAxP,GACAlC,GACA8C,GACA6O,GACAxF,GACAtE,GACA+J,GACAC,GACAjR,GACAE,GACAC,GACAC,GACApC,GACAqR,GACA6B,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACApO,GACAgB,GACAqN,GACAzJ,GACA0J,GACAvH,GACAwH,GACArJ,GACAsJ,GACAnI,GACAoI,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACApR,GACAqR,GACA7T,GA+BA8T,GAUAC,GAkBAC,GA8EA1P,GAiHA2P,GACAC,GACAC,GACAC,GACAC,GA2GAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA7O,GACAC,GACA6O,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAC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","file":"kendo.dataviz.chart.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (typeof text === 'undefined' || text === null) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/kendo-chart', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.drawing',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($) {\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 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 DATE = datavizConstants.DATE;\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 inArray = dataviz.inArray;\n var isFunction = dataviz.isFunction;\n var valueOrDefault = dataviz.valueOrDefault;\n var isObject = dataviz.isObject;\n var deepExtend = dataviz.deepExtend;\n var last = dataviz.last;\n var eventElement = dataviz.eventElement;\n var getTemplate = dataviz.getTemplate;\n var TextBox = dataviz.TextBox;\n var ShapeElement = dataviz.ShapeElement;\n var getSpacing = dataviz.getSpacing;\n var CurveProcessor = dataviz.CurveProcessor;\n var append = dataviz.append;\n var isString = dataviz.isString;\n var parseDate = dataviz.parseDate;\n var styleValue = dataviz.styleValue;\n var CategoryAxis = dataviz.CategoryAxis;\n var BoxElement = dataviz.BoxElement;\n var round = dataviz.round;\n var limitValue = dataviz.limitValue;\n var grep = dataviz.grep;\n var elementStyles = dataviz.elementStyles;\n var hasClasses = dataviz.hasClasses;\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 Color = kendo.Color;\n var geometry = kendo.geometry;\n var GeometryPoint = geometry.Point;\n var transform = geometry.transform;\n var ChartAxis = Class.extend({\n init: function (axis) {\n this._axis = axis;\n this.options = axis.options;\n },\n value: function (point) {\n var axis = this._axis;\n var value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n return value;\n },\n slot: function (from, to, limit) {\n if (limit === void 0) {\n limit = true;\n }\n return this._axis.slot(from, to, limit);\n },\n range: function () {\n return this._axis.range();\n },\n valueRange: function () {\n return this._axis.valueRange();\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 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 findAxisByName: function (name) {\n return findAxisByName(name, this._pane.axes);\n }\n });\n var ChartPlotArea = Class.extend({\n init: function (plotArea) {\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n });\n function countNumbers(values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n return count;\n }\n var Aggregates = {\n min: function (values) {\n var length = values.length;\n var min = MAX_VALUE;\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 return min === MAX_VALUE ? values[0] : min;\n },\n max: function (values) {\n var length = values.length;\n var max = MIN_VALUE;\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 return max === MIN_VALUE ? values[0] : max;\n },\n sum: function (values) {\n var length = values.length;\n var sum = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n return sum;\n },\n sumOrNull: function (values) {\n var result = null;\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n return result;\n },\n count: function (values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n return count;\n },\n avg: function (values) {\n var count = countNumbers(values);\n var result = values[0];\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n return result;\n },\n first: function (values) {\n var length = values.length;\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 return values[0];\n }\n };\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n var SeriesBinder = Class.extend({\n init: function () {\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n },\n register: function (seriesTypes, valueFields, otherFields) {\n var this$1 = this;\n if (valueFields === void 0) {\n valueFields = [VALUE];\n }\n if (otherFields === void 0) {\n otherFields = {};\n }\n for (var i = 0; i < seriesTypes.length; i++) {\n var type = seriesTypes[i];\n this$1._valueFields[type] = valueFields;\n this$1._otherFields[type] = otherFields;\n this$1._nullValue[type] = this$1._makeValue(valueFields, null);\n this$1._undefinedValue[type] = this$1._makeValue(valueFields, undefined);\n }\n },\n canonicalFields: function (series) {\n return this.valueFields(series).concat(this.otherFields(series));\n },\n valueFields: function (series) {\n return this._valueFields[series.type] || [VALUE];\n },\n otherFields: function (series) {\n return this._otherFields[series.type] || [VALUE];\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 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 value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\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 result.fields = fields || {};\n return result;\n },\n _makeValue: function (fields, initialValue) {\n var value = {};\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n return value;\n },\n _bindFromArray: function (array, fields) {\n var value = {};\n if (fields) {\n var length = Math.min(fields.length, array.length);\n for (var i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n return value;\n },\n _bindFromObject: function (object, fields, srcFields) {\n if (srcFields === void 0) {\n srcFields = fields;\n }\n var value = {};\n if (fields) {\n var length = fields.length;\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 return value;\n },\n sourceFields: function (series, canonicalFields) {\n var sourceFields = [];\n if (canonicalFields) {\n var length = canonicalFields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = canonicalFields[i];\n var sourceFieldName = fieldName === VALUE ? 'field' : fieldName + 'Field';\n sourceFields.push(series[sourceFieldName] !== null ? series[sourceFieldName] || fieldName : null);\n }\n }\n return sourceFields;\n }\n });\n SeriesBinder.current = new SeriesBinder();\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 var ErrorRangeCalculator = Class.extend({\n init: function (errorValue, series, field) {\n this.initGlobalRanges(errorValue, series, field);\n },\n initGlobalRanges: function (errorValue, series, field) {\n var data = series.data;\n var deviationMatch = standardDeviationRegex.exec(errorValue);\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\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 = {\n low: average.value - deviation * multiple,\n 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 this.globalRange = function (value) {\n return {\n low: value - standardError,\n 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 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 return valueGetter;\n },\n getErrorRange: function (pointValue, errorValue) {\n var low, high, value;\n if (!defined(errorValue)) {\n return null;\n }\n if (this.globalRange) {\n return this.globalRange(pointValue);\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 return {\n low: low,\n high: high\n };\n },\n getStandardError: function (data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n },\n getStandardDeviation: function (data, average, isSample) {\n var this$1 = this;\n var length = data.length;\n var total = isSample ? average.count - 1 : average.count;\n var squareDifferenceSum = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n return Math.sqrt(squareDifferenceSum / total);\n },\n getAverage: function (data) {\n var this$1 = this;\n var length = data.length;\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n return {\n value: sum / count,\n count: count\n };\n }\n });\n var browser = support.browser || {};\n var INITIAL_ANIMATION_DURATION = 600;\n var FADEIN = 'fadeIn';\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 var SMOOTH = 'smooth';\n var STEP = 'step';\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 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,\n COLUMN,\n OHLC,\n CANDLESTICK,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n BULLET,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL\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 var LOGARITHMIC = 'log';\n var CATEGORY = 'category';\n var INSIDE_END = 'insideEnd';\n var INSIDE_BASE = 'insideBase';\n var OUTSIDE_END = 'outsideEnd';\n var MOUSEWHEEL = 'DOMMouseScroll mousewheel';\n var MOUSEWHEEL_DELAY = 150;\n var MOUSEWHEEL_ZOOM_RATE = 0.3;\n var constants = {\n INITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n FADEIN: FADEIN,\n LEGEND_ITEM_CLICK: LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER: LEGEND_ITEM_HOVER,\n LEGEND_ITEM_LEAVE: LEGEND_ITEM_LEAVE,\n SERIES_CLICK: SERIES_CLICK,\n SERIES_HOVER: SERIES_HOVER,\n SERIES_OVER: SERIES_OVER,\n SERIES_LEAVE: SERIES_LEAVE,\n GLASS: GLASS,\n BORDER_BRIGHTNESS: BORDER_BRIGHTNESS,\n TOOLTIP_OFFSET: TOOLTIP_OFFSET,\n START_SCALE: START_SCALE,\n ERROR_LOW_FIELD: ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD: ERROR_HIGH_FIELD,\n X_ERROR_LOW_FIELD: X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD: X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD: Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD: Y_ERROR_HIGH_FIELD,\n LINE_MARKER_SIZE: LINE_MARKER_SIZE,\n INTERPOLATE: INTERPOLATE,\n ZERO: ZERO,\n SMOOTH: SMOOTH,\n STEP: STEP,\n CATEGORY: CATEGORY,\n FUNNEL: FUNNEL,\n BAR: BAR,\n CANDLESTICK: CANDLESTICK,\n PIE: PIE,\n COLUMN: COLUMN,\n AREA: AREA,\n VERTICAL_BULLET: VERTICAL_BULLET,\n BOX_PLOT: BOX_PLOT,\n OHLC: OHLC,\n WATERFALL: WATERFALL,\n LINE: LINE,\n BULLET: BULLET,\n VERTICAL_LINE: VERTICAL_LINE,\n VERTICAL_AREA: VERTICAL_AREA,\n RANGE_AREA: RANGE_AREA,\n VERTICAL_RANGE_AREA: VERTICAL_RANGE_AREA,\n RANGE_COLUMN: RANGE_COLUMN,\n VERTICAL_BOX_PLOT: VERTICAL_BOX_PLOT,\n RANGE_BAR: RANGE_BAR,\n HORIZONTAL_WATERFALL: HORIZONTAL_WATERFALL,\n SCATTER: SCATTER,\n SCATTER_LINE: SCATTER_LINE,\n BUBBLE: BUBBLE,\n RADAR_AREA: RADAR_AREA,\n RADAR_LINE: RADAR_LINE,\n RADAR_COLUMN: RADAR_COLUMN,\n POLAR_LINE: POLAR_LINE,\n POLAR_AREA: POLAR_AREA,\n POLAR_SCATTER: POLAR_SCATTER,\n RENDER: RENDER,\n PLOT_AREA_CLICK: PLOT_AREA_CLICK,\n PLOT_AREA_HOVER: PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE: PLOT_AREA_LEAVE,\n LOGARITHMIC: LOGARITHMIC,\n DRAG: DRAG,\n DRAG_START: DRAG_START,\n DRAG_END: DRAG_END,\n ZOOM_START: ZOOM_START,\n ZOOM: ZOOM,\n ZOOM_END: ZOOM_END,\n SELECT_START: SELECT_START,\n SELECT: SELECT,\n SELECT_END: SELECT_END,\n PANE_RENDER: PANE_RENDER,\n GAP: GAP,\n DONUT: DONUT,\n INSIDE_END: INSIDE_END,\n INSIDE_BASE: INSIDE_BASE,\n OUTSIDE_END: OUTSIDE_END,\n MOUSEWHEEL: MOUSEWHEEL,\n MOUSEWHEEL_DELAY: MOUSEWHEEL_DELAY,\n MOUSEWHEEL_ZOOM_RATE: MOUSEWHEEL_ZOOM_RATE,\n SHOW_TOOLTIP: SHOW_TOOLTIP,\n HIDE_TOOLTIP: HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n ABOVE: ABOVE,\n BELOW: BELOW,\n HEATMAP: HEATMAP\n };\n var DEFAULT_ERROR_BAR_WIDTH = 4;\n var ErrorBarBase = ChartElement.extend({\n init: function (low, high, isVertical, chart, series, options) {\n ChartElement.fn.init.call(this, options);\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\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 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), new Point(capEnd, valueBox.y1), new Point(capStart, valueBox.y2), 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), new Point(valueBox.x1, capEnd), new Point(valueBox.x2, capStart), new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n this.linePoints = linePoints;\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 return capsWidth;\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual = options.visual;\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.createDefaultVisual();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n },\n createDefaultVisual: function () {\n var this$1 = this;\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 ChartElement.fn.createVisual.call(this);\n for (var idx = 0; idx < linePoints.length; idx += 2) {\n var line = new Path(lineOptions).moveTo(linePoints[idx].x, linePoints[idx].y).lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n alignPathToPixel(line);\n this$1.visual.append(line);\n }\n }\n });\n setDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: { width: 2 },\n zIndex: 1\n });\n var CategoricalErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axis = this.chart.seriesValueAxis(this.series);\n return axis;\n }\n });\n var MAX_EXPAND_DEPTH = 5;\n function evalOptions(options, context, state, dryRun) {\n if (state === void 0) {\n state = {};\n }\n if (dryRun === void 0) {\n dryRun = false;\n }\n var defaults = state.defaults = state.defaults || {};\n var depth = state.depth = state.depth || 0;\n var needsEval = false;\n state.excluded = state.excluded || [];\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\n for (var property in options) {\n if (!inArray(property, state.excluded) && options.hasOwnProperty(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 return needsEval;\n }\n function categoriesCount(series) {\n var seriesCount = series.length;\n var categories = 0;\n for (var i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n return categories;\n }\n var CategoricalChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n this.valueAxisRanges = {};\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\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, { vertical: !this.options.invertAxes }, series);\n }\n return options;\n },\n plotValue: function (point) {\n if (!point) {\n return 0;\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 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 if (stack && otherStack && stack.group !== otherStack.group) {\n continue;\n }\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n return point.value;\n },\n plotRange: function (point, startValue) {\n var this$1 = this;\n if (startValue === void 0) {\n startValue = 0;\n }\n var categoryPoints = this.categoryPoints[point.categoryIx];\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 for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack) {\n if (typeof stack === datavizConstants.STRING && stack !== otherStack) {\n continue;\n }\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n }\n var otherValue = this$1.plotValue(other);\n if (otherValue >= 0 && positive || otherValue < 0 && !positive) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n if (isStackedBar) {\n prevValue -= startValue;\n }\n return [\n prevValue,\n plotValue\n ];\n }\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n dataviz.convertableToNumber(point.value) ? point.value : axisCrossingValue\n ];\n },\n stackLimits: function (axisName, stackName) {\n var this$1 = this;\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var i = 0; i < this.categoryPoints.length; i++) {\n var categoryPoints = this$1.categoryPoints[i];\n if (!categoryPoints) {\n continue;\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.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 return {\n min: min,\n max: max\n };\n },\n updateStackRange: function () {\n var this$1 = this;\n var ref = this.options;\n var isStacked = ref.isStacked;\n var chartSeries = ref.series;\n var limitsCache = {};\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 var limits = limitsCache[key];\n if (!limits) {\n limits = this$1.stackLimits(axisName, series.stack);\n var errorTotals = this$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 if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n if (limits) {\n this$1.valueAxisRanges[axisName] = limits;\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 if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] || new ErrorRangeCalculator(errorBars.value, series, VALUE);\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\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 if (this.options.isStacked) {\n var stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n low = stackedErrorRange.low;\n high = stackedErrorRange.high;\n } else {\n var fields = {\n categoryIx: categoryIx,\n series: series\n };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n var errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [errorBar];\n point.append(errorBar);\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 this.errorTotals = this.errorTotals || {\n positive: [],\n negative: []\n };\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n return {\n low: low,\n 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 var categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n var seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n var point = this.createPoint(data, fields);\n if (point) {\n $.extend(point, fields);\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 this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n this.updateRange(data.valueFields, fields);\n },\n evalPointOptions: function (options, value, category, categoryIx, series, seriesIx) {\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'aggregate',\n '_events',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\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 return pointOptions;\n },\n updateRange: function (data, fields) {\n var axisName = fields.series.axis;\n var value = data.value;\n var axisRange = this.valueAxisRanges[axisName];\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\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 if (!axis) {\n throw new Error('Unable to locate value axis with name ' + axisName);\n }\n return axis;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var categorySlots = this.categorySlots = [];\n var chartPoints = this.points;\n var categoryAxis = this.categoryAxis;\n var pointIx = 0;\n this.traverseDataPoints(function (data, fields) {\n var categoryIx = fields.categoryIx;\n var currentSeries = fields.series;\n var valueAxis = this$1.seriesValueAxis(currentSeries);\n var point = chartPoints[pointIx++];\n var categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot = this$1.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n if (point) {\n var plotRange = this$1.plotRange(point, valueAxis.startValue());\n var valueSlot = this$1.valueSlot(valueAxis, plotRange);\n if (valueSlot) {\n var pointSlot = this$1.pointSlot(categorySlot, valueSlot);\n point.aboveAxis = this$1.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n if (this$1.options.isStacked100) {\n point.percentage = this$1.plotValue(point);\n }\n this$1.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.reflowCategories(categorySlots);\n if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n this.box = targetBox;\n },\n valueSlot: function (valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n },\n limitPoints: function () {\n var this$1 = this;\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.limitPoint(points[idx]);\n }\n }\n },\n limitPoint: function (point) {\n var limittedSlot = this.categoryAxis.limitSlot(point.box);\n if (!limittedSlot.equals(point.box)) {\n point.reflow(limittedSlot);\n }\n },\n aboveAxis: function (point, valueAxis) {\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n var value = point.value;\n return valueAxis.options.reverse ? value < axisCrossingValue : value >= axisCrossingValue;\n },\n categoryAxisCrossingValue: function (valueAxis) {\n var categoryAxis = this.categoryAxis;\n var options = valueAxis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n },\n reflowPoint: function (point, pointSlot) {\n point.reflow(pointSlot);\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 return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var series = this.options.series;\n var count = categoriesCount(series);\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this$1._outOfRangeCallback(series[seriesIx], '_outOfRangeMinPoint', seriesIx, callback);\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.categoryAxis.categoryAt(categoryIx);\n var pointData = this$1._bindPoint(currentSeries, seriesIx$1, categoryIx);\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n categoriesCount: count,\n series: currentSeries,\n seriesIx: seriesIx$1\n });\n }\n }\n for (var seriesIx$2 = 0; seriesIx$2 < seriesCount; seriesIx$2++) {\n this$1._outOfRangeCallback(series[seriesIx$2], '_outOfRangeMaxPoint', seriesIx$2, callback);\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._bindPoint(series, seriesIx, categoryIx, outOfRangePoint.item);\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n },\n _bindPoint: function (series, seriesIx, categoryIx, item) {\n if (!this._bindCache) {\n this._bindCache = [];\n }\n var bindCache = this._bindCache[seriesIx];\n if (!bindCache) {\n bindCache = this._bindCache[seriesIx] = [];\n }\n var data = bindCache[categoryIx];\n if (!data) {\n data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx, item);\n }\n return data;\n },\n formatPointValue: function (point, format) {\n if (point.value === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value);\n },\n pointValue: function (data) {\n return data.valueFields.value;\n }\n });\n setDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true,\n limitPoints: true\n });\n var PointEventsMixin = {\n click: function (chart, e) {\n return chart.trigger(SERIES_CLICK, this.eventArgs(e));\n },\n hover: function (chart, e) {\n return chart.trigger(SERIES_HOVER, this.eventArgs(e));\n },\n over: function (chart, e) {\n return chart.trigger(SERIES_OVER, this.eventArgs(e));\n },\n out: function (chart, e) {\n return chart.trigger(SERIES_LEAVE, this.eventArgs(e));\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 var NoteMixin = {\n createNote: function () {\n var options = this.options.notes;\n var text = this.noteText || options.label.text;\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 this.append(this.note);\n }\n }\n };\n var LinePoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n },\n render: function () {\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var pointData = this.pointData();\n var labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = this.formatValue(labels.format);\n }\n this.label = new TextBox(labelText, deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n }, labels), pointData);\n this.append(this.label);\n }\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\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 if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n return border;\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: 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 return marker;\n },\n markerBox: function () {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n return this.marker.box;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var aboveAxis = ref.aboveAxis;\n var vertical = options.vertical;\n this.render();\n this.box = targetBox;\n var childBox = targetBox.clone();\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 this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n this.reflowLabel(childBox);\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(childBox);\n }\n }\n if (this.note) {\n var noteTargetBox = this.markerBox();\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 this.note.reflow(noteTargetBox);\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 if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\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 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 return shadow.getElement();\n },\n highlightVisual: function () {\n return (this.marker || {}).visual;\n },\n highlightVisualArgs: function () {\n var marker = this.marker;\n var visual, rect;\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([\n center.x - halfSize,\n center.y - halfSize\n ], [\n size,\n size\n ]);\n }\n return {\n options: this.options,\n rect: rect,\n visual: visual\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 if (showTooltip) {\n var x = markerBox.x2 + TOOLTIP_OFFSET;\n var horizontalAlign = LEFT;\n var y, verticalAlign;\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n var markerBox = this.markerBox();\n return markerBox.overlaps(box);\n },\n unclipElements: function () {\n if (this.label) {\n this.label.options.noclip = true;\n }\n if (this.note) {\n this.note.options.noclip = true;\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 LinePoint.prototype.defaults = {\n vertical: true,\n markers: {\n visible: true,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: { width: 2 },\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: { label: {} },\n highlight: {\n markers: {\n border: {\n color: '#fff',\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n errorBars: { line: { width: 1 } }\n };\n deepExtend(LinePoint.prototype, PointEventsMixin);\n deepExtend(LinePoint.prototype, NoteMixin);\n var LineSegment = ChartElement.extend({\n init: function (linePoints, series, seriesIx) {\n ChartElement.fn.init.call(this);\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n },\n points: function () {\n return this.toGeometryPoints(this.linePoints);\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 return result;\n },\n createVisual: function () {\n var this$1 = this;\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.segmentVisual();\n return this$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 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 if (isFunction(color) && defaults) {\n color = defaults.color;\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 if (options.closed) {\n line.close();\n }\n this.visual = line;\n },\n aliasFor: function (e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n });\n setDefaultOptions(LineSegment, { closed: false });\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 var stepAxis = vertical ? X : Y;\n var axis = vertical ? Y : X;\n var stepDir = reverse ? 2 : 1;\n var dir = stepDir;\n var previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n var result = [previousPoint];\n for (var idx = 1; idx < points.length; idx++) {\n var point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n var stepPoint = new GeometryPoint();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n result.push(stepPoint, point);\n }\n previousPoint = point;\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 return result;\n }\n };\n function toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n var box = lintPoint.box;\n var result = new GeometryPoint();\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n return result;\n }\n var StepLineSegment = LineSegment.extend({\n points: function () {\n return this.calculateStepPoints(this.linePoints);\n }\n });\n deepExtend(StepLineSegment.prototype, StepLineMixin);\n var SplineSegment = LineSegment.extend({\n segmentVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\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 curve.segments.push.apply(curve.segments, segments);\n this.visual = curve;\n }\n });\n var LineChartMixin = {\n renderSegments: function () {\n var this$1 = this;\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 this._segments = [];\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var sortedPoints = this$1.sortPoints(seriesPoints[seriesIx]);\n var pointCount = sortedPoints.length;\n var linePoints = [];\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.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n }\n this.children.unshift.apply(this.children, this._segments);\n },\n _addSegment: function (segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n sortPoints: function (points) {\n return points;\n },\n seriesMissingValues: function (series) {\n var missingValues = series.missingValues;\n var assumeZero = !missingValues && this.options.isStacked;\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\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 for (var i = 0; i < allPoints.length; i++) {\n var point = allPoints[i];\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 if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n return nearestPoint;\n }\n };\n var ClipAnimation = Animation.extend({\n setup: function () {\n this._setEnd(this.options.box.x1);\n },\n step: function (pos) {\n var box = this.options.box;\n this._setEnd(dataviz.interpolateValue(box.x1, box.x2, pos));\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 element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n });\n setDefaultOptions(ClipAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register('clip', ClipAnimation);\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 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, { box: box });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n _setChildrenAnimation: function (clipPath) {\n var points = this.animationPoints();\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 var LineChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n this.renderSegments();\n },\n pointType: function () {\n return LinePoint;\n },\n createPoint: 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 missingValues = this.seriesMissingValues(series);\n var value = data.valueFields.value;\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n plotRange: function (point) {\n var this$1 = this;\n var plotValue = this.plotValue(point);\n if (this.options.isStacked) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n plotValue += this$1.plotValue(other);\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n return [\n plotValue,\n plotValue\n ];\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\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 supportsPointInactiveOpacity: function () {\n return false;\n }\n });\n deepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n var AreaSegment = LineSegment.extend({\n init: function (linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n LineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\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 if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n this.visual = new Group({ zIndex: series.zIndex });\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\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 strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n return segments;\n },\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.points());\n },\n stackSegments: function () {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n return this.createStackSegments(this.stackPoints);\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n },\n segmentsFromPoints: function (points) {\n return points.map(function (point) {\n 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 this.visual.append(stroke);\n },\n hasStackSegment: function () {\n return this.prevSegment || this.stackPoints && this.stackPoints.length;\n },\n createFill: function (style) {\n var strokeSegments = this.strokeSegments();\n var fillSegments = strokeSegments.slice(0);\n var hasStackSegments = this.hasStackSegment();\n if (hasStackSegments) {\n var stackSegments = this.stackSegments();\n append(fillSegments, stackSegments);\n }\n var fill = new Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n this.visual.append(fill);\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 if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y).lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end).lineTo(firstPoint.x, end);\n }\n }\n });\n var StepAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n });\n deepExtend(StepAreaSegment.prototype, StepLineMixin);\n var SplineAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n var curveProcessor = new CurveProcessor(this.options.closed);\n var linePoints = this.points();\n return curveProcessor.process(linePoints);\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(segment.anchor(), segment.controlOut(), segment.controlIn()));\n }\n return stackSegments;\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 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 var pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else if (style === SMOOTH) {\n pointType = SplineAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n LineChart.fn.reflow.call(this, targetBox);\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.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n },\n _gapStackPoints: function (linePoints, seriesIx, style) {\n var this$1 = this;\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 var endIdx = startIdx + length;\n var pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n var stackPoints = [];\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 do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n stackPoints.push(point);\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n var gapStackPoint = this$1._createGapStackPoint(categoryIx);\n this$1._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n return stackPoints;\n },\n _previousSegmentPoint: function (categoryIx, pointIx, segmentIx, seriesIdx) {\n var seriesPoints = this.seriesPoints;\n var index = seriesIdx;\n var point;\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n return point;\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 return point;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n },\n supportsPointInactiveOpacity: function () {\n return false;\n }\n });\n var AxisGroupRangeTracker = Class.extend({\n init: function () {\n this.axisRanges = {};\n },\n update: function (chartAxisRanges) {\n var axisRanges = this.axisRanges;\n for (var axisName in chartAxisRanges) {\n var chartRange = chartAxisRanges[axisName];\n var range = axisRanges[axisName];\n axisRanges[axisName] = range = range || {\n min: MAX_VALUE,\n 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 reset: function (axisName) {\n this.axisRanges[axisName] = undefined;\n },\n query: function (axisName) {\n return this.axisRanges[axisName];\n }\n });\n var BarLabel = ChartElement.extend({\n init: function (content, options, pointData) {\n ChartElement.fn.init.call(this, options);\n this.textBox = new TextBox(content, this.options, pointData);\n this.append(this.textBox);\n },\n createVisual: function () {\n this.textBox.options.noclip = this.options.noclip;\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 textOptions.align = vertical ? CENTER : LEFT;\n textOptions.vAlign = vertical ? TOP : CENTER;\n if (options.position === INSIDE_END) {\n if (vertical) {\n textOptions.vAlign = TOP;\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(targetBox.x1, targetBox.y1 - box.height(), targetBox.x2, targetBox.y1);\n } else {\n labelBox = new Box(targetBox.x1, targetBox.y2, targetBox.x2, targetBox.y2 + box.height());\n }\n } else {\n textOptions.align = CENTER;\n if (aboveAxis) {\n labelBox = new Box(targetBox.x2, targetBox.y1, targetBox.x2 + box.width(), targetBox.y2);\n } else {\n labelBox = new Box(targetBox.x1 - box.width(), targetBox.y1, targetBox.x1, targetBox.y2);\n }\n }\n }\n if (!options.rotation) {\n if (vertical) {\n padding.left = padding.right = (labelBox.width() - text.contentBox.width()) / 2;\n } else {\n padding.top = padding.bottom = (labelBox.height() - text.contentBox.height()) / 2;\n }\n }\n text.reflow(labelBox);\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 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 this.reflow(targetBox);\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 function hasGradientOverlay(options) {\n var overlay = options.overlay;\n return overlay && overlay.gradient && overlay.gradient !== 'none';\n }\n var BAR_ALIGN_MIN_WIDTH = 6;\n var Bar = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.options = options;\n this.color = options.color || WHITE;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.value = value;\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n this.createLabel();\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n createLabel: function () {\n var options = this.options;\n var labels = options.labels;\n if (labels.visible) {\n var pointData = this.pointData();\n var labelTemplate = getTemplate(labels);\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n this.label = new BarLabel(labelText, deepExtend({ vertical: options.vertical }, labels), pointData);\n this.append(this.label);\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n this.render();\n var label = this.label;\n this.box = targetBox;\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(targetBox);\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(targetBox);\n }\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var options = ref.options;\n var customVisual = options.visual;\n if (this.visible !== false) {\n ChartElement.fn.createVisual.call(this);\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.createRect(group);\n return group;\n },\n options: options\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 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 rect.size.width = Math.round(rect.size.width);\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 var width = this.box.width();\n var height = this.box.height();\n var size = options.vertical ? width : height;\n if (size > BAR_ALIGN_MIN_WIDTH) {\n alignPathToPixel(path);\n if (width < 1 || height < 1) {\n path.options.stroke.lineJoin = 'round';\n }\n }\n visual.append(path);\n if (hasGradientOverlay(options)) {\n var overlay = this.createGradientOverlay(path, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [\n 0,\n 1\n ] : undefined\n }, options.overlay));\n visual.append(overlay);\n }\n },\n createHighlight: function (style) {\n var highlight = Path.fromRect(this.box.toRect(), style);\n return alignPathToPixel(highlight);\n },\n highlightVisual: function () {\n return this.rectVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\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 if (!defined(borderColor)) {\n borderColor = new Color(color).brightness(brightness).toHex();\n }\n return borderColor;\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 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 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 return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\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 deepExtend(Bar.prototype, PointEventsMixin);\n deepExtend(Bar.prototype, NoteMixin);\n Bar.prototype.defaults = {\n border: { width: 1 },\n vertical: true,\n overlay: { gradient: 'glass' },\n labels: {\n visible: false,\n format: '{0}'\n },\n opacity: 1,\n notes: { label: {} }\n };\n function forEach(elements, callback) {\n elements.forEach(callback);\n }\n function forEachReverse(elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx - length - 1);\n }\n }\n var ClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\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 this.forEach(children, function (child, idx) {\n var childBox = (child.box || box).clone();\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n child.reflow(childBox);\n if (idx < count - 1) {\n position += slotSize * spacing;\n }\n position += slotSize;\n });\n }\n });\n setDefaultOptions(ClusterLayout, {\n vertical: false,\n gap: 0,\n spacing: 0\n });\n var StackWrap = ChartElement.extend({\n reflow: function (targetBox) {\n var this$1 = this;\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 for (var i = 0; i < childrenCount; i++) {\n var currentChild = children[i];\n if (currentChild.visible !== false) {\n var childBox = currentChild.box.clone();\n childBox.snapTo(targetBox, positionAxis);\n if (i === 0) {\n box = this$1.box = childBox.clone();\n }\n currentChild.reflow(childBox);\n box.wrap(childBox);\n }\n }\n }\n });\n setDefaultOptions(StackWrap, { vertical: true });\n var BarChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n },\n pointType: function () {\n return Bar;\n },\n clusterType: function () {\n return ClusterLayout;\n },\n stackType: function () {\n return StackWrap;\n },\n stackLimits: function (axisName, stackName) {\n var limits = CategoricalChart.fn.stackLimits.call(this, axisName, stackName);\n return limits;\n },\n createPoint: 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 options = ref.options;\n var children = ref.children;\n var isStacked = options.isStacked;\n var value = this.pointValue(data);\n var pointOptions = this.pointOptions(series, seriesIx);\n var labelOptions = pointOptions.labels;\n if (isStacked) {\n if (labelOptions.position === OUTSIDE_END) {\n labelOptions.position = INSIDE_END;\n }\n }\n pointOptions.isStacked = isStacked;\n var color = data.fields.color || series.color;\n if (value < 0 && pointOptions.negativeColor) {\n color = pointOptions.negativeColor;\n }\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var pointType = this.pointType();\n var point = new pointType(value, pointOptions);\n point.color = color;\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 if (isStacked) {\n var stackWrap = this.getStackWrap(series, cluster);\n stackWrap.append(point);\n } else {\n cluster.append(point);\n }\n return point;\n },\n getStackWrap: function (series, cluster) {\n var stack = series.stack;\n var stackGroup = stack ? stack.group || stack : stack;\n var wraps = cluster.children;\n var stackWrap;\n if (typeof stackGroup === datavizConstants.STRING) {\n for (var i = 0; i < wraps.length; i++) {\n if (wraps[i]._stackGroup === stackGroup) {\n stackWrap = wraps[i];\n break;\n }\n }\n } else {\n stackWrap = wraps[0];\n }\n if (!stackWrap) {\n var stackType = this.stackType();\n stackWrap = new stackType({ vertical: !this.options.invertAxes });\n stackWrap._stackGroup = stackGroup;\n cluster.append(stackWrap);\n }\n return stackWrap;\n },\n categorySlot: function (categoryAxis, categoryIx, valueAxis) {\n var options = this.options;\n var categorySlot = categoryAxis.getSlot(categoryIx);\n var startValue = valueAxis.startValue();\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 return categorySlot;\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n createAnimation: function () {\n this._setAnimationOptions();\n CategoricalChart.fn.createAnimation.call(this);\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation();\n }\n },\n _setChildrenAnimation: function () {\n var this$1 = this;\n var points = this.points;\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.options.animation;\n point.createAnimation();\n }\n }\n },\n _setAnimationOptions: function () {\n var options = this.options;\n var animation = options.animation || {};\n var origin;\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 animation.origin = new GeometryPoint(origin.x1, origin.y1);\n animation.vertical = !options.invertAxes;\n }\n });\n setDefaultOptions(BarChart, { animation: { type: BAR } });\n var Candlestick = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\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 ocSlot.x1 = lhSlot.x1 = box.x1;\n ocSlot.x2 = lhSlot.x2 = box.x2;\n this.realBody = ocSlot;\n var mid = lhSlot.center().x;\n var points = [];\n points.push([\n [\n mid,\n lhSlot.y1\n ],\n [\n mid,\n ocSlot.y1\n ]\n ]);\n points.push([\n [\n mid,\n ocSlot.y2\n ],\n [\n mid,\n lhSlot.y2\n ]\n ]);\n this.lines = points;\n this.box = lhSlot.clone().wrap(ocSlot);\n if (!this._rendered) {\n this._rendered = true;\n this.createNote();\n }\n this.reflowNote();\n },\n reflowNote: function () {\n if (this.note) {\n this.note.reflow(this.box);\n }\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this._mainVisual = this.mainVisual(this.options);\n this.visual.append(this._mainVisual);\n this.createOverlay();\n },\n mainVisual: function (options) {\n var group = new Group();\n this.createBody(group, options);\n this.createLines(group, options);\n return group;\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 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 alignPathToPixel(body);\n container.append(body);\n if (hasGradientOverlay(options)) {\n container.append(this.createGradientOverlay(body, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [\n 0,\n 1\n ] : undefined\n }, options.overlay)));\n }\n },\n createLines: function (container, options) {\n this.drawLines(container, options, this.lines, options.line);\n },\n drawLines: function (container, options, lines, lineOptions) {\n if (!lines) {\n return;\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 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 getBorderColor: function () {\n var border = this.options.border;\n var borderColor = border.color;\n if (!defined(borderColor)) {\n borderColor = new Color(this.color).brightness(border._brightness).toHex();\n }\n return borderColor;\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 this.visual.append(overlay);\n },\n createHighlight: function () {\n var highlight = this.options.highlight;\n var normalColor = this.color;\n this.color = highlight.color || this.color;\n var overlay = this.mainVisual(deepExtend({}, this.options, { line: { color: this.getBorderColor() } }, highlight));\n this.color = normalColor;\n return overlay;\n },\n highlightVisual: function () {\n return this._mainVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this._mainVisual\n };\n },\n tooltipAnchor: function () {\n var box = this.box;\n var clipBox = this.owner.pane.clipBox() || box;\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 formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n }\n });\n setDefaultOptions(Candlestick, {\n vertical: true,\n border: { _brightness: 0.8 },\n line: { width: 2 },\n overlay: { gradient: 'glass' },\n tooltip: { format: '' + '' + '' + '' + '' + '' + '
{4:d}
Open:{0:C}
High:{1:C}
Low:{2:C}
Close:{3:C}
' },\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 });\n deepExtend(Candlestick.prototype, PointEventsMixin);\n deepExtend(Candlestick.prototype, NoteMixin);\n function areNumbers(values) {\n return countNumbers(values) === values.length;\n }\n var CandlestickChart = CategoricalChart.extend({\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\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 if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n if (hasValue) {\n point = this.createPoint(data, fields);\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 if (point) {\n this.updateRange(value, fields);\n cluster.append(point);\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 this.points.push(point);\n categoryPoints.push(point);\n },\n pointType: function () {\n return Candlestick;\n },\n createPoint: 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 pointType = this.pointType();\n var value = data.valueFields;\n var pointOptions = deepExtend({}, series);\n var color = data.fields.color || series.color;\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n if (series.type === CANDLESTICK) {\n if (value.open > value.close) {\n color = data.fields.downColor || series.downColor || series.color;\n }\n }\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.vertical = !this.options.invertAxes;\n var point = new pointType(value, pointOptions);\n point.color = color;\n return point;\n },\n splitValue: function (value) {\n return [\n value.low,\n value.open,\n value.close,\n 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];\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange = 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 formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.open, value.high, value.low, value.close, point.category);\n },\n animationPoints: function () {\n return this.points;\n }\n });\n deepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n var BoxPlot = Candlestick.extend({\n init: function (value, options) {\n Candlestick.fn.init.call(this, value, options);\n this.createNote();\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 this.boxSlot = boxSlot = valueAxis.getSlot(value.q1, value.q3);\n this.realBody = boxSlot;\n this.reflowBoxSlot(box);\n this.whiskerSlot = whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n this.reflowWhiskerSlot(box);\n var medianSlot = valueAxis.getSlot(value.median);\n if (value.mean) {\n var meanSlot = valueAxis.getSlot(value.mean);\n this.meanPoints = this.calcMeanPoints(box, meanSlot);\n }\n this.whiskerPoints = this.calcWhiskerPoints(boxSlot, whiskerSlot);\n this.medianPoints = this.calcMedianPoints(box, medianSlot);\n this.box = whiskerSlot.clone().wrap(boxSlot);\n this.reflowNote();\n },\n reflowBoxSlot: function (box) {\n this.boxSlot.x1 = box.x1;\n this.boxSlot.x2 = box.x2;\n },\n reflowWhiskerSlot: function (box) {\n this.whiskerSlot.x1 = box.x1;\n this.whiskerSlot.x2 = box.x2;\n },\n calcMeanPoints: function (box, meanSlot) {\n return [[\n [\n box.x1,\n meanSlot.y1\n ],\n [\n box.x2,\n meanSlot.y1\n ]\n ]];\n },\n calcWhiskerPoints: function (boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().x;\n return [\n [\n [\n mid - 5,\n whiskerSlot.y1\n ],\n [\n mid + 5,\n whiskerSlot.y1\n ],\n [\n mid,\n whiskerSlot.y1\n ],\n [\n mid,\n boxSlot.y1\n ]\n ],\n [\n [\n mid - 5,\n whiskerSlot.y2\n ],\n [\n mid + 5,\n whiskerSlot.y2\n ],\n [\n mid,\n whiskerSlot.y2\n ],\n [\n mid,\n boxSlot.y2\n ]\n ]\n ];\n },\n calcMedianPoints: function (box, medianSlot) {\n return [[\n [\n box.x1,\n medianSlot.y1\n ],\n [\n box.x2,\n medianSlot.y1\n ]\n ]];\n },\n renderOutliers: function (options) {\n var this$1 = this;\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 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 if (!defined(markersBorder.color)) {\n if (defined(this$1.color)) {\n markersBorder.color = this$1.color;\n } else {\n markersBorder.color = new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\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 shape.value = outlierValue;\n elements.push(shape);\n }\n this.reflowOutliers(elements);\n return elements;\n },\n reflowOutliers: function (outliers) {\n var this$1 = this;\n var valueAxis = this.owner.seriesValueAxis(this.options);\n var center = this.box.center();\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i].value;\n var markerBox = valueAxis.getSlot(outlierValue);\n if (this$1.options.vertical) {\n markerBox.move(center.x);\n } else {\n markerBox.move(undefined, center.y);\n }\n this$1.box = this$1.box.wrap(markerBox);\n outliers[i].reflow(markerBox);\n }\n },\n mainVisual: function (options) {\n var group = Candlestick.fn.mainVisual.call(this, options);\n var outliers = this.renderOutliers(options);\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 return group;\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 getBorderColor: function () {\n if ((this.options.border || {}).color) {\n return this.options.border.color;\n }\n if (this.color) {\n return this.color;\n }\n return Candlestick.fn.getBorderColor.call(this);\n }\n });\n setDefaultOptions(BoxPlot, {\n border: { _brightness: 0.8 },\n line: { width: 2 },\n median: { color: '#f6f6f6' },\n mean: {\n width: 2,\n dashType: 'dash',\n color: '#f6f6f6'\n },\n overlay: { gradient: 'glass' },\n tooltip: { format: '' + '' + '' + '' + '' + '' + '' + '' + '
{6:d}
Lower:{0:C}
Q1:{1:C}
Median:{2:C}
Mean:{5:C}
Q3:{3:C}
Upper:{4:C}
' },\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 deepExtend(BoxPlot.prototype, PointEventsMixin);\n var VerticalBoxPlot = BoxPlot.extend({\n reflowBoxSlot: function (box) {\n this.boxSlot.y1 = box.y1;\n this.boxSlot.y2 = box.y2;\n },\n reflowWhiskerSlot: function (box) {\n this.whiskerSlot.y1 = box.y1;\n this.whiskerSlot.y2 = box.y2;\n },\n calcMeanPoints: function (box, meanSlot) {\n return [[\n [\n meanSlot.x1,\n box.y1\n ],\n [\n meanSlot.x1,\n box.y2\n ]\n ]];\n },\n calcWhiskerPoints: function (boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().y;\n return [\n [\n [\n whiskerSlot.x1,\n mid - 5\n ],\n [\n whiskerSlot.x1,\n mid + 5\n ],\n [\n whiskerSlot.x1,\n mid\n ],\n [\n boxSlot.x1,\n mid\n ]\n ],\n [\n [\n whiskerSlot.x2,\n mid - 5\n ],\n [\n whiskerSlot.x2,\n mid + 5\n ],\n [\n whiskerSlot.x2,\n mid\n ],\n [\n boxSlot.x2,\n mid\n ]\n ]\n ];\n },\n calcMedianPoints: function (box, medianSlot) {\n return [[\n [\n medianSlot.x1,\n box.y1\n ],\n [\n medianSlot.x1,\n 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 if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n if (hasValue) {\n point = this.createPoint(data, fields);\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 if (point) {\n this.updateRange(value, fields);\n cluster.append(point);\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 this.points.push(point);\n categoryPoints.push(point);\n },\n pointType: function () {\n if (this.options.invertAxes) {\n return VerticalBoxPlot;\n }\n return BoxPlot;\n },\n splitValue: function (value) {\n return [\n value.lower,\n value.q1,\n value.median,\n value.q3,\n value.upper\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n var parts = this.splitValue(value).concat(this.filterOutliers(value.outliers));\n if (defined(value.mean)) {\n parts = parts.concat(value.mean);\n }\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange = 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 formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.lower, value.q1, value.median, value.q3, value.upper, value.mean, point.category);\n },\n filterOutliers: function (items) {\n var length = (items || []).length;\n var result = [];\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 return result;\n },\n supportsPointInactiveOpacity: function () {\n return false;\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 return axis;\n }\n });\n function hasValue(value) {\n return defined(value) && value !== null;\n }\n var ScatterChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n this.render();\n },\n _initFields: function () {\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\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 if (isNumber(value)) {\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n }\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || {\n x: [],\n y: []\n };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] || new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\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 point[field + 'Low'] = low;\n point[field + 'High'] = high;\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 item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\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 var pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\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 this.points.push(point);\n seriesPoints.push(point);\n },\n seriesMissingValues: function (series) {\n return series.missingValues;\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 if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] = xAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] = yAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\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',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\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 return pointOptions;\n },\n pointType: function () {\n return LinePoint;\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: { opacity: series.opacity },\n tooltip: { format: this.options.tooltip.format },\n labels: { format: this.options.labels.format }\n }, series);\n }\n return options;\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 pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\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 if (!xAxis) {\n throw new Error('Unable to locate X axis with name ' + xAxisName);\n }\n if (!yAxis) {\n throw new Error('Unable to locate Y axis with name ' + yAxisName);\n }\n return {\n x: xAxis,\n y: yAxis\n };\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var seriesAxes = this$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 if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.box = targetBox;\n },\n pointSlot: function (slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var seriesPoints = ref.seriesPoints;\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 for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1._bindPoint(currentSeries, seriesIx, pointIx);\n var value = ref$1.valueFields;\n var fields = ref$1.fields;\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1\n }, fields));\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 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: { format: '{0}, {1}' },\n labels: { format: '{0}, {1}' },\n clip: true\n });\n deepExtend(ScatterChart.prototype, ClipAnimationMixin, { _bindPoint: CategoricalChart.prototype._bindPoint });\n var Bubble = LinePoint.extend({\n init: function (value, options) {\n LinePoint.fn.init.call(this, value, options);\n this.category = value.category;\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 drawing.Circle(new geometry.Circle([\n center.x,\n center.y + radius / 5 + border.width / 2\n ], radius + border.width / 2), {\n stroke: { color: 'none' },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [\n {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n },\n {\n offset: 1,\n color: markers.background,\n opacity: 0\n }\n ]\n })\n });\n var overlay = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y\n ], radius), {\n stroke: {\n color: border.color || 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 highlightGroup.append(shadow, overlay);\n return highlightGroup;\n }\n });\n Bubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: { position: CENTER },\n highlight: {\n opacity: 1,\n border: {\n color: '#fff',\n width: 2,\n opacity: 1\n }\n }\n });\n Bubble.prototype.defaults.highlight.zIndex = undefined;\n var BubbleChart = ScatterChart.extend({\n _initFields: function () {\n this._maxSize = MIN_VALUE;\n ScatterChart.fn._initFields.call(this);\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 reflow: function (box) {\n this.updateBubblesSize(box);\n ScatterChart.fn.reflow.call(this, box);\n },\n pointType: function () {\n return Bubble;\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 var color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(series.negativeValues.color, color);\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 pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.markers.background = color;\n var point = new Bubble(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n updateBubblesSize: function (box) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var boxSize = Math.min(box.width(), box.height());\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesPoints = this$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._maxSize;\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 deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: { zIndex: zIndex + 1 }\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 createAnimation: function () {\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(BubbleChart, {\n tooltip: { format: '{3}' },\n labels: { format: '{3}' }\n });\n var Target = ShapeElement.extend({});\n deepExtend(Target.prototype, PointEventsMixin);\n var Bullet = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n },\n render: function () {\n var options = this.options;\n if (!this._rendered) {\n this._rendered = true;\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 this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n this.append(this.target);\n }\n this.createNote();\n }\n },\n reflow: function (box) {\n this.render();\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 if (target) {\n var targetSlot = new Box(targetSlotX.x1, targetSlotY.y1, targetSlotX.x2, targetSlotY.y2);\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 if (this.note) {\n this.note.reflow(box);\n }\n this.box = box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\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 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 this.bodyVisual = body;\n alignPathToPixel(body);\n this.visual.append(body);\n },\n createAnimation: function () {\n if (this.bodyVisual) {\n this.animation = Animation.create(this.bodyVisual, this.options.animation);\n }\n },\n createHighlight: function (style) {\n return Path.fromRect(this.box.toRect(), style);\n },\n highlightVisual: function () {\n return this.bodyVisual;\n },\n highlightVisualArgs: function () {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n }\n });\n Bullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n setDefaultOptions(Bullet, {\n border: { width: 1 },\n vertical: false,\n opacity: 1,\n target: {\n shape: '',\n border: {\n width: 0,\n color: 'green'\n },\n line: { width: 2 }\n },\n tooltip: { format: 'Current: {0}
Target: {1}' }\n });\n deepExtend(Bullet.prototype, PointEventsMixin);\n deepExtend(Bullet.prototype, NoteMixin);\n var BulletChart = CategoricalChart.extend({\n init: function (plotArea, options) {\n wrapData(options);\n CategoricalChart.fn.init.call(this, plotArea, options);\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n plotRange: function (point) {\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n point.value.current || axisCrossingValue\n ];\n },\n createPoint: 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 options = ref.options;\n var children = ref.children;\n var value = data.valueFields;\n var bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n var color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(bulletOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n var bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\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 cluster.append(bullet);\n return bullet;\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 if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n 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 formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n },\n pointValue: function (data) {\n return data.valueFields.current;\n },\n aboveAxis: function (point) {\n var value = point.value.current;\n return value > 0;\n },\n createAnimation: function () {\n var this$1 = this;\n var points = this.points;\n this._setAnimationOptions();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n point.options.animation = this$1.options.animation;\n point.createAnimation();\n }\n }\n });\n BulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n setDefaultOptions(BulletChart, { animation: { type: BAR } });\n function wrapData(options) {\n var series = options.series;\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 var BaseTooltip = Class.extend({\n init: function (chartService, options) {\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n },\n getStyle: function (options, point) {\n var background = options.background;\n var border = options.border.color;\n if (point) {\n var pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n var padding = getSpacing(options.padding || {}, 'auto');\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 show: function (options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n var style = this.getStyle(tooltipOptions, point);\n options.style = style;\n var background = new Color(style.backgroundColor);\n if (!defined(tooltipOptions.color) && !background.isDark()) {\n options.className = 'k-chart-tooltip-inverse';\n }\n this.chartService.notify(SHOW_TOOLTIP, options);\n this.visible = true;\n },\n hide: function () {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n this.visible = false;\n },\n destroy: function () {\n delete this.chartService;\n }\n });\n setDefaultOptions(BaseTooltip, {\n border: { width: 1 },\n opacity: 1\n });\n var CrosshairTooltip = BaseTooltip.extend({\n init: function (chartService, crosshair, options) {\n BaseTooltip.fn.init.call(this, chartService, options);\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\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 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 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 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 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 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 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 return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n });\n setDefaultOptions(CrosshairTooltip, { padding: 10 });\n var Crosshair = ChartElement.extend({\n init: function (chartService, axis, options) {\n ChartElement.fn.init.call(this, options);\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n var tooltipOptions = this.options.tooltip;\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this, deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode }));\n }\n },\n showAt: function (point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n },\n hide: function () {\n this.line.visible(false);\n if (this.tooltip) {\n this.tooltip.hide();\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 if (vertical) {\n lineEnd = new GeometryPoint(box.x2, box.y1);\n } else {\n lineEnd = new GeometryPoint(box.x1, box.y2);\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 this.box = box;\n this.line.moveTo(lineStart).lineTo(lineEnd);\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 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 box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n return box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\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 this.moveLine();\n this.visual.append(this.line);\n },\n destroy: function () {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n ChartElement.fn.destroy.call(this);\n }\n });\n setDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: { visible: false }\n });\n var ChartContainer = ChartElement.extend({\n init: function (options, pane) {\n ChartElement.fn.init.call(this, options);\n this.pane = pane;\n },\n shouldClip: function () {\n var children = this.children;\n var length = children.length;\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 _clipBox: function () {\n return this.pane.chartsBox();\n },\n createVisual: function () {\n this.visual = new Group({ zIndex: 0 });\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 this.visual.clip(clipPath);\n this.unclipLabels();\n }\n },\n stackRoot: function () {\n return this;\n },\n unclipLabels: function () {\n var ref = this;\n var charts = ref.children;\n var clipBox = ref.clipBox;\n for (var i = 0; i < charts.length; i++) {\n var points = charts[i].points || {};\n var length = points.length;\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 if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n }\n },\n destroy: function () {\n ChartElement.fn.destroy.call(this);\n delete this.parent;\n }\n });\n ChartContainer.prototype.isStackRoot = true;\n var Pane = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.id = paneID();\n this.createTitle();\n this.content = new ChartElement();\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n this.axes = [];\n this.charts = [];\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 this.title = dataviz.Title.buildTitle(titleOptions, this, Pane.prototype.options.title);\n },\n appendAxis: function (axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n },\n appendAxisAt: function (axis, pos) {\n this.content.append(axis);\n this.axes.splice(pos, 0, axis);\n axis.pane = this;\n },\n appendChart: function (chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n },\n empty: function () {\n var this$1 = this;\n var plotArea = this.parent;\n if (plotArea) {\n for (var i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this$1.axes[i]);\n }\n for (var i$1 = 0; i$1 < this.charts.length; i$1++) {\n plotArea.removeChart(this$1.charts[i$1]);\n }\n }\n this.axes = [];\n this.charts = [];\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n },\n reflow: function (targetBox) {\n var content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n BoxElement.fn.reflow.call(this, targetBox);\n if (content) {\n this.children.push(content);\n }\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n },\n visualStyle: function () {\n var style = BoxElement.fn.visualStyle.call(this);\n style.zIndex = -10;\n return style;\n },\n renderComplete: function () {\n if (this.options.visible) {\n this.createGridLines();\n }\n },\n stackRoot: function () {\n return this;\n },\n clipRoot: function () {\n return this;\n },\n createGridLines: function () {\n var axes = this.axes;\n var allAxes = axes.concat(this.parent.axes);\n var vGridLines = [];\n var hGridLines = [];\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 refresh: function () {\n this.visual.clear();\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n this.visual.append(this.content.visual);\n this.renderComplete();\n this.notifyRender();\n },\n chartsBox: function () {\n var axes = this.axes;\n var length = axes.length;\n var chartsBox = new Box();\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 if (chartsBox.x2 === 0) {\n var allAxes = this.parent.axes;\n var length$1 = allAxes.length;\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 clipBox: function () {\n return this.chartContainer.clipBox;\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 var ID = 1;\n function paneID() {\n return 'pane' + ID++;\n }\n Pane.prototype.isStackRoot = true;\n setDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: { align: LEFT },\n visible: true\n });\n function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n }\n function segmentVisible(series, fields, index) {\n var visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n var pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n }\n function bindSegments(series) {\n var data = series.data;\n var points = [];\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < data.length; idx++) {\n var pointData = SeriesBinder.current.bindPoint(series, idx);\n var value = pointData.valueFields.value;\n if (isString(value)) {\n value = parseFloat(value);\n }\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n pointData.value = Math.abs(value);\n points.push(pointData);\n if (pointData.visible) {\n sum += pointData.value;\n }\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n return {\n total: sum,\n points: points,\n count: count\n };\n }\n function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\n }\n function filterSeriesByType(series, types) {\n var result = [];\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 return result;\n }\n function getDateField(field, row, intlService) {\n if (row === null) {\n return row;\n }\n var key = '_date_' + field;\n var value = row[key];\n if (!value) {\n value = parseDate(intlService, getter(field, true)(row));\n row[key] = value;\n }\n return value;\n }\n function isDateAxis(axisOptions, sampleCategory) {\n var type = axisOptions.type;\n var dateCategory = sampleCategory instanceof Date;\n return !type && dateCategory || equalsIgnoreCase(type, DATE);\n }\n function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n }\n var AREA_REGEX = /area/i;\n function seriesMissingValues(series) {\n if (series.missingValues) {\n return series.missingValues;\n }\n return AREA_REGEX.test(series.type) || series.stack ? ZERO : INTERPOLATE;\n }\n function hasValue$1(series, item) {\n var fields = SeriesBinder.current.bindPoint(series, null, item);\n var valueFields = fields.valueFields;\n for (var field in valueFields) {\n if (dataviz.convertableToNumber(valueFields[field])) {\n return true;\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 var pointHasValue, outPoint;\n var idx = start;\n do {\n idx += dir;\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 if (pointHasValue) {\n return outPoint;\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 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 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 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 if (minPoint) {\n series._outOfRangeMinPoint = minPoint;\n }\n if (maxPoint) {\n series._outOfRangeMaxPoint = maxPoint;\n }\n }\n }\n var PlotAreaBase = ChartElement.extend({\n init: function (series, options, chartService) {\n ChartElement.fn.init.call(this, options);\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.items = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.originalOptions = options;\n this.createPanes();\n this.render();\n this.createCrosshairs();\n },\n initFields: function () {\n },\n initSeries: function () {\n var series = this.series;\n for (var i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n },\n createPanes: function () {\n var this$1 = this;\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 var defaults = deepExtend({ title: { color: titleOptions.color } }, paneDefaults);\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 var currentPane = new Pane(options);\n currentPane.paneIndex = i;\n panes.push(currentPane);\n this$1.append(currentPane);\n }\n this.panes = panes;\n },\n crosshairOptions: function (axis) {\n return axis.options.crosshair;\n },\n createCrosshairs: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n 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.crosshairOptions(axis);\n if (options && options.visible) {\n var currentCrosshair = new Crosshair(this$1.chartService, axis, options);\n this$1.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n },\n removeCrosshairs: function (pane) {\n var crosshairs = this.crosshairs;\n var axes = pane.axes;\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 hideCrosshairs: function () {\n var crosshairs = this.crosshairs;\n for (var idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n },\n findPane: function (name) {\n var panes = this.panes;\n var matchingPane;\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 return matchingPane || panes[0];\n },\n findPointPane: function (point) {\n var panes = this.panes;\n var matchingPane;\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 return matchingPane;\n },\n appendAxis: function (axis) {\n var pane = this.findPane(axis.options.pane);\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n },\n removeAxis: function (axisToRemove) {\n var this$1 = this;\n var filteredAxes = [];\n for (var i = 0; i < this.axes.length; i++) {\n var axis = this$1.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n this.axes = filteredAxes;\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 removeChart: function (chartToRemove) {\n var this$1 = this;\n var filteredCharts = [];\n for (var i = 0; i < this.charts.length; i++) {\n var chart = this$1.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n this.charts = filteredCharts;\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 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 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 var defaults = currentSeries._defaults;\n var color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\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 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 append(legend.items, data);\n },\n groupAxes: function (panes) {\n var xAxes = [];\n var yAxes = [];\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 return {\n x: xAxes,\n y: yAxes,\n any: xAxes.concat(yAxes)\n };\n },\n groupSeriesByPane: function () {\n var this$1 = this;\n var series = this.series;\n var seriesByPane = {};\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var pane = this$1.seriesPaneName(currentSeries);\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [currentSeries];\n }\n }\n return seriesByPane;\n },\n filterVisibleSeries: function (series) {\n var result = [];\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 return result;\n },\n reflow: function (targetBox) {\n var options = this.options.plotArea;\n var panes = this.panes;\n var margin = getSpacing(options.margin);\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n this.detachLabels();\n this.reflowAxes(panes);\n this.reflowCharts(panes);\n },\n redraw: function (panes) {\n var this$1 = this;\n var panesArray = [].concat(panes);\n this.initSeries();\n var root = this.getRoot();\n if (root) {\n root.cleanGradients();\n }\n for (var i = 0; i < panesArray.length; i++) {\n this$1.removeCrosshairs(panesArray[i]);\n panesArray[i].empty();\n }\n this.render(panesArray);\n this.detachLabels();\n this.reflowAxes(this.panes);\n this.reflowCharts(panesArray);\n this.createCrosshairs(panesArray);\n for (var i$1 = 0; i$1 < panesArray.length; i$1++) {\n panesArray[i$1].refresh();\n }\n },\n axisCrossingValues: function (axis, crossingAxes) {\n var options = axis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n var valuesToAdd = crossingAxes.length - crossingValues.length;\n var defaultValue = crossingValues[0] || 0;\n for (var i = 0; i < valuesToAdd; i++) {\n crossingValues.push(defaultValue);\n }\n return crossingValues;\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(targetSlot[X + targetEdge] - slot[X + slotEdge], targetSlot[Y + targetEdge] - slot[Y + slotEdge]);\n if (axis.pane !== targetAxis.pane) {\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n }\n axis.reflow(axisBox);\n },\n alignAxes: function (xAxes, yAxes) {\n var this$1 = this;\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 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 var anchor = paneAnchor(xAxes, pane) || xAnchor;\n var anchorCrossings = xAnchorCrossings;\n if (anchor !== xAnchor) {\n anchorCrossings = this$1.axisCrossingValues(anchor, yAxes);\n }\n this$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n if (axis.options._overlap) {\n continue;\n }\n if (round(axis.lineBox().x1) === round(anchor.lineBox().x1)) {\n if (leftAnchors[paneId]) {\n axis.reflow(axis.box.alignTo(leftAnchors[paneId].box, LEFT).translate(-axis.options.margin, 0));\n }\n if (visible) {\n leftAnchors[paneId] = axis;\n }\n }\n if (round(axis.lineBox().x2) === round(anchor.lineBox().x2)) {\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n this$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n if (rightAnchors[paneId]) {\n axis.reflow(axis.box.alignTo(rightAnchors[paneId].box, RIGHT).translate(axis.options.margin, 0));\n }\n if (visible) {\n rightAnchors[paneId] = axis;\n }\n }\n if (i !== 0 && yAnchor.pane === axis.pane) {\n axis.alignTo(yAnchor);\n axis.reflow(axis.box);\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 var anchor$1 = paneAnchor(yAxes, pane$1) || yAnchor;\n var anchorCrossings$1 = yAnchorCrossings;\n if (anchor$1 !== yAnchor) {\n anchorCrossings$1 = this$1.axisCrossingValues(anchor$1, xAxes);\n }\n this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n if (axis$1.options._overlap) {\n continue;\n }\n if (round(axis$1.lineBox().y1) === round(anchor$1.lineBox().y1)) {\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.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n if (topAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box.alignTo(topAnchors[paneId$1].box, TOP).translate(0, -axis$1.options.margin));\n }\n if (visible$1) {\n topAnchors[paneId$1] = axis$1;\n }\n }\n if (round(axis$1.lineBox().y2, datavizConstants.COORD_PRECISION) === round(anchor$1.lineBox().y2, datavizConstants.COORD_PRECISION)) {\n if (bottomAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box.alignTo(bottomAnchors[paneId$1].box, BOTTOM).translate(0, axis$1.options.margin));\n }\n if (visible$1) {\n bottomAnchors[paneId$1] = axis$1;\n }\n }\n if (i$1 !== 0) {\n axis$1.alignTo(xAnchor);\n axis$1.reflow(axis$1.box);\n }\n }\n },\n shrinkAxisWidth: function (panes) {\n var axes = this.groupAxes(panes).any;\n var axisBox = axisGroupBox(axes);\n var overflowX = 0;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n if (currentPane.axes.length > 0) {\n overflowX = Math.max(overflowX, axisBox.width() - currentPane.contentBox.width());\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 if (!currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n }\n }\n }\n },\n shrinkAxisHeight: function (panes) {\n var shrinked;\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 if (overflowY !== 0) {\n for (var j = 0; j < axes.length; j++) {\n var currentAxis = axes[j];\n if (currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(0, overflowY));\n }\n }\n shrinked = true;\n }\n }\n return shrinked;\n },\n fitAxes: function (panes) {\n var axes = this.groupAxes(panes).any;\n var offsetX = 0;\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 if (paneAxes.length > 0) {\n var axisBox = axisGroupBox(paneAxes);\n var offsetY = Math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n offsetX = Math.max(offsetX, paneBox.x1 - axisBox.x1);\n for (var j = 0; j < paneAxes.length; j++) {\n var currentAxis = paneAxes[j];\n currentAxis.reflow(currentAxis.box.translate(0, offsetY));\n }\n }\n }\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis$1 = axes[i$1];\n currentAxis$1.reflow(currentAxis$1.box.translate(offsetX, 0));\n }\n },\n reflowAxes: function (panes) {\n var this$1 = this;\n var axes = this.groupAxes(panes);\n for (var i = 0; i < panes.length; i++) {\n this$1.reflowPaneAxes(panes[i]);\n }\n if (axes.x.length > 0 && axes.y.length > 0) {\n this.alignAxes(axes.x, axes.y);\n this.shrinkAxisWidth(panes);\n this.autoRotateAxisLabels(axes);\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisWidth(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n this.shrinkAxisHeight(panes);\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisHeight(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n this.fitAxes(panes);\n }\n },\n autoRotateAxisLabels: function (groupedAxes) {\n var this$1 = this;\n var ref = this;\n var panes = ref.panes;\n var axes = allPaneAxes(panes);\n var rotated;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (axis.autoRotateLabels()) {\n rotated = true;\n }\n }\n if (rotated) {\n for (var idx$1 = 0; idx$1 < panes.length; idx$1++) {\n this$1.reflowPaneAxes(panes[idx$1]);\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 reflowPaneAxes: function (pane) {\n var axes = pane.axes;\n var length = axes.length;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n axes[i].reflow(pane.contentBox);\n }\n }\n },\n reflowCharts: function (panes) {\n var charts = this.charts;\n var count = charts.length;\n var box = this.box;\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 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 remainingPanes = panesLength;\n var autoHeightPanes = 0;\n var top = box.y1;\n for (var i = 0; i < panesLength; i++) {\n var currentPane = panes[i];\n var height = currentPane.options.height;\n currentPane.options.width = box.width();\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 currentPane.reflow(box.clone());\n remainingHeight -= currentPane.options.height;\n }\n }\n for (var i$1 = 0; i$1 < panesLength; i$1++) {\n var currentPane$1 = panes[i$1];\n if (!currentPane$1.options.height) {\n currentPane$1.options.height = remainingHeight / autoHeightPanes;\n }\n }\n for (var i$2 = 0; i$2 < panesLength; i$2++) {\n var currentPane$2 = panes[i$2];\n var paneBox = box.clone().move(box.x1, top);\n currentPane$2.reflow(paneBox);\n remainingPanes--;\n top += currentPane$2.options.height;\n }\n },\n backgroundBox: function () {\n var axes = this.axes;\n var axesCount = axes.length;\n var box;\n for (var i = 0; i < axesCount; i++) {\n var axisA = axes[i];\n for (var j = 0; j < axesCount; j++) {\n var axisB = axes[j];\n if (axisA.options.vertical !== axisB.options.vertical) {\n var lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n if (!box) {\n box = lineBox;\n } else {\n box = box.wrap(lineBox);\n }\n }\n }\n }\n return box || this.box;\n },\n chartsBoxes: function () {\n var panes = this.panes;\n var boxes = [];\n for (var idx = 0; idx < panes.length; idx++) {\n boxes.push(panes[idx].chartsBox());\n }\n return boxes;\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 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 createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options.plotArea;\n var opacity = options.opacity;\n var background = options.background;\n var border = options.border;\n if (border === void 0) {\n border = {};\n }\n if (isTransparent(background)) {\n background = WHITE;\n opacity = 0;\n }\n var bg = this._bgVisual = new drawing.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 this.addBackgroundPaths(bg);\n this.appendVisual(bg);\n },\n pointsByCategoryIndex: function (categoryIndex) {\n var charts = this.charts;\n var result = [];\n if (categoryIndex !== null) {\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n if (chart.pane.options.name === '_navigator') {\n continue;\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 return result;\n },\n pointsBySeriesIndex: function (seriesIndex) {\n return this.filterPoints(function (point) {\n return point.series.index === seriesIndex;\n });\n },\n pointsBySeriesName: function (name) {\n return this.filterPoints(function (point) {\n return point.series.name === name;\n });\n },\n filterPoints: function (callback) {\n var charts = this.charts;\n var result = [];\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 return result;\n },\n findPoint: function (callback) {\n var charts = this.charts;\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 paneByPoint: function (point) {\n var panes = this.panes;\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 detachLabels: function () {\n var axes = this.groupAxes(this.panes);\n var xAxes = axes.x;\n var yAxes = axes.y;\n this.detachAxisGroupLabels(yAxes, xAxes);\n this.detachAxisGroupLabels(xAxes, yAxes);\n },\n detachAxisGroupLabels: function (axes, crossingAxes) {\n var this$1 = this;\n var labelAxisCount = 0;\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.createLabelAxis(axis, axisIndex, anchor);\n if (labelAxis) {\n labelAxisCount++;\n var pos = pane.axes.indexOf(axis) + labelAxisCount;\n pane.appendAxisAt(labelAxis, pos);\n }\n }\n },\n createLabelAxis: function (axis, axisIndex, anchor) {\n var labelOptions = axis.options.labels;\n var position = labelOptions.position;\n var onAxis = position !== datavizConstants.END && position !== datavizConstants.START;\n var visible = labelOptions.visible;\n if (onAxis || visible === false) {\n return null;\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 === datavizConstants.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 if (crossingValue - edge === 0) {\n return null;\n }\n anchorCrossings.splice(axisIndex + 1, 0, edge);\n anchor.options.axisCrossingValues = anchorCrossings;\n var labelAxis = axis.clone();\n axis.clear();\n labelAxis.options.name = undefined;\n labelAxis.options.line.visible = false;\n labelAxis.options.crosshair = undefined;\n labelAxis.options.notes = undefined;\n labelAxis.options.plotBands = undefined;\n return labelAxis;\n }\n });\n function isSingleAxis(axis) {\n return !axis.pane.axes.some(function (a) {\n return a.options.vertical === axis.options.vertical && a !== axis && a.options.visible !== false;\n });\n }\n function axisGroupBox(axes) {\n var length = axes.length;\n var box;\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 if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n return box || new Box();\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 function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n var allPaneAxes = function (panes) {\n return panes.reduce(function (acc, pane) {\n return acc.concat(pane.axes);\n }, []);\n };\n setDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: { margin: {} },\n background: '',\n border: {\n color: BLACK,\n width: 0\n },\n paneDefaults: { title: {} },\n legend: {\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n }\n });\n var PlotAreaEventsMixin = {\n hover: function (chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_HOVER);\n },\n click: function (chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_CLICK);\n }\n };\n var SeriesAggregator = Class.extend({\n init: function (series, binder, defaultAggregates) {\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 this._series = series;\n this._binder = binder;\n for (var i = 0; i < canonicalFields.length; i++) {\n var field = canonicalFields[i];\n var fieldAggregate = void 0;\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 if (fieldAggregate) {\n seriesFields.push({\n canonicalName: field,\n name: sourceFields[i],\n transform: isFunction(fieldAggregate) ? fieldAggregate : Aggregates[fieldAggregate]\n });\n }\n }\n },\n aggregatePoints: function (srcPoints, group) {\n var this$1 = this;\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 if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n var fn = function () {\n };\n fn.prototype = firstDataItem;\n result = new fn();\n }\n for (var i = 0; i < seriesFields.length; i++) {\n var field = seriesFields[i];\n var srcValues = this$1._bindField(data.values, field.canonicalName);\n var value = field.transform(srcValues, series, data.dataItems, group);\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 return result;\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 for (var i = 0; i < points.length; i++) {\n var pointIx = points[i];\n values.push(binder.bindPoint(series, pointIx));\n dataItems.push(series.data[pointIx]);\n }\n return {\n values: values,\n dataItems: dataItems\n };\n },\n _bindField: function (data, field) {\n var values = [];\n var count = data.length;\n for (var i = 0; i < count; i++) {\n var item = data[i];\n var valueFields = item.valueFields;\n var value = void 0;\n if (defined(valueFields[field])) {\n value = valueFields[field];\n } else {\n value = item.fields[field];\n }\n values.push(value);\n }\n return values;\n }\n });\n function setValue(fieldName, target, value) {\n var parentObj = target;\n var field = fieldName;\n if (fieldName.indexOf('.') > -1) {\n var parts = fieldName.split('.');\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 parentObj[field] = value;\n }\n var DefaultAggregates = Class.extend({\n init: function () {\n this._defaults = {};\n },\n register: function (seriesTypes, aggregates) {\n var this$1 = this;\n for (var i = 0; i < seriesTypes.length; i++) {\n this$1._defaults[seriesTypes[i]] = aggregates;\n }\n },\n query: function (seriesType) {\n return this._defaults[seriesType];\n }\n });\n DefaultAggregates.current = new DefaultAggregates();\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 if (fromOptions.visible) {\n this.labelFrom = this._createLabel(fromOptions);\n this.append(this.labelFrom);\n }\n if (toOptions.visible) {\n this.labelTo = this._createLabel(toOptions);\n this.append(this.labelTo);\n }\n },\n _createLabel: function (options) {\n var labelTemplate = getTemplate(options);\n var pointData = this.pointData();\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(options.format);\n }\n return new BarLabel(labelText, deepExtend({ vertical: this.options.vertical }, options), pointData);\n },\n reflow: function (targetBox) {\n this.render();\n var ref = this;\n var labelFrom = ref.labelFrom;\n var labelTo = ref.labelTo;\n var value = ref.value;\n this.box = targetBox;\n if (labelFrom) {\n labelFrom.options.aboveAxis = value.from > value.to;\n labelFrom.reflow(targetBox);\n }\n if (labelTo) {\n labelTo.options.aboveAxis = value.to > value.from;\n labelTo.reflow(targetBox);\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n }\n });\n RangeBar.prototype.defaults = deepExtend({}, RangeBar.prototype.defaults, {\n labels: { format: '{0} - {1}' },\n tooltip: { format: '{1}' }\n });\n var RangeBarChart = BarChart.extend({\n pointType: function () {\n return RangeBar;\n },\n pointValue: function (data) {\n return data.valueFields;\n },\n formatPointValue: function (point, format) {\n if (point.value.from === null && point.value.to === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value.from, point.value.to);\n },\n plotRange: function (point) {\n if (!point) {\n return 0;\n }\n return [\n point.value.from,\n 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 if (value !== null && isNumber(from) && isNumber(to)) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, from);\n axisRange.max = Math.max(axisRange.max, from);\n axisRange.min = Math.min(axisRange.min, to);\n axisRange.max = Math.max(axisRange.max, to);\n }\n },\n aboveAxis: function (point) {\n var value = point.value;\n return value.from < value.to;\n }\n });\n RangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n var RangeLinePoint = LinePoint.extend({\n aliasFor: function () {\n return this.parent;\n }\n });\n var AUTO = 'auto';\n var DEFAULT_FROM_FORMAT = '{0}';\n var DEFAULT_TO_FORMAT = '{1}';\n var RangeAreaPoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n this.initLabelsFormat();\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n var value = this.value;\n var fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.from,\n markers: markers.from\n }));\n var toPoint = this.toPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.to,\n markers: markers.to\n }));\n this.copyFields(fromPoint);\n this.copyFields(toPoint);\n this.append(fromPoint);\n this.append(toPoint);\n },\n reflow: function (targetBox) {\n this.render();\n var fromBox = targetBox.from;\n var toBox = targetBox.to;\n this.positionLabels(fromBox, toBox);\n this.fromPoint.reflow(fromBox);\n this.toPoint.reflow(toBox);\n this.box = this.fromPoint.markerBox().clone().wrap(this.toPoint.markerBox());\n },\n createHighlight: function () {\n var group = new Group();\n group.append(this.fromPoint.createHighlight());\n group.append(this.toPoint.createHighlight());\n return group;\n },\n highlightVisual: function () {\n return this.visual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n from: this.fromPoint.highlightVisualArgs(),\n to: this.toPoint.highlightVisualArgs()\n };\n },\n tooltipAnchor: function () {\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(this.box);\n if (showTooltip) {\n var box = this.box;\n var center = box.center();\n var horizontalAlign = LEFT;\n var x, y, verticalAlign;\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 return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n },\n unclipElements: function () {\n this.fromPoint.unclipElements();\n this.toPoint.unclipElements();\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, { format: DEFAULT_FROM_FORMAT });\n }\n if (!labels.to || !labels.to.format) {\n labels.to = $.extend({}, labels.to, { format: DEFAULT_TO_FORMAT });\n }\n }\n },\n positionLabels: function (fromBox, toBox) {\n var ref = this.options;\n var labels = ref.labels;\n var vertical = ref.vertical;\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 if (!labels.from || !labels.from.position) {\n this.fromPoint.options.labels.position = fromLabelPosition;\n }\n if (!labels.to || !labels.to.position) {\n this.toPoint.options.labels.position = toLabelPosition;\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 deepExtend(RangeAreaPoint.prototype, PointEventsMixin);\n deepExtend(RangeAreaPoint.prototype, NoteMixin);\n RangeAreaPoint.prototype.defaults = {\n markers: {\n visible: false,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: { width: 2 },\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: { label: {} },\n highlight: {\n markers: {\n border: {\n color: WHITE,\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n tooltip: { format: '{0} - {1}' }\n };\n var RangeAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\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 return fromSegments;\n },\n createStroke: function (style) {\n var toPath = new Path(style);\n var fromPath = new Path(style);\n toPath.segments.push.apply(toPath.segments, this.strokeSegments());\n fromPath.segments.push.apply(fromPath.segments, this.stackSegments());\n this.visual.append(toPath);\n this.visual.append(fromPath);\n },\n hasStackSegment: function () {\n return true;\n },\n fromPoints: function () {\n return this.linePoints.map(function (point) {\n return point.fromPoint;\n });\n },\n toPoints: function () {\n return this.linePoints.map(function (point) {\n return point.toPoint;\n });\n }\n });\n var SplineRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function () {\n return this.createCurveSegments(this.toPoints());\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n }\n return fromSegments;\n },\n createCurveSegments: function (points) {\n var curveProcessor = new CurveProcessor();\n return curveProcessor.process(this.toGeometryPoints(points));\n }\n });\n var StepRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\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 return fromSegments;\n }\n });\n deepExtend(StepRangeAreaSegment.prototype, StepLineMixin);\n var RangeAreaChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.renderSegments();\n },\n pointType: function () {\n return RangeAreaPoint;\n },\n createPoint: 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 value = data.valueFields;\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 var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new RangeAreaPoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\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 return new segmentType(linePoints, currentSeries, seriesIx);\n },\n plotRange: function (point, startValue) {\n if (!point) {\n return [\n startValue,\n startValue\n ];\n }\n return [\n point.value.from,\n 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 pointSlot: function (categorySlot, valueSlot) {\n var from = valueSlot.from;\n var to = valueSlot.to;\n var fromSlot, toSlot;\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 return {\n from: fromSlot,\n to: toSlot\n };\n },\n addValue: function (data, fields) {\n var valueFields = data.valueFields;\n if (!isNumber(valueFields.from)) {\n valueFields.from = valueFields.to;\n }\n if (!isNumber(valueFields.to)) {\n valueFields.to = valueFields.from;\n }\n CategoricalChart.fn.addValue.call(this, data, fields);\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] || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n var from = value.from;\n var to = value.to;\n axisRange.min = Math.min(axisRange.min, from, to);\n axisRange.max = Math.max(axisRange.max, from, to);\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.from, value.to);\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 return result.concat(this._segments);\n }\n });\n deepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\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 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 oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n var mid = lhSlot.center().x;\n oPoints.push([\n oSlot.x1,\n oSlot.y1\n ]);\n oPoints.push([\n mid,\n oSlot.y1\n ]);\n cPoints.push([\n mid,\n cSlot.y1\n ]);\n cPoints.push([\n cSlot.x2,\n cSlot.y1\n ]);\n lhPoints.push([\n mid,\n lhSlot.y1\n ]);\n lhPoints.push([\n mid,\n lhSlot.y2\n ]);\n this.lines = [\n oPoints,\n cPoints,\n lhPoints\n ];\n this.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n this.reflowNote();\n },\n createBody: function () {\n }\n });\n var OHLCChart = CandlestickChart.extend({\n pointType: function () {\n return OHLCPoint;\n }\n });\n var WaterfallSegment = ChartElement.extend({\n init: function (from, to, series) {\n ChartElement.fn.init.call(this);\n this.from = from;\n this.to = to;\n this.series = series;\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 if (from.isVertical) {\n var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n points.push([\n fromBox.x1,\n y\n ], [\n toBox.x2,\n y\n ]);\n } else {\n var x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n points.push([\n x,\n fromBox.y1\n ], [\n x,\n toBox.y2\n ]);\n }\n return points;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var line = this.series.line || {};\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 alignPathToPixel(path);\n this.visual.append(path);\n }\n });\n setDefaultOptions(WaterfallSegment, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n });\n var WaterfallChart = BarChart.extend({\n render: function () {\n BarChart.fn.render.call(this);\n this.createSegments();\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var series = this.options.series;\n var totalCategories = categoriesCount(series);\n var isVertical = !this.options.invertAxes;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var total = 0;\n var runningTotal = 0;\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 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 callback(data, {\n category: this$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 updateRange: function (value, fields) {\n BarChart.fn.updateRange.call(this, { value: fields.to }, fields);\n },\n aboveAxis: function (point) {\n return point.value >= 0;\n },\n plotRange: function (point) {\n return [\n point.from,\n point.to\n ];\n },\n createSegments: function () {\n var this$1 = this;\n var series = this.options.series;\n var seriesPoints = this.seriesPoints;\n var segments = this.segments = [];\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var points = seriesPoints[seriesIx];\n if (points) {\n var prevPoint = void 0;\n for (var pointIx = 0; pointIx < points.length; pointIx++) {\n var point = points[pointIx];\n if (point && prevPoint) {\n var segment = new WaterfallSegment(prevPoint, point, currentSeries);\n segments.push(segment);\n this$1.append(segment);\n }\n prevPoint = point;\n }\n }\n }\n }\n });\n var AREA_SERIES = [\n AREA,\n VERTICAL_AREA,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ];\n var OUT_OF_RANGE_SERIES = [\n LINE,\n VERTICAL_LINE\n ].concat(AREA_SERIES);\n var CategoricalPlotArea = PlotAreaBase.extend({\n initFields: function (series) {\n var this$1 = this;\n this.namedCategoryAxes = {};\n this.namedValueAxes = {};\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n if (series.length > 0) {\n this.invertAxes = inArray(series[0].type, [\n BAR,\n BULLET,\n VERTICAL_LINE,\n VERTICAL_AREA,\n VERTICAL_RANGE_AREA,\n RANGE_BAR,\n HORIZONTAL_WATERFALL,\n VERTICAL_BOX_PLOT\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.stack100 = true;\n break;\n }\n }\n }\n },\n render: function (panes) {\n if (panes === void 0) {\n panes = this.panes;\n }\n this.createCategoryAxes(panes);\n this.aggregateCategories(panes);\n this.createCategoryAxesLabels(panes);\n this.createCharts(panes);\n this.createValueAxes(panes);\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis instanceof CategoryAxis) {\n delete this.namedCategoryAxes[axisName];\n } else {\n this.valueAxisRangeTracker.reset(axisName);\n delete this.namedValueAxes[axisName];\n }\n if (axis === this.categoryAxis) {\n delete this.categoryAxis;\n }\n if (axis === this.valueAxis) {\n delete this.valueAxis;\n }\n },\n createCharts: function (panes) {\n var this$1 = this;\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.addToLegend(paneSeries);\n var visibleSeries = this$1.filterVisibleSeries(paneSeries);\n if (!visibleSeries) {\n continue;\n }\n var groups = this$1.groupSeriesByCategoryAxis(visibleSeries);\n for (var groupIx = 0; groupIx < groups.length; groupIx++) {\n this$1.createChartGroup(groups[groupIx], pane);\n }\n }\n },\n createChartGroup: function (series, pane) {\n this.createAreaChart(filterSeriesByType(series, [\n AREA,\n VERTICAL_AREA\n ]), pane);\n this.createRangeAreaChart(filterSeriesByType(series, [\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ]), pane);\n this.createBarChart(filterSeriesByType(series, [\n COLUMN,\n BAR\n ]), pane);\n this.createRangeBarChart(filterSeriesByType(series, [\n RANGE_COLUMN,\n RANGE_BAR\n ]), pane);\n this.createBulletChart(filterSeriesByType(series, [\n BULLET,\n VERTICAL_BULLET\n ]), pane);\n this.createCandlestickChart(filterSeriesByType(series, CANDLESTICK), pane);\n this.createBoxPlotChart(filterSeriesByType(series, [\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ]), pane);\n this.createOHLCChart(filterSeriesByType(series, OHLC), pane);\n this.createWaterfallChart(filterSeriesByType(series, [\n WATERFALL,\n HORIZONTAL_WATERFALL\n ]), pane);\n this.createLineChart(filterSeriesByType(series, [\n LINE,\n VERTICAL_LINE\n ]), pane);\n },\n aggregateCategories: function (panes) {\n var this$1 = this;\n var series = this.srcSeries || this.series;\n var processedSeries = [];\n this._currentPointsCache = {};\n this._seriesPointsCache = this._seriesPointsCache || {};\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var categoryAxis = this$1.seriesCategoryAxis(currentSeries);\n var axisPane = this$1.findPane(categoryAxis.options.pane);\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n currentSeries = this$1.aggregateSeries(currentSeries, categoryAxis);\n } else {\n currentSeries = this$1.filterSeries(currentSeries, categoryAxis);\n }\n processedSeries.push(currentSeries);\n }\n this._seriesPointsCache = this._currentPointsCache;\n this._currentPointsCache = null;\n this.srcSeries = series;\n this.series = processedSeries;\n },\n filterSeries: function (series, categoryAxis) {\n var dataLength = (series.data || {}).length;\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, dataLength);\n if (!(isNumber(categoryAxis.options.min) || isNumber(categoryAxis.options.max))) {\n return series;\n }\n var range = categoryAxis.currentRangeIndices();\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n var currentSeries = deepExtend({}, series);\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max + 1);\n if (outOfRangePoints) {\n createOutOfRangePoints(currentSeries, range, dataLength, function (idx) {\n return {\n item: series.data[idx],\n category: categoryAxis.categoryAt(idx, true),\n categoryIx: idx - range.min\n };\n }, function (idx) {\n return defined(series.data[idx]);\n });\n }\n return currentSeries;\n },\n clearSeriesPointsCache: function () {\n this._seriesPointsCache = {};\n },\n seriesSourcePoints: function (series, categoryAxis) {\n var this$1 = this;\n var key = series.index + ';' + categoryAxis.categoriesHash();\n if (this._seriesPointsCache[key]) {\n this._currentPointsCache[key] = this._seriesPointsCache[key];\n return this._seriesPointsCache[key];\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 getFn = dateAxis ? getDateField : getField;\n var result = [];\n if (!dateAxis) {\n categoryAxis.mapCategories();\n }\n for (var idx = 0; idx < srcData.length; idx++) {\n var category = void 0;\n if (series.categoryField) {\n category = getFn(series.categoryField, srcData[idx], this$1.chartService.intl);\n } else {\n category = srcCategories[idx];\n }\n if (defined(category) && category !== null) {\n var categoryIx = categoryAxis.totalIndex(category);\n result[categoryIx] = result[categoryIx] || {\n items: [],\n category: category\n };\n result[categoryIx].items.push(idx);\n }\n }\n this._currentPointsCache[key] = result;\n return result;\n },\n aggregateSeries: function (series, categoryAxis) {\n var srcData = series.data;\n if (!srcData.length) {\n return series;\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 var dataItems = categoryAxis.options.dataItems || [];\n var range = categoryAxis.currentRangeIndices();\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 point.categoryIx = categoryIdx;\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 return point;\n };\n for (var idx = range.min; idx <= range.max; idx++) {\n var point = categoryItem(idx);\n data[point.categoryIx] = point.item;\n if (point.items && point.items.length) {\n dataItems[point.categoryIx] = point.item;\n }\n }\n if (inArray(result.type, OUT_OF_RANGE_SERIES)) {\n createOutOfRangePoints(result, range, categoryAxis.totalCount(), categoryItem, function (idx) {\n return srcPoints[idx];\n });\n }\n categoryAxis.options.dataItems = dataItems;\n return result;\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 if (categoriesToAdd > 0) {\n categories = categoryAxis.options.categories = categoryAxis.options.categories.slice(0);\n while (categoriesToAdd--) {\n categories.push('');\n }\n }\n this.valueAxisRangeTracker.update(chart.valueAxisRanges);\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\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) {\n return a.name === axisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = (panes[0] || {}).name || 'default';\n var paneName = (axis || {}).pane || defaultPaneName;\n return paneName;\n },\n seriesCategoryAxis: function (series) {\n var axisName = series.categoryAxis;\n var axis = axisName ? this.namedCategoryAxes[axisName] : this.categoryAxis;\n if (!axis) {\n throw new Error('Unable to locate category axis with name ' + axisName);\n }\n return axis;\n },\n stackableChartOptions: function (firstSeries, pane) {\n var stack = firstSeries.stack;\n var isStacked100 = stack && stack.type === '100%';\n var clip = pane.options.clip;\n return {\n isStacked: stack,\n isStacked100: isStacked100,\n clip: clip\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 (!unique.hasOwnProperty(name)) {\n unique[name] = true;\n categoryAxes.push(name);\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 groups.push(axisSeries);\n }\n return groups;\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\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(firstSeries, pane)));\n this.appendChart(barChart, pane);\n },\n createRangeBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\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 this.appendChart(rangeColumnChart, pane);\n },\n createBulletChart: function (series, pane) {\n if (series.length === 0) {\n return;\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 this.appendChart(bulletChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var lineChart = new LineChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(lineChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var areaChart = new AreaChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(areaChart, pane);\n },\n createRangeAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var rangeAreaChart = new RangeAreaChart(this, {\n invertAxes: this.invertAxes,\n series: series,\n clip: pane.options.clip\n });\n this.appendChart(rangeAreaChart, pane);\n },\n createOHLCChart: function (series, pane) {\n if (series.length === 0) {\n return;\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 this.appendChart(chart, pane);\n },\n createCandlestickChart: function (series, pane) {\n if (series.length === 0) {\n return;\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 this.appendChart(chart, pane);\n },\n createBoxPlotChart: function (series, pane) {\n if (series.length === 0) {\n return;\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 this.appendChart(chart, pane);\n },\n createWaterfallChart: function (series, pane) {\n if (series.length === 0) {\n return;\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 this.appendChart(waterfallChart, pane);\n },\n axisRequiresRounding: function (categoryAxisName, categoryAxisIndex) {\n var this$1 = this;\n var centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n for (var seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n var currentSeries = this$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 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 aggregatedAxis: function (categoryAxisName, categoryAxisIndex) {\n var series = this.series;\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 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 createCategoryAxes: function (panes) {\n var this$1 = this;\n var invertAxes = this.invertAxes;\n var definitions = [].concat(this.options.categoryAxis);\n var axes = [];\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1.findPane(axisOptions.pane);\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var categories = axisOptions.categories;\n if (categories === void 0) {\n categories = [];\n }\n axisOptions = deepExtend({\n vertical: invertAxes,\n reverse: !invertAxes && this$1.chartService.rtl,\n axisCrossingValue: invertAxes ? MAX_VALUE : 0\n }, axisOptions);\n if (!defined(axisOptions.justified)) {\n axisOptions.justified = this$1.isJustified();\n }\n if (this$1.axisRequiresRounding(name, i)) {\n axisOptions.justified = false;\n }\n var categoryAxis = void 0;\n if (isDateAxis(axisOptions, categories[0])) {\n categoryAxis = new dataviz.DateCategoryAxis(axisOptions, this$1.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this$1.chartService);\n }\n definitions[i].categories = categoryAxis.options.srcCategories;\n if (name) {\n if (this$1.namedCategoryAxes[name]) {\n throw new Error('Category axis with name ' + name + ' is already defined');\n }\n this$1.namedCategoryAxes[name] = categoryAxis;\n }\n categoryAxis.axisIndex = i;\n axes.push(categoryAxis);\n this$1.appendAxis(categoryAxis);\n }\n }\n var primaryAxis = this.categoryAxis || axes[0];\n this.categoryAxis = primaryAxis;\n if (invertAxes) {\n this.axisY = primaryAxis;\n } else {\n this.axisX = primaryAxis;\n }\n },\n isJustified: function () {\n var series = this.series;\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 return true;\n },\n createValueAxes: function (panes) {\n var this$1 = this;\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 = {\n vertical: !invertAxes,\n reverse: invertAxes && this.chartService.rtl\n };\n var axes = [];\n if (this.stack100) {\n baseOptions.roundToMajorUnit = false;\n baseOptions.labels = { format: 'P0' };\n }\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1.findPane(axisOptions.pane);\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? {\n min: 0.1,\n max: 1\n } : {\n min: 0,\n max: 1\n };\n var range = tracker.query(name) || defaultRange || defaultAxisRange;\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 var axisType = void 0;\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n var valueAxis = new axisType(range.min, range.max, deepExtend({}, baseOptions, axisOptions), this$1.chartService);\n if (name) {\n if (this$1.namedValueAxes[name]) {\n throw new Error('Value axis with name ' + name + ' is already defined');\n }\n this$1.namedValueAxes[name] = valueAxis;\n }\n valueAxis.axisIndex = i;\n axes.push(valueAxis);\n this$1.appendAxis(valueAxis);\n }\n }\n var primaryAxis = this.valueAxis || axes[0];\n this.valueAxis = primaryAxis;\n if (invertAxes) {\n this.axisX = primaryAxis;\n } else {\n this.axisY = primaryAxis;\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 if (!pane) {\n return;\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 if (categories.length === 0) {\n appendIfNotNull(categories, this.categoryAxis.getCategory(point));\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 pointPane: function (point) {\n var panes = this.panes;\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 updateAxisOptions: function (axis, options) {\n updateAxisOptions(this.options, axis, options);\n updateAxisOptions(this.originalOptions, axis, options);\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 function groupSeries(series, axis, axisIx) {\n return grep(series, function (s) {\n return axisIx === 0 && !s.categoryAxis || s.categoryAxis === axis;\n });\n }\n setDefaultOptions(CategoricalPlotArea, {\n categoryAxis: {},\n valueAxis: {}\n });\n deepExtend(CategoricalPlotArea.prototype, PlotAreaEventsMixin);\n var Highlight = Class.extend({\n init: function () {\n this._points = [];\n },\n destroy: function () {\n this._points = [];\n },\n show: function (points, opacity) {\n var this$1 = this;\n var arrayPoints = [].concat(points);\n this.hide();\n for (var i = 0; i < arrayPoints.length; i++) {\n var point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this$1.togglePointHighlight(point, true, opacity);\n this$1._points.push(point);\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 hide: function () {\n var this$1 = this;\n var points = this._points;\n while (points.length) {\n this$1.togglePointHighlight(points.pop(), false);\n }\n },\n isHighlighted: function (element) {\n var points = this._points;\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (element === point) {\n return true;\n }\n }\n return false;\n }\n });\n function preventDefault() {\n this._defaultPrevented = true;\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 return accept;\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 var Pannable = Class.extend({\n init: function (plotArea, options) {\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n },\n start: function (e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\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 end: function () {\n var active = this._active;\n this._active = false;\n return active;\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 destroy: function () {\n delete this.plotArea;\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 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 if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n var range = axis.pan(delta);\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n return updatedAxes;\n }\n });\n Pannable.prototype.options = {\n key: 'none',\n lock: 'none'\n };\n var ZoomSelection = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\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 removeElement: function () {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n },\n setStyles: function (styles) {\n elementStyles(this._marquee, styles);\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 if (zoomPane && clipBox) {\n var offset = this._elementOffset();\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\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 return true;\n }\n }\n return false;\n },\n _elementOffset: function () {\n var chartElement = this.chart.element;\n var ref = elementStyles(chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var offset = dataviz.elementOffset(chartElement);\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n },\n move: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\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 var start = {\n x: selectionPosition.left,\n y: selectionPosition.top\n };\n var end = {\n x: selectionPosition.left + selectionPosition.width,\n y: selectionPosition.top + selectionPosition.height\n };\n this._updateAxisRanges(start, end);\n this.removeElement();\n delete this._zoomPane;\n return toChartAxisRanges(this.axisRanges);\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 destroy: function () {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n },\n _updateAxisRanges: function (start, end) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\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 this.axisRanges = axisRanges;\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 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 if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\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 ZoomSelection.prototype.options = {\n key: 'shift',\n lock: 'none'\n };\n var MousewheelZoom = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({ rate: 0.3 }, this.options, options);\n },\n updateRanges: function (delta, coords) {\n var this$1 = this;\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this.chart._plotArea.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) && axis.zoomRange) {\n var range = axis.zoomRange(-delta * this$1.options.rate, coords);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n var plotArea = this.chart._plotArea;\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 destroy: function () {\n delete this.chart;\n }\n });\n var LegendLayout = ChartElement.extend({\n init: function (options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n },\n render: function () {\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var vertical = options.vertical;\n this.visual = new drawing.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? 'vertical' : 'horizontal',\n reverse: options.rtl,\n alignItems: vertical ? 'start' : 'center'\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 reflow: function (box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n var bbox = this.visual.clippedBBox();\n if (bbox) {\n this.box = dataviz.rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n },\n renderVisual: function () {\n this.addVisual();\n },\n createVisual: function () {\n }\n });\n var LegendItem = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n },\n createContainer: function () {\n this.container = new dataviz.FloatElement({\n vertical: false,\n wrap: false,\n align: CENTER,\n spacing: this.options.spacing\n });\n this.append(this.container);\n },\n createMarker: function () {\n this.container.append(new ShapeElement(this.markerOptions()));\n },\n markerOptions: function () {\n var options = this.options;\n var markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: { color: markerColor }\n });\n },\n createLabel: function () {\n var options = this.options;\n var labelOptions = deepExtend({}, options.labels);\n this.container.append(new TextBox(options.text, labelOptions));\n },\n renderComplete: function () {\n BoxElement.fn.renderComplete.call(this);\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 this.appendVisual(eventSink);\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_CLICK, args) && e && e.type === 'contextmenu') {\n e.preventDefault();\n }\n },\n over: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n return true;\n },\n out: function (widget, e) {\n widget._unsetActivePoint();\n widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\n },\n eventArgs: function (e) {\n var options = this.options;\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 renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\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 markers: this.markerOptions(),\n labels: options.labels\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n this$1.renderComplete();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n }\n });\n var HORIZONTAL = 'horizontal';\n var POINTER = 'pointer';\n var CUSTOM = 'custom';\n var Legend = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = {};\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!inArray(this.options.position, [\n TOP,\n RIGHT,\n BOTTOM,\n LEFT,\n CUSTOM\n ])) {\n this.options.position = RIGHT;\n }\n this.createContainers();\n this.createLegendTitle(options.title);\n this.createItems();\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 if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [\n TOP,\n BOTTOM\n ])) {\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 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 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 this.append(this.container);\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 items = options.items;\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n var count = items.length;\n for (var i = 0; i < count; i++) {\n var item = items[i];\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels,\n rtl: chartService.rtl\n }, options.item, item)));\n }\n innerElement.render();\n this.itemsContainer.append(innerElement);\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 !== HORIZONTAL || (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [\n LEFT,\n RIGHT\n ]));\n return vertical;\n },\n hasItems: function () {\n return this.container.children[0].children.length > 0;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var legendBox = targetBox.clone();\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\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 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 if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\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 container.reflow(containerBox);\n containerBox = container.box;\n var box = containerBox.clone();\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n container.reflow(containerBox);\n }\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n this.box = box;\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 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 container.reflow(new Box(offsetX, offsetY, offsetX + containerBox.width(), offsetY + containerBox.height()));\n },\n renderVisual: function () {\n if (this.hasItems()) {\n ChartElement.fn.renderVisual.call(this);\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 if (!title || title.visible === false) {\n return;\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 this.title = new TextBox(text, titleOptions);\n this.createTitleLayout();\n this.appendTitleLayoutContent();\n },\n createTitleLayout: function () {\n this.layout = new dataviz.FloatElement({\n vertical: true,\n wrap: false\n });\n this.container.append(this.layout);\n },\n hasTitle: function () {\n return Boolean(this.options.title && this.options.title.visible !== false);\n },\n appendTitleLayoutContent: function () {\n var options = this.options;\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 setDefaultOptions(Legend, {\n position: RIGHT,\n items: [],\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: POINTER,\n spacing: 6\n },\n spacing: 6,\n background: '',\n zIndex: 1,\n markers: {\n border: { width: 0 },\n width: 15,\n height: 3,\n type: 'rect',\n align: LEFT,\n vAlign: CENTER\n }\n });\n var PlotAreaFactory = Class.extend({\n init: function () {\n this._registry = [];\n },\n register: function (type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n },\n create: function (srcSeries, options, chartService) {\n var registry = this._registry;\n var match = registry[0];\n var series;\n for (var idx = 0; idx < registry.length; idx++) {\n var entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n if (series.length > 0) {\n match = entry;\n break;\n }\n }\n return new match.type(series, options, chartService);\n }\n });\n PlotAreaFactory.current = new PlotAreaFactory();\n var ZOOM_ACCELERATION = 3;\n var SELECTOR_HEIGHT_ADJUST = 0.1;\n function createDiv(className) {\n var element = document.createElement('div');\n if (className) {\n element.className = className;\n }\n return element;\n }\n function closestHandle(element) {\n var current = element;\n while (current && !hasClasses(current, 'k-handle')) {\n current = current.parentNode;\n }\n return current;\n }\n var Selection = Class.extend({\n init: function (chart, categoryAxis, options, observer) {\n var chartElement = chart.element;\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 this.initOptions();\n this.visible = this.options.visible && chartElement.offsetHeight;\n if (this.visible) {\n this.createElements();\n this.set(this._index(this.options.from), this._index(this.options.to));\n this.bindEvents();\n }\n },\n onPane: function (pane) {\n return this.categoryAxis.pane === pane;\n },\n createElements: function () {\n var options = this.options;\n var wrapper = this.wrapper = createDiv('k-selector');\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 var selection = this.selection = createDiv('k-selection');\n this.leftMask = createDiv('k-mask');\n this.rightMask = createDiv('k-mask');\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n selection.appendChild(createDiv('k-selection-bg'));\n var leftHandle = this.leftHandle = createDiv('k-handle k-left-handle');\n var rightHandle = this.rightHandle = createDiv('k-handle k-right-handle');\n leftHandle.appendChild(createDiv());\n rightHandle.appendChild(createDiv());\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n this.chartElement.appendChild(wrapper);\n var selectionStyles = elementStyles(selection, [\n 'borderLeftWidth',\n 'borderRightWidth',\n 'height'\n ]);\n var leftHandleHeight = elementStyles(leftHandle, 'height').height;\n var rightHandleHeight = elementStyles(rightHandle, 'height').height;\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n elementStyles(leftHandle, { top: (selectionStyles.height - leftHandleHeight) / 2 });\n elementStyles(rightHandle, { top: (selectionStyles.height - rightHandleHeight) / 2 });\n wrapper.style.cssText = wrapper.style.cssText;\n },\n bindEvents: function () {\n if (this.options.mousewheel !== false) {\n this._mousewheelHandler = this._mousewheel.bind(this);\n var obj;\n bindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n }\n this._domEvents = services.DomEventsBuilder.create(this.wrapper, {\n stopPropagation: true,\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 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 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 var ref$1 = elementStyles(this.chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref$1.paddingLeft;\n var paddingTop = ref$1.paddingTop;\n this.options = deepExtend({}, {\n width: box.width(),\n height: box.height() + SELECTOR_HEIGHT_ADJUST,\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 destroy: function () {\n if (this._domEvents) {\n this._domEvents.destroy();\n delete this._domEvents;\n }\n clearTimeout(this._mwTimeout);\n this._state = null;\n if (this.wrapper) {\n if (this._mousewheelHandler) {\n var obj;\n unbindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this._mousewheelHandler = null;\n }\n this.chartElement.removeChild(this.wrapper);\n this.wrapper = null;\n }\n },\n _rangeEventArgs: function (range) {\n return {\n axis: this.categoryAxis.options,\n from: this._value(range.from),\n to: this._value(range.to)\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 this.chart._unsetActivePoint();\n this._state = {\n moveTarget: closestHandle(target) || target,\n startLocation: e.x ? e.x.location : 0,\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n var args = this._rangeEventArgs({\n from: this._index(options.from),\n to: this._index(options.to)\n });\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\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 _move: function (e) {\n if (!this._state) {\n return;\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 = {\n from: range.from,\n to: range.to\n };\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 if (!target) {\n return;\n }\n var leftHandle = hasClasses(target, 'k-left-handle');\n var rightHandle = hasClasses(target, 'k-right-handle');\n if (hasClasses(target, 'k-selection k-selection-bg')) {\n range.from = Math.min(Math.max(min, from - offset), max - span);\n range.to = Math.min(range.from + span, max);\n } else if (leftHandle && !reverse || rightHandle && reverse) {\n range.from = Math.min(Math.max(min, from - offset), max - 1);\n range.to = Math.max(range.from + 1, range.to);\n } else if (leftHandle && reverse || rightHandle && !reverse) {\n range.to = Math.min(Math.max(min + 1, to - offset), max);\n range.from = Math.min(range.to - 1, range.from);\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 _end: function () {\n if (this._state) {\n var moveTarget = this._state.moveTarget;\n if (moveTarget) {\n dataviz.removeClass(moveTarget, 'k-handle-active');\n }\n var range = this._state.range;\n this.set(range.from, range.to);\n this.trigger(SELECT_END, this._rangeEventArgs(range));\n delete this._state;\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 if (this._state || rightClick) {\n return;\n }\n this.chart._unsetActivePoint();\n if (!categoryAxis.options.justified) {\n offset--;\n }\n range.from = Math.min(Math.max(min, from - offset), max - span);\n range.to = Math.min(range.from + span, max);\n this._start(e);\n if (this._state) {\n this._state.range = range;\n this.trigger(SELECT, this._rangeEventArgs(range));\n this._end();\n }\n },\n _mousewheel: function (e) {\n var this$1 = this;\n var delta = dataviz.mousewheelDelta(e);\n this._start({ target: this.selection });\n if (this._state) {\n var range = this._state.range;\n e.preventDefault();\n e.stopPropagation();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (this.options.mousewheel.reverse) {\n delta *= -1;\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 if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n this._mwTimeout = setTimeout(function () {\n this$1._end();\n }, MOUSEWHEEL_DELAY);\n }\n },\n _gesturestart: function (e) {\n var options = this.options;\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 if (this.trigger(SELECT_START, args)) {\n this._state = null;\n } else {\n e.preventDefault();\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 _gesturechange: function (e) {\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 e.preventDefault();\n range.from = categoryAxis.pointCategoryIndex(new Point(left)) || options.min;\n range.to = categoryAxis.pointCategoryIndex(new Point(right)) || options.max;\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n },\n _index: function (value) {\n var index = value;\n if (value instanceof Date) {\n index = this.categoryAxis.categoryIndex(value);\n }\n return index;\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 return value;\n },\n _slot: function (value) {\n var categoryAxis = this.categoryAxis;\n var index = this._index(value);\n return categoryAxis.getSlot(index, index, true);\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 var box = this._slot(left);\n var leftMaskWidth = round(box[edge] - offset.left + padding.left);\n elementStyles(this.leftMask, { width: leftMaskWidth });\n elementStyles(this.selection, { left: leftMaskWidth });\n box = this._slot(right);\n var rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n elementStyles(this.rightMask, { width: rightMaskWidth });\n var distance = options.width - rightMaskWidth;\n if (distance !== options.width) {\n distance += border.right;\n }\n elementStyles(this.rightMask, { left: distance });\n elementStyles(this.selection, { width: Math.max(options.width - (leftMaskWidth + rightMaskWidth) - border.right, 0) });\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 if (options.visible) {\n this.move(fromValue, toValue);\n }\n options.from = this._value(fromValue);\n options.to = this._value(toValue);\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 = {\n from: from,\n to: to\n };\n var oldRange = deepExtend({}, range);\n if (this._state) {\n range = this._state.range;\n }\n if (zDir !== RIGHT) {\n range.from = limitValue(limitValue(from - delta, 0, to - 1), min, max);\n }\n if (zDir !== LEFT) {\n range.to = limitValue(limitValue(to + delta, range.from + 1, max), min, max);\n }\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\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 = {\n from: from,\n to: to\n };\n var oldRange = deepExtend({}, range);\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 if (this._state) {\n range = this._state.range;\n }\n range.from = limitValue(limitValue(from - minDelta, 0, to - 1), min, max);\n range.to = limitValue(limitValue(to + maxDelta, range.from + 1, max), min, max);\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n },\n trigger: function (name, args) {\n return (this.observer || this.chart).trigger(name, args);\n }\n });\n setDefaultOptions(Selection, {\n visible: true,\n mousewheel: { zoom: 'both' },\n min: MIN_VALUE,\n max: MAX_VALUE\n });\n var Tooltip = BaseTooltip.extend({\n show: function (point) {\n if (!point || !point.tooltipAnchor || this._current && this._current === point) {\n return;\n }\n var options = deepExtend({}, this.options, point.options.tooltip);\n var anchor = point.tooltipAnchor();\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 hide: function () {\n delete this._current;\n BaseTooltip.fn.hide.call(this);\n }\n });\n var SharedTooltip = BaseTooltip.extend({\n init: function (plotArea, options) {\n BaseTooltip.fn.init.call(this, plotArea.chartService, options);\n this.plotArea = plotArea;\n this.formatService = plotArea.chartService.format;\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 return !excluded;\n });\n if (tooltipPoints.length > 0) {\n var point = tooltipPoints[0];\n var slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n var anchor = coords ? this._slotAnchor(coords, slot) : this._defaultAnchor(point, slot);\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 _slotAnchor: function (point, slot) {\n var axis = this.plotArea.categoryAxis;\n var align = {\n horizontal: 'left',\n vertical: 'center'\n };\n if (!axis.options.vertical) {\n point.x = slot.center().x;\n }\n return {\n point: point,\n align: align\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 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 return {\n point: centerPoint,\n align: align\n };\n }\n });\n setDefaultOptions(SharedTooltip, { categoryFormat: '{0:d}' });\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 if (bbox) {\n this.origin = options.origin;\n var axis = options.vertical ? Y : X;\n var fromScale = this.fromScale = new GeometryPoint(1, 1);\n fromScale[axis] = START_SCALE;\n element.transform(transform().scale(fromScale.x, fromScale.y));\n } else {\n this.abort();\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 this.element.transform(transform().scale(scaleX, scaleY, this.origin));\n },\n abort: function () {\n Animation.fn.abort.call(this);\n this.element.transform(null);\n }\n });\n setDefaultOptions(BarChartAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register(BAR, BarChartAnimation);\n var BubbleAnimation = Animation.extend({\n setup: function () {\n var center = this.center = this.element.bbox().center();\n this.element.transform(transform().scale(START_SCALE, START_SCALE, center));\n },\n step: function (pos) {\n this.element.transform(transform().scale(pos, pos, this.center));\n }\n });\n setDefaultOptions(BubbleAnimation, { easing: 'easeOutElastic' });\n AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n var FadeInAnimation = Animation.extend({\n setup: function () {\n this.fadeTo = this.element.opacity();\n this.element.opacity(0);\n },\n step: function (pos) {\n this.element.opacity(pos * this.fadeTo);\n }\n });\n setDefaultOptions(FadeInAnimation, {\n duration: 200,\n easing: 'linear'\n });\n AnimationFactory.current.register(FADEIN, FadeInAnimation);\n var PieAnimation = Animation.extend({\n setup: function () {\n this.element.transform(transform().scale(START_SCALE, START_SCALE, this.options.center));\n },\n step: function (pos) {\n this.element.transform(transform().scale(pos, pos, this.options.center));\n }\n });\n setDefaultOptions(PieAnimation, {\n easing: 'easeOutElastic',\n duration: INITIAL_ANIMATION_DURATION\n });\n AnimationFactory.current.register(PIE, PieAnimation);\n var ScatterLineChart = ScatterChart.extend({\n render: function () {\n ScatterChart.fn.render.call(this);\n this.renderSegments();\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n animationPoints: function () {\n var points = ScatterChart.fn.animationPoints.call(this);\n return points.concat(this._segments);\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 deepExtend(ScatterLineChart.prototype, LineChartMixin);\n var XYPlotArea = PlotAreaBase.extend({\n initFields: function () {\n this.namedXAxes = {};\n this.namedYAxes = {};\n this.xAxisRangeTracker = new AxisGroupRangeTracker();\n this.yAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n panes = this.panes;\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.addToLegend(paneSeries);\n var filteredSeries = this$1.filterVisibleSeries(paneSeries);\n if (!filteredSeries) {\n continue;\n }\n this$1.createScatterChart(filterSeriesByType(filteredSeries, SCATTER), pane);\n this$1.createScatterLineChart(filterSeriesByType(filteredSeries, SCATTER_LINE), pane);\n this$1.createBubbleChart(filterSeriesByType(filteredSeries, BUBBLE), pane);\n }\n this.createAxes(panes);\n },\n appendChart: function (chart, pane) {\n this.xAxisRangeTracker.update(chart.xAxisRanges);\n this.yAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\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 if (axis === this.axisX) {\n delete this.axisX;\n }\n if (axis === this.axisY) {\n delete this.axisY;\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) {\n return a.name === xAxisName;\n })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function (a) {\n return a.name === yAxisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = panes[0].name || 'default';\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n return paneName;\n },\n createScatterChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new ScatterChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createScatterLineChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new ScatterLineChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createBubbleChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new BubbleChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\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 ? {\n min: 0.1,\n max: 1\n } : {\n min: 0,\n max: 1\n };\n var range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n var typeSamples = [\n axisOptions.min,\n axisOptions.max\n ];\n var series = this.series;\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 break;\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 var inferredDate;\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\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 var axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\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 this.appendAxis(axis);\n return axis;\n },\n createAxes: function (panes) {\n var this$1 = this;\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\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 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 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 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 updateAxisOptions$1(this.options, index, vertical, options);\n updateAxisOptions$1(this.originalOptions, index, vertical, options);\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 setDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n var PieSegment = ChartElement.extend({\n init: function (value, sector, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.sector = sector;\n },\n render: function () {\n var labels = this.options.labels;\n var chartService = this.owner.chartService;\n var labelText = this.value;\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n var labelTemplate = getTemplate(labels);\n var pointData = this.pointData();\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = chartService.format.auto(labels.format, labelText);\n }\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n labels.color = dataviz.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 this.label = new TextBox(labelText, deepExtend({}, labels, {\n align: CENTER,\n vAlign: '',\n animation: {\n type: FADEIN,\n delay: this.animationDelay\n }\n }), pointData);\n this.append(this.label);\n }\n },\n reflow: function (targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\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 if (label) {\n var labelHeight = label.box.height();\n var labelWidth = label.box.width();\n var lp;\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 createVisual: function () {\n var this$1 = this;\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n ChartElement.fn.createVisual.call(this);\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.createSegmentVisual(group);\n return group;\n }\n });\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\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: { opacity: options.opacity },\n zIndex: options.zIndex\n }, border));\n group.append(visual);\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [\n sector.center.x,\n sector.center.y\n ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\n },\n createSegment: function (sector, options) {\n if (options.singleSegment) {\n return new drawing.Circle(new geometry.Circle(new GeometryPoint(sector.center.x, sector.center.y), sector.radius), options);\n }\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n },\n createAnimation: function () {\n var ref = this;\n var options = ref.options;\n var center = ref.sector.center;\n deepExtend(options, {\n animation: {\n center: [\n center.x,\n center.y\n ],\n delay: this.animationDelay\n }\n });\n ChartElement.fn.createAnimation.call(this);\n },\n createHighlight: function (options) {\n var highlight = this.options.highlight || {};\n var border = highlight.border || {};\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 highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var sector = this.sector;\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 tooltipAnchor: function () {\n var sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\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 var RAD_30 = round(dataviz.rad(30), DEFAULT_PRECISION);\n var RAD_60 = round(dataviz.rad(60), DEFAULT_PRECISION);\n function tooltipAlignment(angle) {\n var radians = dataviz.rad(angle);\n var sine = round(Math.sin(radians), DEFAULT_PRECISION);\n var cosine = round(Math.cos(radians), DEFAULT_PRECISION);\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 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 return {\n horizontal: horizontal,\n vertical: vertical\n };\n }\n setDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: { gradient: 'roundedBevel' },\n border: { width: 0.5 },\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: { type: PIE },\n highlight: {\n visible: true,\n border: { width: 1 }\n },\n visible: true\n });\n deepExtend(PieSegment.prototype, PointEventsMixin);\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 if (options && options.visibleInLegend !== false) {\n var pointVisible = options.visible !== false;\n var labelTemplate = pointVisible ? getTemplate(labelsOptions) : getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n var text = options.category;\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 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 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 var PIE_SECTOR_ANIM_DELAY = 70;\n var PieChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var colorsCount = seriesColors.length;\n var series = options.series;\n var seriesCount = series.length;\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 if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\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 if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n callback(pointData.valueFields.value, new dataviz.Ring(null, 0, 0, currentAngle, angle), {\n owner: this$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.animationDelay(i, seriesIx, seriesCount)\n });\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'visual',\n 'toggle'\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 this.createLegendItem(value, segmentOptions, fields);\n if (fields.visible === false) {\n return;\n }\n var segment = new PieSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var points = ref.points;\n var seriesConfigs = ref.seriesConfigs;\n if (seriesConfigs === void 0) {\n seriesConfigs = [];\n }\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 this.targetBox = targetBox;\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n var radius = halfMinWidth - padding;\n var center = new Point(radius + newBox.x1 + padding, radius + newBox.y1 + padding);\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 if (seriesConfigs.length) {\n var seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n segment.reflow(newBox);\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 if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n this.box = newBox;\n },\n leftLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n rightLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\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 distances.push(distance);\n for (var i = 0; i < count; i++) {\n var secondBox = labels[i + 1].box;\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 return distances;\n },\n distributeLabels: function (distances, labels) {\n var this$1 = this;\n var count = distances.length;\n var left, right, remaining;\n for (var i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this$1._takeDistance(distances, i, --left, remaining);\n remaining = this$1._takeDistance(distances, i, ++right, remaining);\n }\n }\n this.reflowLabels(distances, labels);\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 return result;\n },\n reflowLabels: function (distances, labels) {\n var this$1 = this;\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 distances[0] += 2;\n for (var i = 0; i < labelsCount; i++) {\n var label = labels[i];\n var box = label.box;\n boxY += distances[i];\n boxX = this$1.hAlignLabel(box.x2, sector.clone().expand(labelDistance), boxY, boxY + box.height(), label.orientation === RIGHT);\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 boxY += box.height();\n }\n },\n createVisual: function () {\n var this$1 = this;\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 ChartElement.fn.createVisual.call(this);\n this._connectorLines = [];\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 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 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 start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\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 if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || 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 if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || 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 connectorLine.lineTo(end.x, end.y);\n this$1._connectorLines.push(connectorLine);\n this$1.visual.append(connectorLine);\n }\n }\n }\n },\n renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n if (dataviz.find(this.options.series, function (options) {\n return options.autoFit;\n })) {\n var targetBox = this.targetBox;\n var pieCenter = this.box.center();\n var bbox = this.visual.bbox();\n if (!bbox) {\n return;\n }\n var bboxBottom = bbox.bottomRight();\n var scale = Math.min((pieCenter.y - targetBox.y1) / (pieCenter.y - bbox.origin.y), (targetBox.y2 - pieCenter.y) / (bboxBottom.y - pieCenter.y), (pieCenter.x - targetBox.x1) / (pieCenter.x - bbox.origin.x), (targetBox.x2 - pieCenter.x) / (bboxBottom.x - pieCenter.x));\n if (scale < 1) {\n this.visual.transform(transform().scale(scale, scale, [\n pieCenter.x,\n pieCenter.y\n ]));\n }\n }\n },\n labelComparator: function (reverse) {\n var reverseValue = reverse ? -1 : 1;\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 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 if (t > radius) {\n return originalX;\n }\n return cx + Math.sqrt(radius * radius - t * t) * (direction ? 1 : -1);\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 formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n animationDelay: function (categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n },\n stackRoot: function () {\n return this;\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 var result;\n if (ub !== 0) {\n var ua = uat / ub;\n result = new Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y));\n }\n return result;\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 deepExtend(PieChart.prototype, PieChartMixin);\n PieChart.prototype.isStackRoot = true;\n var PiePlotArea = PlotAreaBase.extend({\n render: function () {\n this.createPieChart(this.series);\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 this.appendChart(pieChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\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 if (label) {\n var labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n var lp = sector.point(angle);\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 createSegment: function (sector, options) {\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n }\n });\n setDefaultOptions(DonutSegment, {\n overlay: { gradient: 'roundedGlass' },\n labels: { position: CENTER },\n animation: { type: PIE }\n });\n deepExtend(DonutSegment.prototype, PointEventsMixin);\n var DONUT_SECTOR_ANIM_DELAY = 50;\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 this.createLegendItem(value, segmentOptions, fields);\n if (!value || fields.visible === false) {\n return;\n }\n var segment = new DonutSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var this$1 = this;\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 var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n var totalSize = halfMinWidth - padding;\n var seriesWithoutSize = 0;\n var holeSize;\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 if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n if (!defined(holeSize)) {\n var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n var innerRadius = holeSize;\n var margin = 0;\n var size, radius;\n this.seriesConfigs = [];\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.seriesConfigs.push({\n innerRadius: innerRadius,\n radius: radius\n });\n margin = currentSeries$1.margin || 0;\n innerRadius = radius;\n }\n PieChart.fn.reflow.call(this, targetBox);\n },\n animationDelay: function (categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY + INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1);\n }\n });\n setDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n }\n });\n var DonutPlotArea = PiePlotArea.extend({\n render: function () {\n this.createDonutChart(this.series);\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 this.appendChart(donutChart);\n }\n });\n var DEFAULT_PADDING = 0.15;\n var PolarPlotAreaBase = PlotAreaBase.extend({\n initFields: function () {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function () {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\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(center.x - slot.x1, center.y - slot.y1);\n axis.reflow(axisBox);\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 if (axisOptions.type === LOGARITHMIC) {\n axisType = dataviz.RadarLogarithmicAxis;\n axisDefaultRange = {\n min: 0.1,\n max: 1\n };\n } else {\n axisType = dataviz.RadarNumericAxis;\n axisDefaultRange = {\n min: 0,\n max: 1\n };\n }\n var range = tracker.query(name) || defaultRange || axisDefaultRange;\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var valueAxis = new axisType(range.min, range.max, axisOptions, this.chartService);\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\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 axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\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 this.axisBox = axisBox;\n this.alignAxes(axisBox);\n },\n backgroundBox: function () {\n return this.box;\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 return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n });\n setDefaultOptions(PolarScatterChart, { clip: false });\n var PolarLineChart = ScatterLineChart.extend({});\n PolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n setDefaultOptions(PolarLineChart, { clip: false });\n var SplinePolarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function (fillPath) {\n var center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n },\n _polarAxisCenter: function () {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n return center;\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n var center = this._polarAxisCenter();\n var curveProcessor = new CurveProcessor(false);\n var linePoints = this.points();\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n return segments;\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([\n center.x,\n center.y\n ]);\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\n }\n });\n var PolarAreaChart = PolarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segment;\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 createMissingValue: function (value, missingValues) {\n var missingValue;\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 return missingValue;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n },\n _hasMissingValuesGap: function () {\n var this$1 = this;\n var series = this.options.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (this$1.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n },\n sortPoints: function (points) {\n var this$1 = this;\n points.sort(xComparer);\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.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n return points;\n }\n });\n function xComparer(a, b) {\n return a.value.x - b.value.x;\n }\n var PolarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var polarAxis = new dataviz.PolarAxis(this.options.xAxis, this.chartService);\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n },\n valueAxisOptions: function (defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n },\n createValueAxis: function () {\n PolarPlotAreaBase.fn.createValueAxis.call(this);\n this.axisY = this.valueAxis;\n },\n appendChart: function (chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createLineChart(filterSeriesByType(series, [POLAR_LINE]), pane);\n this.createScatterChart(filterSeriesByType(series, [POLAR_SCATTER]), pane);\n this.createAreaChart(filterSeriesByType(series, [POLAR_AREA]), pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new PolarLineChart(this, { series: series });\n this.appendChart(lineChart, pane);\n },\n createScatterChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var scatterChart = new PolarScatterChart(this, { series: series });\n this.appendChart(scatterChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new PolarAreaChart(this, { series: series });\n this.appendChart(areaChart, pane);\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 if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n setDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin);\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 return seriesSegments;\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 return new Box(slot.x, slot.y, slot.x, slot.y);\n },\n renderSegments: function () {\n LineChart.fn.renderSegments.call(this);\n if (this._segments && this._segments.length > 1) {\n var seriesSegments = groupBySeriesIx(this._segments);\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 createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n var segment = new pointType(linePoints, currentSeries, seriesIx);\n var missingValues = this.seriesMissingValues(currentSeries);\n if (linePoints.length === currentSeries.data.length || missingValues === INTERPOLATE) {\n segment.options.closed = true;\n }\n return segment;\n }\n });\n setDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\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 if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\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 return segment;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var RadarSegment = DonutSegment.extend({\n init: function (value, options) {\n DonutSegment.fn.init.call(this, value, null, options);\n }\n });\n setDefaultOptions(RadarSegment, {\n overlay: { gradient: 'none' },\n labels: { distance: 10 }\n });\n var RadarClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\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 this.forEach(children, function (child) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n child.reflow(slotSector);\n child.sector = slotSector;\n angle += slotAngle + slotAngle * spacing;\n });\n }\n });\n setDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\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 this.box = new Box();\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 var RadarBarChart = BarChart.extend({\n pointType: function () {\n return RadarSegment;\n },\n clusterType: function () {\n return RadarClusterLayout;\n },\n stackType: function () {\n return RadarStackLayout;\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n pointSlot: function (categorySlot, valueSlot) {\n var slot = categorySlot.clone();\n var y = categorySlot.center.y;\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n return slot;\n },\n reflowPoint: function (point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n },\n createAnimation: function () {\n this.options.animation.center = this.box.toRect().center();\n BarChart.fn.createAnimation.call(this);\n }\n });\n RadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n setDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: { type: 'pie' }\n });\n var RadarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var categoryAxis = new dataviz.RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createCategoryAxesLabels();\n },\n valueAxisOptions: function (defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: 'P0' }\n });\n }\n return deepExtend(defaults, this.options.valueAxis);\n },\n aggregateCategories: function () {\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n },\n createCategoryAxesLabels: function () {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n },\n filterSeries: function (currentSeries) {\n return currentSeries;\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createAreaChart(filterSeriesByType(series, [RADAR_AREA]), pane);\n this.createLineChart(filterSeriesByType(series, [RADAR_LINE]), pane);\n this.createBarChart(filterSeriesByType(series, [RADAR_COLUMN]), pane);\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 if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n return options;\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n var barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n this._hasBarCharts = true;\n },\n seriesCategoryAxis: function () {\n return this.categoryAxis;\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 if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n deepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries,\n seriesSourcePoints: CategoricalPlotArea.prototype.seriesSourcePoints\n });\n setDefaultOptions(RadarPlotArea, {\n categoryAxis: { categories: [] },\n valueAxis: {}\n });\n var FunnelSegment = ChartElement.extend({\n init: function (value, options, segmentOptions) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.options.index = segmentOptions.index;\n },\n reflow: function (chartBox) {\n var points = this.points;\n var label = this.children[0];\n this.box = new Box(points[0].x, points[0].y, points[1].x, points[2].y);\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual;\n ChartElement.fn.createVisual.call(this);\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 () {\n return this$1.createPath();\n }\n });\n } else {\n visual = this.createPath();\n }\n if (visual) {\n this.visual.append(visual);\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 return path;\n },\n createHighlight: function (style) {\n return Path.fromPoints(this.points, style);\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var path = Path.fromPoints(this.points).close();\n return {\n options: this.options,\n path: path\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 formatValue: function (format) {\n var point = this;\n return point.owner.formatPointValue(point, format);\n }\n });\n setDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: { width: 1 }\n });\n deepExtend(FunnelSegment.prototype, PointEventsMixin);\n var FunnelChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n render: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var series = options.series[0];\n var data = series.data;\n if (!data) {\n return;\n }\n var ref$1 = bindSegments(series);\n var total = ref$1.total;\n var points = ref$1.points;\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n fields = deepExtend({\n index: i,\n owner: this$1,\n series: series,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n var value = pointData.valueFields.value;\n var segment = this$1.createSegment(value, fields);\n var label = this$1.createLabel(value, fields);\n if (segment && label) {\n segment.append(label);\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'toggle',\n 'visual'\n ]\n });\n },\n createSegment: function (value, fields) {\n var seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n this.createLegendItem(value, seriesOptions, fields);\n if (fields.visible !== false) {\n var segment = new FunnelSegment(value, seriesOptions, fields);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n return segment;\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 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.plotArea.chartService.format.auto(labels.format, text);\n }\n if (!labels.color) {\n labels.color = dataviz.autoTextColor(series.color);\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n this.evalSegmentOptions(labels, value, fields);\n var textBox = new TextBox(text, deepExtend({ vAlign: labels.position }, labels), data);\n this.labels.push(textBox);\n return textBox;\n }\n },\n labelPadding: function () {\n var labels = this.labels;\n var padding = {\n left: 0,\n 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 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 return padding;\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 for (var idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n var lastUpperSide = firstSegment.percentage / maxSegment.percentage * width;\n var previousOffset = (width - lastUpperSide) / 2;\n var previousHeight = 0;\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 if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n offset = limitValue(offset, 0, width);\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 previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\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 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 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 reflow: function (chartBox) {\n var points = this.points;\n var count = points.length;\n if (!count) {\n return;\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 if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n for (var idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\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 deepExtend(FunnelChart.prototype, PieChartMixin);\n var FunnelPlotArea = PlotAreaBase.extend({\n render: function () {\n this.createFunnelChart(this.series);\n },\n createFunnelChart: function (series) {\n var firstSeries = series[0];\n var funnelChart = new FunnelChart(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 this.appendChart(funnelChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var colorScale = function (color, minLightnessOffset) {\n if (minLightnessOffset === void 0) {\n minLightnessOffset = 0.05;\n }\n var baseColor = kendo.parseColor(color);\n var offset = 1 - minLightnessOffset;\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 return hsl.toCss();\n };\n };\n var HeatmapPoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.options = options;\n this.color = options.color || WHITE;\n this.value = value;\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n this.createMarker();\n this.createLabel();\n this.createNote();\n },\n createLabel: function () {\n var options = this.options;\n var labels = options.labels;\n if (labels.visible) {\n var pointData = this.pointData();\n var labelTemplate = getTemplate(labels);\n var labelText;\n var labelColor = labels.color;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n if (!labelColor) {\n labelColor = dataviz.autoTextColor(this.color);\n }\n this.label = new TextBox(labelText, deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n }, labels, { color: labelColor }), pointData);\n this.append(this.label);\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n reflow: function (targetBox) {\n this.render();\n var label = this.label;\n this.box = targetBox;\n if (label) {\n label.reflow(this.markerBox());\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n this.marker.reflow(this.markerBox());\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 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 rect.size.width -= borderWidth;\n rect.size.height -= borderWidth;\n rect.origin.y += halfBorderWidth + 0.5;\n rect.origin.x += halfBorderWidth + 0.5;\n return dataviz.rectToBox(rect);\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 return {\n color: border.color || this.color,\n width: border.width,\n opacity: opacity,\n dashType: border.dashType\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 this.marker = marker;\n this.append(marker);\n },\n createHighlight: function (style) {\n var options = this.options;\n var markerOptions = this.options.highlight.markers || this.options.markers;\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 highlight.reflow(this.markerBox());\n var visual = highlight.getElement();\n visual.options.fill = style.fill;\n visual.options.stroke = style.stroke;\n return visual;\n },\n highlightVisual: function () {\n return this.rectVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n },\n tooltipAnchor: function () {\n var left = this.box.center().x;\n var top = this.box.y1 - TOOLTIP_OFFSET;\n return {\n point: new Point(left, top),\n align: {\n horizontal: CENTER,\n vertical: BOTTOM\n }\n };\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n },\n unclipElements: function () {\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 deepExtend(HeatmapPoint.prototype, PointEventsMixin);\n deepExtend(HeatmapPoint.prototype, NoteMixin);\n HeatmapPoint.prototype.defaults = {\n markers: {\n type: 'rect',\n borderRadius: 4,\n border: { color: 'transparent' }\n },\n padding: { top: 1 },\n labels: {\n visible: false,\n padding: 3\n },\n opacity: 1,\n notes: { label: {} }\n };\n var HeatmapChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n this.render();\n },\n _initFields: function () {\n this.points = [];\n this.seriesOptions = [];\n this.valueRange = {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n this._evalSeries = [];\n },\n render: function () {\n this.setRange();\n this.traverseDataPoints(this.addValue.bind(this));\n },\n setRange: function () {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1._bindPoint(currentSeries, seriesIx, pointIx);\n var valueFields = ref$1.valueFields;\n this$1.valueRange.min = Math.min(this$1.valueRange.min, valueFields.value);\n this$1.valueRange.max = Math.max(this$1.valueRange.max, valueFields.value);\n }\n }\n },\n addValue: function (value, fields) {\n var point;\n if (value) {\n point = this.createPoint(value, fields);\n if (point) {\n $.extend(point, fields);\n }\n }\n this.points.push(point);\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',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\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 return pointOptions;\n },\n pointType: function () {\n return HeatmapPoint;\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: { opacity: series.opacity },\n tooltip: { format: this.options.tooltip.format },\n labels: { format: this.options.labels.format }\n }, series);\n }\n return options;\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 pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n } else {\n var scale = colorScale(color);\n color = scale(value.value / this.valueRange.max);\n }\n var point = new HeatmapPoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\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 if (!xAxis) {\n throw new Error('Unable to locate X axis with name ' + xAxisName);\n }\n if (!yAxis) {\n throw new Error('Unable to locate Y axis with name ' + yAxisName);\n }\n return {\n xAxis: xAxis,\n yAxis: yAxis\n };\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var ref = this$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 if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.box = targetBox;\n },\n pointSlot: function (slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var ref$1 = this$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 for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$2 = this$1._bindPoint(currentSeries, seriesIx, 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 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\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, value.value);\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: { format: '{0}, {1}: {2}' },\n labels: { format: '{2}' },\n clip: true\n });\n deepExtend(HeatmapChart.prototype, { _bindPoint: CategoricalChart.prototype._bindPoint });\n var HeatmapPlotArea = PlotAreaBase.extend({\n initFields: function () {\n this.namedXAxes = {};\n this.namedYAxes = {};\n },\n render: function (panes) {\n if (panes === void 0) {\n panes = this.panes;\n }\n this.bindCategories();\n this.createAxes(panes);\n this.createCharts(panes);\n this.createAxisLabels();\n },\n bindCategories: function () {\n var this$1 = this;\n var series = this.srcSeries || this.series;\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var data = currentSeries.data || [];\n var ref = this$1.seriesAxes(currentSeries);\n var xAxis = ref.xAxis;\n var yAxis = ref.yAxis;\n var xCategories = dataviz.createHashSet(xAxis.categories || []);\n var yCategories = dataviz.createHashSet(yAxis.categories || []);\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 if (!xCategories.has(x)) {\n xCategories.add(x);\n }\n if (!yCategories.has(y)) {\n yCategories.add(y);\n }\n }\n xAxis.categories = xCategories.values();\n yAxis.categories = yCategories.values();\n }\n },\n createCharts: function (panes) {\n var this$1 = this;\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.addToLegend(paneSeries);\n var filteredSeries = this$1.filterVisibleSeries(paneSeries);\n if (!filteredSeries) {\n continue;\n }\n this$1.createHeatmapChart(filterSeriesByType(filteredSeries, [HEATMAP]), pane);\n }\n },\n createHeatmapChart: function (series, pane) {\n var chart = new HeatmapChart(this, { series: series });\n this.appendChart(chart, pane);\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) {\n return a.name === xAxisName;\n })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function (a) {\n return a.name === yAxisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = panes[0].name || 'default';\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n return paneName;\n },\n seriesAxes: function (series) {\n var xAxis;\n var yAxis;\n var options = this.options;\n var xAxisOptions = [].concat(options.xAxis);\n var xAxisName = series.xAxis;\n if (xAxisName) {\n xAxis = xAxisOptions.find(function (axis) {\n return axis.name === xAxisName;\n });\n } else {\n xAxis = xAxisOptions[0];\n }\n var yAxisOptions = [].concat(options.yAxis);\n var yAxisName = series.yAxis;\n if (yAxisName) {\n yAxis = yAxisOptions.find(function (axis) {\n return axis.name === yAxisName;\n });\n } else {\n yAxis = yAxisOptions[0];\n }\n if (!xAxis) {\n throw new Error('Unable to locate X axis with name ' + xAxisName);\n }\n if (!yAxis) {\n throw new Error('Unable to locate Y axis with name ' + yAxisName);\n }\n return {\n xAxis: xAxis,\n 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 createXYAxis: function (options, vertical, axisIndex) {\n var axisName = options.name;\n var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n var axisOptions = $.extend({ axisCrossingValue: 0 }, 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 = [\n axisOptions.min,\n axisOptions.max,\n firstCategory\n ];\n var series = this.series;\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 break;\n }\n }\n var inferredDate;\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\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 var axis = new axisType(axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\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 this.appendAxis(axis);\n axis.mapCategories();\n return axis;\n },\n createAxes: function (panes) {\n var this$1 = this;\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis.options.vertical) {\n delete this.namedYAxes[axisName];\n } else {\n delete this.namedXAxes[axisName];\n }\n if (axis === this.axisX) {\n delete this.axisX;\n }\n if (axis === this.axisY) {\n delete this.axisY;\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 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 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 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 updateAxisOptions$2(this.options, index, vertical, options);\n updateAxisOptions$2(this.originalOptions, index, vertical, options);\n },\n crosshairOptions: function (axis) {\n return $.extend({}, axis.options.crosshair, { zIndex: 0 });\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 setDefaultOptions(HeatmapPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(HeatmapPlotArea.prototype, PlotAreaEventsMixin);\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 PlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n CANDLESTICK,\n OHLC,\n BULLET,\n VERTICAL_BULLET,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ]);\n PlotAreaFactory.current.register(XYPlotArea, [\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ]);\n PlotAreaFactory.current.register(PiePlotArea, [PIE]);\n PlotAreaFactory.current.register(DonutPlotArea, [DONUT]);\n PlotAreaFactory.current.register(FunnelPlotArea, [FUNNEL]);\n PlotAreaFactory.current.register(PolarPlotArea, [\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ]);\n PlotAreaFactory.current.register(RadarPlotArea, [\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ]);\n PlotAreaFactory.current.register(HeatmapPlotArea, [HEATMAP]);\n SeriesBinder.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([\n RANGE_COLUMN,\n RANGE_BAR,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ], [\n FROM,\n TO\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n SUMMARY_FIELD\n ]);\n SeriesBinder.current.register([\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ], [\n X,\n Y\n ], [COLOR]);\n SeriesBinder.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], [VALUE], [COLOR]);\n SeriesBinder.current.register([FUNNEL], [VALUE], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n 'visible'\n ]);\n DefaultAggregates.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], {\n value: MAX,\n color: FIRST,\n noteText: FIRST,\n errorLow: MIN,\n errorHigh: MAX\n });\n DefaultAggregates.current.register([\n RANGE_COLUMN,\n RANGE_BAR,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ], {\n from: MIN,\n to: MAX,\n color: FIRST,\n noteText: FIRST\n });\n DefaultAggregates.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], {\n value: MAX,\n color: FIRST\n });\n SeriesBinder.current.register([\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ], [\n X,\n Y\n ], [\n COLOR,\n NOTE_TEXT,\n X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([BUBBLE], [\n X,\n Y,\n 'size'\n ], [\n COLOR,\n CATEGORY,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([HEATMAP], [\n X,\n Y,\n VALUE\n ], [\n COLOR,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n CANDLESTICK,\n OHLC\n ], [\n 'open',\n 'high',\n 'low',\n 'close'\n ], [\n CATEGORY,\n COLOR,\n 'downColor',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n CANDLESTICK,\n OHLC\n ], {\n open: MAX,\n high: MAX,\n low: MIN,\n close: MAX,\n color: FIRST,\n downColor: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], [\n 'lower',\n 'q1',\n 'median',\n 'q3',\n 'upper',\n 'mean',\n 'outliers'\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], {\n lower: MAX,\n q1: MAX,\n median: MAX,\n q3: MAX,\n upper: MAX,\n mean: MAX,\n outliers: FIRST,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BULLET,\n VERTICAL_BULLET\n ], [\n 'current',\n 'target'\n ], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BULLET,\n VERTICAL_BULLET\n ], {\n current: MAX,\n target: MAX,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n PIE,\n DONUT\n ], [VALUE], [\n CATEGORY,\n COLOR,\n 'explode',\n 'visibleInLegend',\n 'visible'\n ]);\n var AXIS_NAMES = [\n CATEGORY,\n VALUE,\n X,\n Y\n ];\n var MOUSEMOVE = 'mousemove';\n var CONTEXTMENU = 'contextmenu';\n var MOUSELEAVE = 'mouseleave';\n var MOUSEMOVE_DELAY = 20;\n var Chart = Class.extend({\n init: function (element, userOptions, themeOptions, context) {\n var this$1 = this;\n if (context === void 0) {\n context = {};\n }\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new services.ChartService(this, context);\n this.chartService.theme = themeOptions;\n this._initElement(element);\n var options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n this._initHandlers();\n this._initSurface();\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\n this$1.fontLoaded = true;\n if (!this$1._destroyed) {\n this$1.trigger('init');\n this$1._redraw();\n this$1._attachEvents();\n }\n });\n },\n _initElement: function (element) {\n this._setElementClass(element);\n element.style.position = 'relative';\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n this.element = element;\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart');\n },\n _initTheme: function (options, themeOptions) {\n var seriesCopies = [];\n var series = options.series || [];\n for (var i = 0; i < series.length; i++) {\n seriesCopies.push($.extend({}, series[i]));\n }\n options.series = seriesCopies;\n resolveAxisAliases(options);\n this.applyDefaults(options, themeOptions);\n if (options.seriesColors === null) {\n delete options.seriesColors;\n }\n this.options = deepExtend({}, themeOptions, options);\n this.applySeriesColors();\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 return {\n width: width,\n height: height\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 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) {\n return !s.visible;\n })) {\n this._destroySelections();\n this._setupSelection();\n }\n },\n _resize: function () {\n this._noTransitionsRedraw();\n },\n redraw: function (paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\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 getAxis: function (name) {\n return findAxisByName(name, this._plotArea.axes);\n },\n findAxisByName: function (name) {\n return this.getAxis(name);\n },\n findPaneByName: function (name) {\n var panes = this._plotArea.panes;\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 findPaneByIndex: function (idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(panes[idx]);\n }\n },\n plotArea: function () {\n return new ChartPlotArea(this._plotArea);\n },\n toggleHighlight: function (show, filter) {\n var plotArea = this._plotArea;\n var firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n var points;\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 if (firstSeries.type === DONUT) {\n points = pointByCategoryName(plotArea.pointsBySeriesName(seriesName), categoryName);\n } else if (firstSeries.type === PIE || firstSeries.type === FUNNEL) {\n points = pointByCategoryName((plotArea.charts[0] || {}).points, categoryName);\n } else {\n points = plotArea.pointsBySeriesName(seriesName);\n }\n }\n if (points) {\n this.togglePointsHighlight(show, points);\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 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 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 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 hideTooltip: function () {\n this._tooltip.hide();\n },\n _initSurface: function () {\n var surface = this.surface;\n var wrap = this._surfaceWrap();\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 if (!surface || surface.options.type !== this.options.renderAs) {\n this._destroySurface();\n this.surface = drawing.Surface.create(wrap, { type: this.options.renderAs });\n this.surface.bind('mouseenter', this._surfaceMouseenterHandler);\n this.surface.bind('mouseleave', this._surfaceMouseleaveHandler);\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n _surfaceWrap: function () {\n return this.element;\n },\n _redraw: function () {\n var model = this._getModel();\n this._size = {\n width: model.options.width,\n height: model.options.height\n };\n this._destroyView();\n this._model = model;\n this._plotArea = model._plotArea;\n model.renderVisual();\n if (this.options.transitions !== false) {\n model.traverse(function (element) {\n if (element.animation) {\n element.animation.setup();\n }\n });\n }\n this._initSurface();\n this.surface.draw(model.visual);\n if (this.options.transitions !== false) {\n model.traverse(function (element) {\n if (element.animation) {\n element.animation.play();\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 this.trigger(RENDER);\n triggerPaneRender(this._plotArea.panes);\n if (!this._navState) {\n this._cancelDomEvents();\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 clearMissingValues(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions, options);\n this._initTheme(this.options, this._theme);\n this.bindCategories();\n var model = this._getModel();\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n visual = model.visual;\n this.options = currentOptions;\n } else {\n visual = this.surface.exportVisual();\n }\n return visual;\n },\n _sharedTooltip: function () {\n return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip && this.options.tooltip.shared;\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 _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 _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 _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([\n DRAG_START,\n DRAG,\n DRAG_END\n ]);\n var allowZoom = (zoomable === false || mousewheel === false) && !this.requiresHandlers([\n ZOOM_START,\n ZOOM,\n ZOOM_END\n ]);\n var element = this.element;\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 this._dragZoomEnabled = true;\n }\n this._toggleDomEvents(!allowDrag, !allowZoom);\n },\n _toggleDomEvents: function (drag, zoom) {\n var domEvents = this.domEvents;\n if (!domEvents) {\n return;\n }\n if (domEvents.toggleDrag) {\n domEvents.toggleDrag(drag);\n }\n if (domEvents.toggleZoom) {\n domEvents.toggleZoom(zoom);\n }\n },\n _createTooltip: function () {\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var tooltip;\n if (this._sharedTooltip()) {\n tooltip = this._createSharedTooltip(tooltipOptions);\n } else {\n tooltip = new Tooltip(this.chartService, tooltipOptions);\n }\n return tooltip;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip(this._plotArea, options);\n },\n applyDefaults: function (options, themeOptions) {\n applyAxisDefaults(options, themeOptions);\n applySeriesDefaults(options, themeOptions);\n },\n applySeriesColors: function () {\n var options = this.options;\n var series = options.series;\n var colors = options.seriesColors || [];\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 currentSeries.color = currentSeries.color || seriesColor;\n if (defaults) {\n defaults.color = defaults.color || seriesColor;\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 dataviz.Title.buildTitle(options.title, model);\n if (options.legend && options.legend.visible) {\n model.append(new Legend(plotArea.options.legend, this.chartService));\n }\n model.append(plotArea);\n model.reflow();\n return model;\n },\n _modelOptions: function () {\n var options = this.options;\n var size = this.getSize();\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 _createPlotArea: function (skipSeries) {\n var options = this.options;\n var plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n return plotArea;\n },\n _setupSelection: function () {\n var this$1 = this;\n var ref = this;\n var axes = ref._plotArea.axes;\n var selections = this._selections = [];\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 var selection = new Selection(this$1, axis, deepExtend({\n min: range.min,\n max: range.max\n }, options.select));\n selections.push(selection);\n }\n }\n },\n _selectStart: function (e) {\n return this.trigger(SELECT_START, e);\n },\n _select: function (e) {\n return this.trigger(SELECT, e);\n },\n _selectEnd: function (e) {\n return this.trigger(SELECT_END, e);\n },\n _initHandlers: function () {\n this._clickHandler = this._click.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 this._mousemove = kendo.throttle(this._mousemove.bind(this), MOUSEMOVE_DELAY);\n },\n addObserver: function (observer) {\n if (observer) {\n this.observers.push(observer);\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 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 trigger: function (name, args) {\n if (args === void 0) {\n args = {};\n }\n if (name === SHOW_TOOLTIP) {\n args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n }\n args.sender = this;\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 return isDefaultPrevented;\n },\n _attachEvents: function () {\n var element = this.element;\n this._touchAction = element.style.touchAction;\n var obj;\n bindEvents(element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, obj[MOUSELEAVE] = this._mouseleaveHandler, obj));\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(element, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mousemove, obj$1));\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 this._toggleDragZoomEvents();\n },\n _mouseleave: function (e) {\n if (this._hoveredPoint) {\n this._hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n if (this._plotArea.hovered) {\n this.trigger(PLOT_AREA_LEAVE);\n this._plotArea.hovered = false;\n }\n },\n _cancelDomEvents: function () {\n if (this.domEvents && this.domEvents.cancel) {\n this.domEvents.cancel();\n }\n },\n _gesturestart: function (e) {\n if (this._mousewheelZoom && !this._stopChartHandlers(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this.surface.suspendTracking();\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 _gesturechange: function (e) {\n var mousewheelZoom = this._mousewheelZoom;\n if (mousewheelZoom && !this._stopChartHandlers(e)) {\n e.preventDefault();\n var previousGestureDistance = this._gestureDistance;\n var scaleDelta = -e.distance / previousGestureDistance + 1;\n if (Math.abs(scaleDelta) >= 0.1) {\n scaleDelta = Math.round(scaleDelta * 10);\n this._gestureDistance = e.distance;\n var args = {\n delta: scaleDelta,\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n var coords = this._eventCoordinates(e);\n if (!this._zooming) {\n this._zooming = true;\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 _mouseout: function (e) {\n if (e.element) {\n var element = this._drawingChartElement(e.element, e);\n if (element && element.leave) {\n element.leave(this, e.originalEvent);\n }\n }\n },\n _start: function (e) {\n var coords = this._eventCoordinates(e);\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n if (this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ])) {\n this._startNavigation(e, coords, DRAG_START);\n }\n if (this._pannable && this._pannable.start(e)) {\n this.surface.suspendTracking();\n this._unsetActivePoint();\n this._suppressHover = true;\n this.chartService.panning = true;\n }\n if (this._zoomSelection) {\n if (this._zoomSelection.start(e)) {\n this.trigger(ZOOM_START, {\n axisRanges: axisRanges(this._plotArea.axes),\n 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 if (this._stopChartHandlers(e)) {\n return;\n }\n if (pannable) {\n var ranges = pannable.move(e);\n if (ranges && !this.trigger(DRAG, {\n axisRanges: ranges,\n originalEvent: e\n })) {\n pannable.pan();\n }\n } else if (state) {\n var ranges$1 = {};\n var axes = state.axes;\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 if (delta !== 0) {\n ranges$1[currentAxis.options.name] = currentAxis.translateRange(delta);\n }\n }\n }\n state.axisRanges = ranges$1;\n this.trigger(DRAG, {\n axisRanges: ranges$1,\n originalEvent: e\n });\n }\n if (this._zoomSelection) {\n this._zoomSelection.move(e);\n }\n },\n _end: function (e) {\n if (this._stopChartHandlers(e)) {\n return;\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 if (this._zoomSelection) {\n var ranges = this._zoomSelection.end(e);\n if (ranges && !this.trigger(ZOOM, {\n axisRanges: ranges,\n originalEvent: e\n })) {\n this._zoomSelection.zoom();\n this.trigger(ZOOM_END, {\n axisRanges: ranges,\n originalEvent: e\n });\n }\n }\n },\n _stopChartHandlers: function (e) {\n var selections = this._selections || [];\n if (!selections.length) {\n return false;\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 _mousewheelZoomRate: function () {\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel || {};\n return valueOrDefault(mousewheel.rate, MOUSEWHEEL_ZOOM_RATE);\n },\n _mousewheel: function (e) {\n var this$1 = this;\n var delta = dataviz.mousewheelDelta(e);\n var mousewheelZoom = this._mousewheelZoom;\n var coords = this._eventCoordinates(e);\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n if (mousewheelZoom) {\n var args = {\n delta: delta,\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n e.preventDefault();\n if (!this._zooming) {\n this._unsetActivePoint();\n this.surface.suspendTracking();\n this._zooming = true;\n }\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n args.axisRanges = mousewheelZoom.updateRanges(delta, coords);\n if (args.axisRanges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n this._mwTimeout = setTimeout(function () {\n this$1.trigger(ZOOM_END, args);\n this$1._zooming = false;\n if (this$1.surface) {\n this$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 if (state) {\n var totalDelta = state.totalDelta || delta;\n state.totalDelta = totalDelta + delta;\n var axes = this._navState.axes;\n var ranges = {};\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._mousewheelZoomRate(), coords);\n }\n }\n this.trigger(ZOOM, {\n delta: delta,\n axisRanges: ranges,\n originalEvent: e\n });\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n this._mwTimeout = setTimeout(function () {\n this$1._endNavigation(e, ZOOM_END);\n }, MOUSEWHEEL_DELAY);\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 if (!pane) {\n return;\n }\n var ranges = axisRanges(axes);\n var prevented = this.trigger(chartEvent, {\n axisRanges: ranges,\n originalEvent: e\n });\n if (prevented) {\n this._cancelDomEvents();\n } else {\n this._suppressHover = true;\n this._unsetActivePoint();\n this._navState = {\n axisRanges: ranges,\n pane: pane,\n axes: axes\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 _getChartElement: function (e, match) {\n var element = this.surface.eventTarget(e);\n if (element) {\n return this._drawingChartElement(element, e, match);\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 if (chartElement) {\n if (chartElement.aliasFor) {\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n }\n if (match) {\n chartElement = chartElement.closest(match);\n if (chartElement && chartElement.aliasFor) {\n chartElement = chartElement.aliasFor();\n }\n }\n return chartElement;\n }\n },\n _eventCoordinates: function (e) {\n var coordinates = dataviz.eventCoordinates(e);\n return this._toModelCoordinates(coordinates.x, coordinates.y);\n },\n _elementPadding: function () {\n if (!this._padding) {\n var ref = elementStyles(this.element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n this._padding = {\n top: paddingTop,\n left: paddingLeft\n };\n }\n return this._padding;\n },\n _toDocumentCoordinates: function (point) {\n var padding = this._elementPadding();\n var offset = dataviz.elementOffset(this.element);\n return {\n left: round(point.x + padding.left + offset.left),\n top: round(point.y + padding.top + offset.top)\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(clientX - offset.left - padding.left, clientY - offset.top - padding.top).transform(inverseTransform);\n return new Point(point.x, point.y);\n },\n _tap: function (e) {\n var this$1 = this;\n var drawingElement = this.surface.eventTarget(e);\n var element = this._drawingChartElement(drawingElement, e);\n var sharedTooltip = this._sharedTooltip();\n if (!this._startHover(drawingElement, e) && !sharedTooltip) {\n this._unsetActivePoint();\n }\n if (sharedTooltip) {\n this._trackSharedTooltip(this._eventCoordinates(e), e, true);\n }\n this._propagateClick(element, e);\n this.handlingTap = true;\n setTimeout(function () {\n this$1.handlingTap = false;\n }, 0);\n },\n _click: function (e) {\n var element = this._getChartElement(e);\n this._propagateClick(element, e);\n },\n _propagateClick: function (element, e) {\n var this$1 = this;\n var current = element;\n while (current) {\n if (current.click) {\n current.click(this$1, e);\n }\n current = current.parent;\n }\n },\n _startHover: function (element, e) {\n if (this._suppressHover) {\n return false;\n }\n var point = this._drawingChartElement(element, e, function (element) {\n return (element.hover || element.over) && !(element instanceof PlotAreaBase);\n });\n var activePoint = this._activePoint;\n var multipleSeries = this._plotArea.series.length > 1;\n var hasInactiveOpacity = this._hasInactiveOpacity();\n this._updateHoveredPoint(point, e);\n if (point && activePoint !== point && point.hover) {\n this._activePoint = point;\n if (!this._sharedTooltip() && !point.hover(this, e)) {\n this._displayTooltip(point);\n if (hasInactiveOpacity) {\n this._displayInactiveOpacity(point, multipleSeries);\n } else {\n this._highlight.show(point);\n }\n }\n } else if (!point && 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 return point;\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 _displayInactiveOpacity: function (activePoint, multipleSeries, highlightPoints) {\n var chartInstance = this._activeChartInstance = this._chartInstanceFromPoint(activePoint);\n if (!chartInstance) {\n return;\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 if (!chartInstance.supportsPointInactiveOpacity()) {\n this._highlight.show(activePoint);\n return;\n }\n inactivePoints = this._getInactivePoints(activePoint, chartInstance);\n if (inactivePoints && inactivePoints.length) {\n this._highlight.show(inactivePoints, 1 - this._getInactiveOpacityForSeries(activePoint.series));\n }\n }\n },\n _getInactivePoints: function (activePoint, chartInstance) {\n var allPoints = this._getAllPointsOfType(chartInstance, activePoint.constructor);\n return allPoints.filter(function (point) {\n return point !== activePoint;\n });\n },\n _getAllPointsOfType: function (container, type) {\n var this$1 = this;\n var points = [];\n for (var i = 0; i < container.children.length; i++) {\n var element = container.children[i];\n if (element.constructor === type) {\n points.push(element);\n } else if (element.children && element.children.length) {\n points = points.concat(this$1._getAllPointsOfType(element, type));\n }\n }\n return points;\n },\n _updateHoveredPoint: function (point, e) {\n var hoveredPoint = this._hoveredPoint;\n if (hoveredPoint && hoveredPoint !== point) {\n hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n if (point && hoveredPoint !== point && point.over) {\n this._hoveredPoint = point;\n point.over(this, e);\n }\n },\n _updateSeriesOpacity: function (point, resetOpacity) {\n var this$1 = this;\n var plotArea = this._plotArea;\n var length = plotArea.series.length;\n for (var i = 0; i < length; i++) {\n var currSeries = plotArea.series[i];\n var defaultOpacity = this$1._getDefaultOpacityForSeries(currSeries);\n var inactiveOpacity = this$1._getInactiveOpacityForSeries(currSeries);\n if (!resetOpacity && currSeries !== point.series) {\n currSeries.defaultOpacity = defaultOpacity;\n currSeries.opacity = inactiveOpacity;\n if (currSeries.line) {\n currSeries.line.opacity = inactiveOpacity;\n }\n } else {\n currSeries.opacity = defaultOpacity;\n if (currSeries.line) {\n currSeries.line.opacity = defaultOpacity;\n }\n }\n }\n },\n _applySeriesOpacity: function (elements, activeSeries, reset, series) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var currSeries = element.series || series;\n if (currSeries && 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 if (element.children && element.children.length) {\n this$1._applySeriesOpacity(element.children, activeSeries, reset, element.series);\n }\n }\n },\n _chartInstanceFromPoint: function (point) {\n var chartInstance = point.parent;\n while (chartInstance && !chartInstance.plotArea) {\n chartInstance = chartInstance.parent;\n }\n return chartInstance;\n },\n _hasInactiveOpacity: function () {\n var hasDefaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity !== undefined;\n var hasInactiveOpacity = this.options.series.filter(function (s) {\n return s.highlight.inactiveOpacity !== undefined;\n }).length > 0;\n return hasDefaultInactiveOpacity || hasInactiveOpacity;\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 _getDefaultOpacityForSeries: function (series) {\n return series.defaultOpacity || series.opacity || datavizConstants.DEFAULT_SERIES_OPACITY;\n },\n _mouseover: function (e) {\n var point = this._startHover(e.element, e.originalEvent);\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 _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 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 if (!seriesPoint.hover(this, e)) {\n var tooltipOptions = deepExtend({}, options.tooltip, seriesPoint.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(seriesPoint);\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._mouseMoveTrackHandler = null;\n }\n },\n _mousemove: function (e) {\n var coords = this._eventCoordinates(e);\n var plotArea = this._plotArea;\n this._trackCrosshairs(coords);\n if (plotArea.hover) {\n var overPlotArea = plotArea.backgroundContainsPoint(coords);\n if (overPlotArea) {\n plotArea.hovered = true;\n this._plotArea.hover(this, e);\n } else if (plotArea.hovered && !overPlotArea) {\n this.trigger(PLOT_AREA_LEAVE);\n plotArea.hovered = false;\n }\n }\n if (this._sharedTooltip()) {\n this._trackSharedTooltip(coords, e);\n }\n },\n _trackCrosshairs: function (coords) {\n var crosshairs = this._plotArea.crosshairs;\n for (var i = 0; i < crosshairs.length; i++) {\n var current = crosshairs[i];\n if (current.box.containsPoint(coords)) {\n current.showAt(coords);\n } else {\n current.hide();\n }\n }\n },\n _trackSharedTooltip: function (coords, e, toggle) {\n if (this._suppressHover) {\n return;\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 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 if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\n if (tooltipOptions.visible) {\n tooltip.showAt(points, coords);\n }\n highlight.show(points);\n this._sharedHighlight = true;\n } else {\n tooltip.hide();\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 hideElements: function (options) {\n var plotArea = this._plotArea;\n this._mousemove.cancel();\n plotArea.hideCrosshairs();\n this._unsetActivePoint(options);\n },\n _unsetActivePoint: function (options) {\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n this._activePoint = null;\n this._hoveredPoint = null;\n if (tooltip && !(options && options.keepTooltipOpen)) {\n tooltip.hide();\n }\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n if (highlight) {\n highlight.hide();\n }\n },\n _deferRedraw: function () {\n this._redraw();\n },\n _clearRedrawTimeout: function () {\n if (this._redrawTimeout) {\n clearInterval(this._redrawTimeout);\n this._redrawTimeout = null;\n }\n },\n bindCategories: function () {\n var this$1 = this;\n var options = this.options;\n var definitions = [].concat(options.categoryAxis);\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n this$1.bindCategoryAxisFromSeries(axis, axisIx);\n }\n }\n },\n bindCategoryAxisFromSeries: function (axis, axisIx) {\n var this$1 = this;\n var series = this.options.series;\n var seriesLength = series.length;\n var uniqueCategories = new dataviz.HashMap();\n var items = [];\n var bindable = false;\n var dateAxis;\n for (var seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n var s = series[seriesIx];\n var onAxis = s.categoryAxis === axis.name || !s.categoryAxis && axisIx === 0;\n var data = s.data;\n var dataLength = data.length;\n var bind = s.categoryField && onAxis;\n bindable = bind || bindable;\n if (bind && dataLength > 0) {\n dateAxis = isDateAxis(axis, getField(s.categoryField, data[0]));\n var getFn = dateAxis ? getDateField : getField;\n for (var dataIx = 0; dataIx < dataLength; dataIx++) {\n var dataRow = data[dataIx];\n var category = getFn(s.categoryField, dataRow, this$1.chartService.intl);\n if (dateAxis || !uniqueCategories.get(category)) {\n items.push([\n category,\n dataRow\n ]);\n if (!dateAxis) {\n uniqueCategories.set(category, true);\n }\n }\n }\n }\n }\n if (items.length > 0) {\n if (dateAxis) {\n items = uniqueDates(items, function (a, b) {\n return dataviz.dateComparer(a[0], b[0]);\n });\n }\n var result = transpose(items);\n axis.categories = result[0];\n } else if (bindable) {\n axis.categories = [];\n }\n },\n _isBindable: function (series) {\n var valueFields = SeriesBinder.current.valueFields(series);\n var result = true;\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 if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n return result;\n },\n _noTransitionsRedraw: function () {\n var options = this.options;\n var transitionsState;\n if (options.transitions !== false) {\n options.transitions = false;\n transitionsState = true;\n }\n this._redraw();\n if (transitionsState) {\n options.transitions = true;\n }\n },\n _legendItemHover: 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 if (inArray(currentSeries.type, [\n PIE,\n DONUT,\n FUNNEL\n ])) {\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 if (this._hasInactiveOpacity() && currentSeries.visible && items) {\n var multipleSeries = plotArea.series.length > 1;\n var point = items.length ? items[0] : items;\n this._displayInactiveOpacity(point, multipleSeries, items);\n } else {\n highlight.show(items);\n }\n },\n _shouldAttachMouseMove: function () {\n return this._plotArea.crosshairs.length || this._tooltip && this._sharedTooltip() || this.requiresHandlers([\n PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE\n ]);\n },\n updateMouseMoveHandler: function () {\n var obj;\n unbindEvents(this.element, (obj = {}, obj[MOUSEMOVE] = this._mousemove, obj));\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(this.element, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mousemove, obj$1));\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 if (theme) {\n this._theme = theme;\n this.chartService.theme = theme;\n }\n this._initTheme(this.options, this._theme);\n this._toggleDragZoomEvents();\n },\n setOptions: function (options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\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 setIntlService: function (intl) {\n this.chartService.intl = intl;\n },\n noTransitionsRedraw: function () {\n this._noTransitionsRedraw();\n },\n destroy: function () {\n this._destroyed = true;\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));\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n if (this._mouseMoveTrackHandler) {\n var obj$1;\n unbindEvents(document, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mouseMoveTrackHandler, obj$1));\n }\n this._destroyView();\n this._destroySurface();\n this._clearRedrawTimeout();\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 this.surface = null;\n }\n },\n _destroySelections: function () {\n var selections = this._selections;\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n },\n _destroyView: function () {\n var model = this._model;\n if (model) {\n model.destroy();\n this._model = null;\n }\n this._unsetActivePoint();\n this._destroySelections();\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n if (this._highlight) {\n this._highlight.destroy();\n }\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n });\n function resolveAxisAliases(options) {\n var aliases = AXIS_NAMES;\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 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 function applyAxisDefaults(options, themeOptions) {\n var themeAxisDefaults = (themeOptions || {}).axisDefaults || {};\n var axisName, axisDefaults, axes;\n function mapAxisOptions(axisOptions) {\n var axisColor = (axisOptions || {}).color || axisDefaults.color;\n var result = deepExtend({}, themeAxisDefaults, themeAxisDefaults[axisName], axisDefaults, axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n }, axisOptions);\n delete result[axisName];\n return result;\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 axes = axes.map(mapAxisOptions);\n options[axisName] = axes.length > 1 ? axes : axes[0];\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 cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n for (var i = 0; i < seriesLength; i++) {\n var seriesType = series[i].type || options.seriesDefaults.type;\n var baseOptions = deepExtend({ data: [] }, commonThemeDefaults, themeSeriesDefaults[seriesType], { tooltip: options.tooltip }, commonDefaults, seriesDefaults[seriesType]);\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n series[i].data = series[i].data || [];\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 function axisRanges(axes) {\n var ranges = {};\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 return ranges;\n }\n function sortDates(dates, comparer) {\n if (comparer === void 0) {\n comparer = dataviz.dateComparer;\n }\n for (var i = 1, length = dates.length; i < length; i++) {\n if (comparer(dates[i], dates[i - 1]) < 0) {\n dates.sort(comparer);\n break;\n }\n }\n return dates;\n }\n function uniqueDates(srcDates, comparer) {\n if (comparer === void 0) {\n comparer = dataviz.dateComparer;\n }\n var dates = sortDates(srcDates, comparer);\n var length = dates.length;\n var result = length > 0 ? [dates[0]] : [];\n for (var i = 1; i < length; i++) {\n if (comparer(dates[i], last(result)) !== 0) {\n result.push(dates[i]);\n }\n }\n return result;\n }\n function transpose(rows) {\n var rowCount = rows.length;\n var result = [];\n for (var rowIx = 0; rowIx < rowCount; rowIx++) {\n var row = rows[rowIx];\n var colCount = row.length;\n for (var colIx = 0; colIx < colCount; colIx++) {\n result[colIx] = result[colIx] || [];\n result[colIx].push(row[colIx]);\n }\n }\n return result;\n }\n var DATA_FIELDS = [\n 'data',\n 'categories'\n ];\n function clearMissingValues(originalOptions, options) {\n for (var field in options) {\n if (!inArray(field, DATA_FIELDS) && options.hasOwnProperty(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 function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\n }\n setDefaultOptions(Chart, {\n renderAs: '',\n chartArea: {},\n legend: {\n visible: true,\n labels: {}\n },\n categoryAxis: {},\n seriesDefaults: {\n type: COLUMN,\n data: [],\n highlight: { visible: true },\n labels: {},\n negativeValues: { visible: false }\n },\n series: [],\n seriesColors: null,\n tooltip: { visible: false },\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [{}],\n pannable: false,\n zoomable: false\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 getDateField: getDateField,\n getField: getField,\n hasGradientOverlay: hasGradientOverlay,\n hasValue: hasValue,\n isDateAxis: isDateAxis,\n segmentVisible: segmentVisible,\n singleItemOrArray: singleItemOrArray,\n createOutOfRangePoints: createOutOfRangePoints\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/chart', [\n 'dataviz/chart/kendo-chart',\n 'kendo.data',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'kendo.drawing',\n 'kendo.userevents'\n ], f);\n}(function () {\n (function ($, undefined) {\n var NS = '.kendoChart';\n var kendo = window.kendo;\n var Class = kendo.Class;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var KendoChart = dataviz.Chart;\n var SeriesBinder = dataviz.SeriesBinder;\n var Widget = kendo.ui.Widget;\n var DataSource = kendo.data.DataSource;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var getField = dataviz.getField;\n var InstanceObserver = dataviz.InstanceObserver;\n var inArray = dataviz.inArray;\n var services = dataviz.services;\n var proxy = $.proxy;\n var isArray = Array.isArray;\n var extend = $.extend;\n var template = kendo.template;\n var MOUSELEAVE_NS = 'mouseleave' + NS;\n var AXIS_LABEL_CLICK = constants.AXIS_LABEL_CLICK;\n var LEGEND_ITEM_CLICK = constants.LEGEND_ITEM_CLICK;\n var LEGEND_ITEM_HOVER = constants.LEGEND_ITEM_HOVER;\n var LEGEND_ITEM_LEAVE = constants.LEGEND_ITEM_LEAVE;\n var SERIES_CLICK = constants.SERIES_CLICK;\n var SERIES_HOVER = constants.SERIES_HOVER;\n var SERIES_OVER = constants.SERIES_OVER;\n var SERIES_LEAVE = constants.SERIES_LEAVE;\n var PANE_RENDER = constants.PANE_RENDER;\n var PLOT_AREA_CLICK = constants.PLOT_AREA_CLICK;\n var PLOT_AREA_HOVER = constants.PLOT_AREA_HOVER;\n var PLOT_AREA_LEAVE = constants.PLOT_AREA_LEAVE;\n var DRAG = constants.DRAG;\n var DRAG_END = constants.DRAG_END;\n var DRAG_START = constants.DRAG_START;\n var ZOOM_START = constants.ZOOM_START;\n var ZOOM = constants.ZOOM;\n var ZOOM_END = constants.ZOOM_END;\n var SELECT_START = constants.SELECT_START;\n var SELECT = constants.SELECT;\n var SELECT_END = constants.SELECT_END;\n var RENDER = constants.RENDER;\n var NOTE_CLICK = constants.NOTE_CLICK;\n var NOTE_HOVER = constants.NOTE_HOVER;\n var NOTE_LEAVE = constants.NOTE_LEAVE;\n var DOCUMENT_ELEMENT = $(document.documentElement);\n var CHANGE = 'change';\n var DATABOUND = 'dataBound';\n var LEAVE = 'leave';\n var MOUSEDOWN = 'down';\n var VALUE = constants.VALUE;\n var PIE = constants.PIE;\n var DONUT = constants.DONUT;\n var FUNNEL = constants.FUNNEL;\n var Observable = kendo.Observable;\n var TOOLTIP_ANIMATION_DURATION = 150;\n var TOOLTIP_SHOW_DELAY = 100;\n var TOOLTIP_INVERSE = 'k-chart-tooltip-inverse';\n var SHARED_TOOLTIP_CLASS = 'k-chart-shared-tooltip';\n var RTL = 'rtl';\n services.DomEventsBuilder.register({\n create: function (element, events) {\n return new kendo.UserEvents(element, deepExtend({\n global: true,\n multiTouch: true,\n fastTap: true\n }, events));\n }\n });\n var ChartInstanceObserver = InstanceObserver.extend({\n handlerMap: {\n showTooltip: '_showTooltip',\n hideTooltip: '_hideTooltip',\n legendItemClick: '_onLegendItemClick',\n render: '_onRender',\n init: '_onInit'\n }\n });\n var Chart = Widget.extend({\n init: function (element, userOptions) {\n var dataSource;\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n if (userOptions) {\n dataSource = userOptions.dataSource;\n delete userOptions.dataSource;\n }\n this.options = deepExtend({}, this.options, userOptions);\n this.wrapper = this.element;\n this._attachEvents();\n if (userOptions) {\n userOptions.dataSource = dataSource;\n }\n this._seriesVisibility = new SeriesVisibilityState();\n this.bind(this.events, this.options);\n this._initDataSource(userOptions);\n kendo.notify(this, dataviz.ui);\n },\n events: [\n DATABOUND,\n SERIES_CLICK,\n SERIES_HOVER,\n SERIES_OVER,\n SERIES_LEAVE,\n AXIS_LABEL_CLICK,\n LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER,\n LEGEND_ITEM_LEAVE,\n PANE_RENDER,\n PLOT_AREA_CLICK,\n PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE,\n DRAG_START,\n DRAG,\n DRAG_END,\n ZOOM_START,\n ZOOM,\n ZOOM_END,\n SELECT_START,\n SELECT,\n SELECT_END,\n NOTE_CLICK,\n NOTE_HOVER,\n NOTE_LEAVE,\n RENDER\n ],\n options: {\n name: 'Chart',\n renderAs: '',\n theme: 'default',\n axisDefaults: {},\n chartArea: {},\n legend: {},\n categoryAxis: {},\n autoBind: true,\n seriesDefaults: {},\n series: [],\n seriesColors: null,\n tooltip: {},\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [{}],\n pannable: false,\n zoomable: false\n },\n items: function () {\n return $();\n },\n refresh: function () {\n var chart = this;\n var instance = chart._instance;\n instance.applyDefaults(chart.options);\n instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n chart.trigger(DATABOUND);\n chart._redraw();\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n redraw: function (paneName) {\n this._size = null;\n this._instance.redraw(paneName);\n },\n setOptions: function (options) {\n var chart = this, dataSource = options.dataSource;\n delete options.dataSource;\n Widget.fn._setEvents.call(chart, options);\n this._instance.applyOptions(options, this._getThemeOptions(options));\n this.options = this._instance.options;\n this._tooltip.setOptions(this.options.tooltip);\n this._seriesVisibility.setOptions(this.options);\n this._sourceSeries = null;\n if (dataSource) {\n chart.setDataSource(dataSource);\n }\n if (chart._hasDataSource) {\n chart._onDataChanged();\n } else {\n chart._bindCategories();\n chart.redraw();\n }\n chart._instance.updateMouseMoveHandler();\n },\n setDataSource: function (dataSource) {\n var chart = this;\n chart.dataSource.unbind(CHANGE, chart._dataChangeHandler);\n chart.dataSource = dataSource = DataSource.create(dataSource);\n chart._hasDataSource = true;\n chart._hasData = false;\n dataSource.bind(CHANGE, chart._dataChangeHandler);\n if (chart.options.autoBind) {\n dataSource.fetch();\n }\n },\n destroy: function () {\n var chart = this, dataSource = chart.dataSource;\n chart.element.off(NS);\n if (dataSource) {\n dataSource.unbind(CHANGE, chart._dataChangeHandler);\n }\n if (chart._instance) {\n chart._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n this._destroyCrosshairTooltips();\n Widget.fn.destroy.call(chart);\n },\n findPaneByName: function (name) {\n var panes = this._plotArea.panes;\n for (var idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(this, panes[idx]);\n }\n }\n },\n findPaneByIndex: function (idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(this, panes[idx]);\n }\n },\n findSeries: function (callback) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (callback(series[idx])) {\n return new ChartSeries(this, series[idx]);\n }\n }\n },\n findSeriesByName: function (name) {\n return this._createSeries({ name: name });\n },\n findSeriesByIndex: function (index) {\n return this._createSeries({ index: index });\n },\n exportVisual: function (options) {\n var instance = this._instance;\n if (!instance) {\n return;\n }\n var visual;\n if (options && (options.width || options.height)) {\n var chartArea = instance.options.chartArea;\n var originalChartArea = instance._originalOptions.chartArea;\n deepExtend(chartArea, options);\n var model = instance._getModel();\n chartArea.width = originalChartArea.width;\n chartArea.height = originalChartArea.height;\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n visual = model.visual;\n } else {\n visual = instance.exportVisual();\n }\n return visual;\n },\n _createSeries: function (options) {\n var seriesOptions = this._seriesOptions(options);\n if (seriesOptions) {\n return new ChartSeries(this, seriesOptions);\n }\n },\n _seriesOptions: function (options) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n var seriesOptions;\n if (defined(options.index)) {\n seriesOptions = series[options.index];\n } else if (defined(options.name)) {\n for (var idx = 0; idx < series.length; idx++) {\n if (series[idx].name === options.name) {\n seriesOptions = series[idx];\n break;\n }\n }\n }\n return seriesOptions;\n },\n _attachEvents: function () {\n this.element.on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n },\n _mouseleave: function (e) {\n var instance = this._instance;\n var tooltip = this._tooltip;\n var target = e.relatedTarget;\n if (!(target && $(target).closest(tooltip.element).length) && instance && !instance.handlingTap) {\n instance.hideElements({ keepTooltipOpen: !tooltip.options.autoHide });\n }\n },\n _getThemeOptions: function (userOptions) {\n var themeName = (userOptions || {}).theme;\n if (themeName && dataviz.SASS_THEMES.indexOf(themeName.toLowerCase()) !== -1) {\n return dataviz.autoTheme().chart;\n }\n if (defined(themeName)) {\n var themes = dataviz.ui.themes || {};\n var theme = themes[themeName] || themes[themeName.toLowerCase()] || {};\n return theme.chart || {};\n }\n },\n _initChart: function () {\n this._createChart(this.options, this._getThemeOptions(this.options));\n this.options = this._instance.options;\n this._seriesVisibility.setOptions(this.options);\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoChart(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _onInit: function (e) {\n this._instance = e.sender;\n },\n _initDataSource: function (userOptions) {\n var chart = this, dataSource = (userOptions || {}).dataSource;\n chart._dataChangeHandler = proxy(chart._onDataChanged, chart);\n chart.dataSource = DataSource.create(dataSource).bind('change', chart._dataChangeHandler);\n chart._bindCategories();\n if (dataSource) {\n chart._hasDataSource = true;\n }\n this._initChart();\n this._initTooltip();\n if (dataSource) {\n if (chart.options.autoBind) {\n chart.dataSource.fetch();\n }\n }\n },\n _destroyCrosshairTooltips: function () {\n var tooltips = this._crosshairTooltips;\n if (tooltips) {\n for (var key in tooltips) {\n tooltips[key].destroy();\n }\n }\n this._crosshairTooltips = {};\n },\n _getCrosshairTooltip: function (name, index) {\n var tooltips = this._crosshairTooltips = this._crosshairTooltips || {};\n var key = name + index;\n var tooltip = tooltips[key];\n if (!tooltip) {\n tooltip = tooltips[key] = new CrosshairTooltip(this.element);\n }\n return tooltip;\n },\n _showTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.show(e);\n } else if (this._tooltip) {\n this._tooltip.show(e);\n }\n },\n _hideTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.hide();\n } else if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n _onRender: function (e) {\n this._destroyCrosshairTooltips();\n this._copyMembers(e.sender);\n if (!this._hasDataSource || this._hasData || !this.options.autoBind) {\n this.trigger(RENDER);\n }\n },\n _copyMembers: function (instance) {\n this.options = instance.options;\n this._originalOptions = instance._originalOptions;\n this.surface = instance.surface;\n this._plotArea = instance._plotArea;\n this._model = instance._model;\n this._highlight = instance._highlight;\n this._selections = instance._selections;\n this._pannable = instance._pannable;\n this._zoomSelection = instance._zoomSelection;\n this._mousewheelZoom = instance._mousewheelZoom;\n },\n requiresHandlers: function (names) {\n var events = this._events;\n for (var idx = 0; idx < names.length; idx++) {\n if (defined(events[names[idx]])) {\n return true;\n }\n }\n },\n _initTooltip: function () {\n this._tooltip = this._createTooltip();\n this._tooltip.bind(LEAVE, proxy(this._tooltipleave, this));\n },\n _onLegendItemClick: function (e) {\n if (!this.trigger(LEGEND_ITEM_CLICK, e)) {\n this._legendItemClick(e.seriesIndex, e.pointIndex);\n }\n },\n _legendItemClick: function (seriesIndex, pointIndex) {\n var chart = this._instance, plotArea = chart._plotArea, currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n if (chart._hasInactiveOpacity() && chart._activeChartInstance) {\n chart._updateSeriesOpacity(null, true);\n chart._applySeriesOpacity(chart._activeChartInstance.children, null, true);\n chart._activeChartInstance = null;\n }\n if ($.inArray(currentSeries.type, [\n PIE,\n DONUT,\n FUNNEL\n ]) >= 0) {\n var point = currentSeries.data[pointIndex];\n if (point && defined(point.visible)) {\n point.visible = !point.visible;\n } else {\n var pointVisibility = currentSeries.pointVisibility = currentSeries.pointVisibility || {};\n var visible = pointVisibility[pointIndex];\n pointVisibility[pointIndex] = defined(visible) ? !visible : false;\n }\n } else {\n currentSeries.visible = !currentSeries.visible;\n this._seriesVisibility.save(currentSeries);\n }\n chart._noTransitionsRedraw();\n },\n _createTooltip: function () {\n return new Tooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n _tooltipleave: function () {\n if (this._instance) {\n this._instance.hideElements();\n }\n },\n _bindData: function (e) {\n var chart = this, options = chart.options, series = chart._sourceSeries || options.series, seriesIx, seriesLength = series.length, data = chart.dataSource.view(), grouped = (chart.dataSource.group() || []).length > 0, processedSeries = [], seriesVisibility = this._seriesVisibility, currentSeries, groupedSeries;\n seriesVisibility.read();\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries) && grouped) {\n groupedSeries = groupSeries(currentSeries, data);\n processedSeries = processedSeries.concat(groupedSeries);\n seriesVisibility.applyByGroup(groupedSeries, e);\n } else {\n currentSeries = extend({}, currentSeries);\n processedSeries.push(currentSeries);\n seriesVisibility.applyByIndex(currentSeries, e);\n }\n }\n chart._sourceSeries = series;\n options.series = processedSeries;\n this._instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n this._hasData = true;\n },\n _onDataChanged: function (e) {\n this._bindData(e);\n this.trigger(DATABOUND);\n if (this._instance && this._instance.fontLoaded) {\n this._redraw();\n }\n },\n _bindSeries: function () {\n var chart = this, data = chart.dataSource.view(), series = chart.options.series, seriesIx, seriesLength = series.length, currentSeries, groupIx, seriesData;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries)) {\n groupIx = currentSeries._groupIx;\n seriesData = defined(groupIx) ? (data[groupIx] || {}).items : data;\n if (currentSeries.autoBind !== false) {\n currentSeries.data = seriesData;\n }\n }\n }\n },\n _bindCategories: function () {\n var chart = this, data = chart.dataSource.view() || [], grouped = (chart.dataSource.group() || []).length > 0, categoriesData = data, options = chart.options, definitions = [].concat(options.categoryAxis), axisIx, axis;\n if (grouped) {\n if (data.length) {\n categoriesData = data[0].items;\n }\n }\n for (axisIx = 0; axisIx < definitions.length; axisIx++) {\n axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n chart._bindCategoryAxis(axis, categoriesData, axisIx);\n }\n }\n },\n _bindCategoryAxis: function (axis, data, axisIx) {\n var count = (data || []).length, categoryIx, category, row;\n if (axis.field) {\n axis.categories = [];\n for (categoryIx = 0; categoryIx < count; categoryIx++) {\n row = data[categoryIx];\n category = getField(axis.field, row);\n if (categoryIx === 0) {\n axis.categories = [category];\n axis.dataItems = [row];\n } else {\n axis.categories.push(category);\n axis.dataItems.push(row);\n }\n }\n } else if (this._instance) {\n this._instance.bindCategoryAxisFromSeries(axis, axisIx);\n }\n },\n _isBindable: function (series) {\n var valueFields = SeriesBinder.current.valueFields(series), result = true, field, i;\n for (i = 0; i < valueFields.length; i++) {\n field = valueFields[i];\n if (field === VALUE) {\n field = 'field';\n } else {\n field = field + 'Field';\n }\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n return result;\n },\n _isRtl: function () {\n return kendo.support.isRtl(this.element) && this.element.css('direction') === RTL;\n }\n });\n var proxyMembers = [\n 'getAxis',\n 'findAxisByName',\n 'plotArea',\n 'toggleHighlight',\n 'showTooltip',\n 'hideTooltip',\n '_resize',\n '_redraw',\n '_noTransitionsRedraw',\n '_legendItemHover',\n '_eventCoordinates'\n ];\n function createProxyMember(name) {\n Chart.fn[name] = function () {\n var instance = this._instance;\n if (instance) {\n return instance[name].apply(instance, arguments);\n }\n };\n }\n for (var idx = 0; idx < proxyMembers.length; idx++) {\n createProxyMember(proxyMembers[idx]);\n }\n function groupSeries(series, data) {\n var result = [], nameTemplate, legacyTemplate = series.groupNameTemplate, groupIx, dataLength = data.length, seriesClone;\n if (dataLength === 0) {\n seriesClone = deepExtend({}, series);\n seriesClone.visibleInLegend = false;\n return [seriesClone];\n }\n if (defined(legacyTemplate)) {\n kendo.logToConsole('\\'groupNameTemplate\\' is obsolete and will be removed in future versions. ' + 'Specify the group name template as \\'series.name\\'');\n if (legacyTemplate) {\n nameTemplate = template(legacyTemplate);\n }\n } else {\n nameTemplate = template(series.name || '');\n if (nameTemplate._slotCount === 0) {\n nameTemplate = template(defined(series.name) ? '#= group.value #: #= series.name #' : '#= group.value #');\n }\n }\n for (groupIx = 0; groupIx < dataLength; groupIx++) {\n seriesClone = deepExtend({}, series);\n if (!kendo.isFunction(seriesClone.color)) {\n seriesClone.color = undefined;\n }\n seriesClone._groupIx = groupIx;\n seriesClone._groupValue = data[groupIx].value;\n result.push(seriesClone);\n if (nameTemplate) {\n seriesClone.name = nameTemplate({\n series: seriesClone,\n group: data[groupIx]\n });\n }\n }\n return result;\n }\n dataviz.ExportMixin.extend(Chart.fn);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Chart.fn);\n }\n dataviz.ui.plugin(Chart);\n var SeriesVisibilityState = Class.extend({\n init: function () {\n this.groups = {};\n this.index = {};\n this.options = {};\n },\n applyByGroup: function (series, e) {\n if (e && e.action || this.options.persistSeriesVisibility) {\n for (var idx = 0; idx < series.length; idx++) {\n if (this.groups[series[idx]._groupValue] === false) {\n series[idx].visible = false;\n }\n }\n } else {\n this.groups = {};\n }\n },\n applyByIndex: function (series, e) {\n if (e && e.action || this.options.persistSeriesVisibility) {\n if (this.index[series.index] === false) {\n series.visible = false;\n }\n } else {\n this.index = {};\n }\n },\n save: function (series) {\n if (!series) {\n return;\n }\n if (this.options.persistSeriesVisibility) {\n this.options.series[series.index].visible = series.visible;\n } else {\n this.saveState(series);\n }\n },\n setOptions: function (options) {\n this.options = options;\n this.groups = {};\n this.index = {};\n },\n read: function () {\n var options = this.options;\n if (options.persistSeriesVisibility) {\n var series = options.series;\n for (var idx = 0; idx < series.length; idx++) {\n this.saveState(series[idx]);\n }\n }\n },\n saveState: function (series) {\n if (defined(series._groupValue)) {\n this.groups[series._groupValue] = series.visible;\n } else {\n this.index[series.index] = series.visible;\n }\n }\n });\n var geom = kendo.geometry;\n function normalizeStyle(style) {\n for (var field in style) {\n if (style[field] === undefined) {\n style[field] = '';\n }\n }\n return style;\n }\n var Tooltip = Observable.extend({\n init: function (chartElement, options) {\n var tooltip = this;\n Observable.fn.init.call(tooltip);\n this.setOptions(options);\n tooltip.chartElement = chartElement;\n tooltip.template = Tooltip.template;\n if (!tooltip.template) {\n tooltip.template = Tooltip.template = kendo.template('
' + '
' + '#if (!d.autoHide) {#
#}#' + '
', {\n useWithBlock: false,\n paramName: 'd'\n });\n }\n tooltip.element = $(tooltip.template(tooltip.options));\n tooltip.move = proxy(tooltip.move, tooltip);\n tooltip._mouseleave = proxy(tooltip._mouseleave, tooltip);\n var mobileScrollerSelector = kendo.format('[{0}=\\'content\\'],[{0}=\\'scroller\\']', kendo.attr('role'));\n tooltip._mobileScroller = chartElement.closest(mobileScrollerSelector).data('kendoMobileScroller');\n tooltip.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n tooltip._closeTooltipHandler = proxy(tooltip._closeTooltip, tooltip);\n },\n destroy: function () {\n var tooltip = this;\n this._clearShowTimeout();\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler);\n if (this.element) {\n this.element.off(MOUSELEAVE_NS).remove();\n this.element = null;\n }\n },\n setOptions: function (options) {\n this.options = deepExtend({}, this.options, options);\n },\n options: {\n opacity: 1,\n animation: { duration: TOOLTIP_ANIMATION_DURATION },\n sharedTemplate: '' + '' + '# for(var i = 0; i < points.length; i++) { #' + '# var point = points[i]; #' + '' + '# if(colorMarker) { # ' + '' + '# } #' + '# if(nameColumn) { # ' + '' + '# } #' + '' + '' + '# } #' + '
#= categoryText #
#if (point.series.name) {# #: point.series.name #: #} else {#   #}##= content(point) #
',\n categoryFormat: '{0:d}',\n autoHide: true\n },\n move: function () {\n var tooltip = this, options = tooltip.options, element = tooltip.element, offset;\n if (!tooltip.anchor || !tooltip.element) {\n return;\n }\n offset = tooltip._offset();\n if (!tooltip.visible) {\n element.css({\n top: offset.top,\n left: offset.left\n });\n }\n tooltip.visible = true;\n tooltip._ensureElement(document.body);\n element.stop(true, true).show().animate({\n left: offset.left,\n top: offset.top\n }, options.animation.duration);\n },\n _clearShowTimeout: function () {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n },\n getAnchor: function (size) {\n var anchor = this.anchor;\n var point = anchor.point;\n var align = anchor.align;\n var x = point.left;\n var y = point.top;\n if (align.horizontal === 'center') {\n x -= size.width / 2;\n } else if (align.horizontal === 'right') {\n x -= size.width;\n }\n if (align.vertical === 'center') {\n y -= size.height / 2;\n } else if (align.vertical === 'bottom') {\n y -= size.height;\n }\n return {\n x: x,\n y: y\n };\n },\n _offset: function () {\n var tooltip = this, size = tooltip._measure(), anchor = tooltip.getAnchor(size), top = anchor.y, left = anchor.x, zoomLevel = kendo.support.zoomLevel(), viewport = $(window), scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0, scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0, movable = (this._mobileScroller || {}).movable;\n if (!movable || movable.scale === 1) {\n top += tooltip._fit(top - scrollTop, size.height, outerHeight(viewport) / zoomLevel);\n left += tooltip._fit(left - scrollLeft, size.width, outerWidth(viewport) / zoomLevel);\n } else {\n var transform = geom.transform().scale(movable.scale, movable.scale, [\n movable.x,\n movable.y\n ]);\n var point = new geom.Point(left, top).transform(transform);\n left = point.x;\n top = point.y;\n }\n return {\n top: top,\n left: left\n };\n },\n show: function (e) {\n var tooltip = this;\n this.anchor = e.anchor;\n this.element.css(normalizeStyle(e.style));\n this.element.toggleClass(TOOLTIP_INVERSE, !!e.className);\n this.element.toggleClass(SHARED_TOOLTIP_CLASS, !!e.shared);\n var content = e.shared ? this._sharedContent(e) : this._pointContent(e.point);\n this.element.find('.k-tooltip-content').html(content);\n if (!tooltip.options.autoHide) {\n tooltip.element.off('click' + NS).on('click' + NS, '.k-tooltip-button', tooltip._closeTooltipHandler);\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler).on(tooltip.downEvent, tooltip._closeTooltipHandler);\n }\n this._clearShowTimeout();\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n },\n hide: function (forceHide) {\n var tooltip = this;\n if (!tooltip.options.autoHide && !forceHide) {\n return;\n }\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler);\n }\n },\n _closeTooltip: function (e) {\n var target = $(e.target);\n if (!target.is('.k-chart-tooltip, .k-tooltip-content')) {\n e.preventDefault();\n this.chartElement.data('kendoChart')._instance.hideElements();\n this.hide(true);\n }\n },\n _sharedContent: function (e) {\n var points = e.points;\n var nameColumn = dataviz.grep(points, function (point) {\n return defined(point.series.name);\n }).length;\n var colorMarker = e.series.length > 1;\n var colspan = 1;\n if (nameColumn) {\n colspan++;\n }\n if (colorMarker) {\n colspan++;\n }\n var template = kendo.template(this.options.sharedTemplate);\n var content = template({\n points: points,\n category: e.category,\n categoryText: e.categoryText,\n content: this._pointContent,\n colorMarker: colorMarker,\n nameColumn: nameColumn,\n colspan: colspan\n });\n return content;\n },\n _measure: function () {\n this._ensureElement();\n var size = {\n width: outerWidth(this.element),\n height: outerHeight(this.element)\n };\n return size;\n },\n _ensureElement: function () {\n if (this.element) {\n this.element.appendTo(document.body).on(MOUSELEAVE_NS, this._mouseleave);\n }\n },\n _mouseleave: function (e) {\n var target = e.relatedTarget;\n var chart = this.chartElement[0];\n if (target && target !== chart && !$.contains(chart, target)) {\n this.trigger(LEAVE);\n }\n },\n _hideElement: function () {\n var tooltip = this;\n var element = this.element;\n if (element) {\n element.fadeOut({\n always: function () {\n if (!tooltip.visible) {\n element.off(MOUSELEAVE_NS).remove();\n }\n }\n });\n }\n },\n _pointContent: function (point) {\n var tooltip = this, options = deepExtend({}, tooltip.options, point.options.tooltip), content, tooltipTemplate;\n if (defined(point.value)) {\n content = point.value.toString();\n }\n if (options.template) {\n tooltipTemplate = template(options.template);\n content = tooltipTemplate({\n value: point.value,\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n percentage: point.percentage,\n runningTotal: point.runningTotal,\n total: point.total,\n low: point.low,\n high: point.high,\n xLow: point.xLow,\n xHigh: point.xHigh,\n yLow: point.yLow,\n yHigh: point.yHigh\n });\n } else if (options.format) {\n content = point.formatValue(options.format);\n }\n return content;\n },\n _fit: function (offset, size, viewPortSize) {\n var output = 0;\n if (offset + size > viewPortSize) {\n output = viewPortSize - (offset + size);\n }\n if (offset < 0) {\n output = -offset;\n }\n return output;\n }\n });\n var CrosshairTooltip = Tooltip.extend({\n init: function (chartElement, options) {\n Tooltip.fn.init.call(this, chartElement, options);\n this.element.addClass('k-chart-crosshair-tooltip');\n },\n show: function (e) {\n var element = this.element;\n if (element) {\n this.anchor = e.anchor;\n this.element.css(e.style);\n this.element.html(this.content(e));\n this.move();\n }\n },\n move: function () {\n var tooltip = this, element = tooltip.element, offset = tooltip._offset();\n tooltip._ensureElement();\n element.css({\n top: offset.top,\n left: offset.left\n }).show();\n },\n content: function (e) {\n var content = e.value, options = e.crosshair.options.tooltip;\n if (options.template) {\n content = template(options.template)({ value: content });\n }\n return content;\n },\n hide: function () {\n this.element.hide();\n }\n });\n var ChartPane = Class.extend({\n init: function (chart, pane) {\n this._chart = chart;\n this._pane = pane;\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this.name = pane.options.name;\n },\n series: function () {\n var chart = this._chart;\n var seriesByPane = chart._plotArea.groupSeriesByPane();\n var series = seriesByPane[this.name || 'default'];\n var result = [];\n if (series) {\n for (var idx = 0; idx < series.length; idx++) {\n result.push(new ChartSeries(chart, series[idx]));\n }\n }\n return result;\n }\n });\n var ChartSeries = Class.extend({\n init: function (chart, options) {\n this._chart = chart;\n this._options = options;\n },\n points: function (filter) {\n var points = this._points;\n if (!points) {\n var series = this._seriesOptions();\n var plotArea = this._chart._plotArea;\n this._points = points = plotArea.pointsBySeriesIndex(series.index);\n }\n if (kendo.isFunction(filter)) {\n points = this._filterPoints(points, filter);\n }\n return points;\n },\n data: function (data) {\n var series = this._seriesOptions();\n if (data) {\n var chart = this._chart;\n var plotArea = chart._plotArea;\n series.data = data;\n if (series.categoryField) {\n var axis = plotArea.seriesCategoryAxis(series);\n var options = [].concat(chart.options.categoryAxis);\n chart._instance.bindCategoryAxisFromSeries(options[axis.axisIndex], axis.axisIndex);\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n }\n return series.data;\n },\n findPoint: function (filter) {\n var points = this.points();\n for (var idx = 0; idx < points.length; idx++) {\n if (filter(points[idx])) {\n return points[idx];\n }\n }\n },\n toggleHighlight: function (show, elements) {\n if (!elements) {\n elements = this.points();\n } else if (kendo.isFunction(elements)) {\n elements = this.points(elements);\n } else {\n elements = isArray(elements) ? elements : [elements];\n }\n this._chart._instance.togglePointsHighlight(show, elements);\n },\n toggleVisibility: function (visible, filter) {\n var chart = this._chart;\n var seriesOptions = this._seriesOptions();\n var hasFilter = kendo.isFunction(filter);\n if (!hasFilter) {\n seriesOptions.visible = visible;\n chart._seriesVisibility.save(seriesOptions);\n } else {\n if (inArray(seriesOptions.type, [\n PIE,\n DONUT,\n FUNNEL\n ])) {\n var data = this._filterData(filter);\n for (var idx = 0; idx < data.length; idx++) {\n data[idx].visible = visible;\n }\n } else {\n seriesOptions.visible = function (data) {\n return filter(data.dataItem) ? visible : true;\n };\n }\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n },\n _filterData: function (filter) {\n var data = this._seriesOptions().data;\n var length = data.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (filter(data[idx])) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n _filterPoints: function (points, filter) {\n var result = [];\n var length = points.length;\n for (var idx = 0; idx < length; idx++) {\n if (filter(points[idx])) {\n result.push(points[idx]);\n }\n }\n return result;\n },\n _seriesOptions: function () {\n var series = this._series;\n if (!series) {\n series = this._series = this._chart._seriesOptions(this._options);\n }\n return series;\n },\n _clearFields: function () {\n delete this._points;\n delete this._series;\n }\n });\n function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\n }\n dataviz.Tooltip = Tooltip;\n dataviz.CrosshairTooltip = CrosshairTooltip;\n dataviz.ChartInstanceObserver = ChartInstanceObserver;\n dataviz.ChartPane = ChartPane;\n dataviz.ChartSeries = ChartSeries;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.chart', [\n 'dataviz/chart/kendo-chart',\n 'dataviz/chart/chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.chart',\n name: 'Chart',\n category: 'dataviz',\n description: 'The Chart widget uses modern browser technologies to render high-quality data visualizations in the browser.',\n depends: [\n 'data',\n 'userevents',\n 'drawing',\n 'dataviz.core',\n 'dataviz.themes'\n ],\n features: [{\n id: 'dataviz.chart-pdf-export',\n name: 'PDF export',\n description: 'Export Chart as PDF',\n depends: ['pdf']\n }]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}