{"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","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","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","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","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","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","supportsPointInactiveOpacity","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","percBrightness","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","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","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","_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","brightnessValue","themeLabels","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","errorLow","errorHigh","userOptions","observers","addObserver","ChartService","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","bindCategories","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","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","_activеChartInstance","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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C,EAEIC,CALhB,KAAS7Q,IAASrC,IACTmD,GAAQd,EAAO8Q,KAAgBnT,EAAQoD,eAAef,KACnD2Q,EAAahT,EAAQqC,GACrB4Q,EAAgBF,EAAgB1Q,GAChCoC,GAAQwO,KACJC,EAA2B,OAAfF,EACZE,IAAczO,GAAQuO,UACfD,GAAgB1Q,GACnB6Q,SACOlT,GAAQqC,IAEZ4Q,GAAiB1P,GAASyP,IAC7BzP,GAAS0P,IACTH,EAAmBG,EAAeD,KAO1D,QAASI,IAAkBC,GACvB,IAAK,GAAIzR,GAAM,EAAGA,EAAMyR,EAAM5V,OAAQmE,IAClCyR,EAAMzR,GAAK0R,eAhvXtB,GAEO9K,IACA7J,GACAwD,GACAoR,GACAC,GACAC,GACAC,GACA9F,GACAK,GACAD,GACAF,GACA6F,GACAC,GACAC,GACAC,GACAjG,GACAkG,GACAlM,GACA2F,GACAwG,GACAvP,GACAlC,GACA8C,GACA4O,GACAvF,GACAtE,GACA8J,GACAC,GACAhR,GACAE,GACAC,GACAC,GACApC,GACAoR,GACA6B,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAnO,GACAgB,GACAoN,GACAxJ,GACAyJ,GACAtH,GACAuH,GACApJ,GACAqJ,GACAlI,GACAmI,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAnR,GACAoR,GACA5T,GA+BA6T,GAUAC,GAkBAC,GA8EAzP,GAiHA0P,GACAC,GACAC,GACAC,GACAC,GA2GAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA5O,GACAC,GACA4O,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAaAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA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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 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 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 SHOW_TOOLTIP: SHOW_TOOLTIP,\n HIDE_TOOLTIP: HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n ABOVE: ABOVE,\n BELOW: BELOW\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 });\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 if (!defined(tooltipOptions.color) && new Color(style.backgroundColor).percBrightness() > 180) {\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 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 if (axis.options.crosshair && axis.options.crosshair.visible) {\n var currentCrosshair = new Crosshair(this$1.chartService, axis, axis.options.crosshair);\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({}, this.options, options);\n },\n updateRanges: function (delta) {\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);\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 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 var brightnessValue = new Color(this.options.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\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 var brightnessValue = new Color(series.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\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 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 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([\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 if (!this._zooming) {\n this._zooming = true;\n }\n var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta);\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 _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);\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);\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 (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 = $.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._activеChartInstance) {\n chart._updateSeriesOpacity(null, true);\n chart._applySeriesOpacity(chart._activеChartInstance.children, null, true);\n chart._activеChartInstance = 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}));"]}