{"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","axisGroupBox","axisBox","contentBox","wrap","clone","Box","paneAnchor","pane","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","vertical","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","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","seriesIx","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","segments","curve","process","apply","renderSegments","lastSegment","sortedPoints","pointCount","_segments","sortPoints","createSegment","_addSegment","children","unshift","segment","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","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","lineBox","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","setTitle","currentPane","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","createItems","userAlign","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","_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","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","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","_resize","_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","_setupSelection","_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","_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","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","activePoint","hoveredPoint","_activePoint","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","overPlotArea","_trackCrosshairs","pointArgs","hoverArgs","_tooltipCategoryIx","_sharedHighlight","hideElements","_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","CHANGE","DATABOUND","LEAVE","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","themes","themeName","SASS_THEMES","autoTheme","_initChart","_createChart","_isRtl","_onInit","_initTooltip","tooltips","_crosshairTooltips","_getCrosshairTooltip","_showTooltip","_hideTooltip","_onRender","_copyMembers","names","_events","_tooltipleave","_onLegendItemClick","_legendItemClick","save","_bindData","groupedSeries","view","grouped","seriesVisibility","read","applyByGroup","applyByIndex","seriesData","categoriesData","_bindCategoryAxis","isRtl","css","ExportMixin","PDFMixin","plugin","action","persistSeriesVisibility","saveState","mobileScrollerSelector","useWithBlock","paramName","attr","_mobileScroller","_clearShowTimeout","remove","sharedTemplate","_offset","_ensureElement","stop","animate","showTimeout","_measure","zoomLevel","viewport","scrollTop","pageYOffset","documentElement","scrollLeft","pageXOffset","movable","_fit","toggleClass","_sharedContent","_pointContent","html","_hideElement","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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ACA5F,GACA6F,GACA1L,GACAwF,GACAmG,GACA/O,GACAlC,GACA8C,GACAoO,GACAlF,GACAxE,GACA2J,GACAC,GACAxQ,GACAE,GACAC,GACAC,GACApC,GACA4Q,GACA6B,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA3N,GACAgB,GACA4M,GACApJ,GACAqJ,GACAjH,GACAkH,GACAhJ,GACAiJ,GACA9H,GACA+H,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA3Q,GACA4Q,GACApT,GA+BAqT,GAUAC,GAkBAC,GA8EAjP,GAiHAkP,GACAC,GACAC,GACAC,GACAC,GA2GAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACApO,GACAC,GACAoO,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,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,GAmFAC,GACAC,GAqGAC,GAMA5X,GA2CA6X,GAmdAC,GA6BAC,GAgBAC,GA8QAC,GAmEAC,GAsCAC,GAMAC,GAuBAC,GAiEAC,GA4BAC,GAuBAC,GA8EAC,GAgGAC,GASAC,GAgBAC,GAqGAC,GAwBAC,GAoGAC,GACAC,GA8OAC,GAiCAC,GAsBAC,GA6IAC,GAiMAC,GA4GAC,GAqOAC,GA2EAC,GA2FAC,GAUAC,GAiRAC,GAgEAC,GA2GAC,GAEAC,GAiHAC,GAuGAC,GAmDAC,GAmFAC,GAmGAC,GAmEAC,GA4JA/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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 (!text) {\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 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: 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 });\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 });\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.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 defaults = { title: { color: (this.options.title || {}).color } };\n var panes = [];\n var paneOptions = this.options.panes || [];\n var panesLength = Math.max(paneOptions.length, 1);\n function setTitle(options, defaults) {\n if (isString(options.title)) {\n options.title = { text: options.title };\n }\n options.title = deepExtend({}, defaults.title, options.title);\n }\n for (var i = 0; i < panesLength; i++) {\n var options = paneOptions[i] || {};\n setTitle(options, defaults);\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 axisGroupBox(axes) {\n var length = axes.length;\n var box;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n var axisBox = axes[i].contentBox();\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 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) {\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);\n this$1._points.push(point);\n }\n }\n },\n togglePointHighlight: function (point, show) {\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);\n }\n } else {\n point.toggleHighlight(show);\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)) {\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)) {\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 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 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.createContainer();\n this.createItems();\n },\n createContainer: 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 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.container.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 },\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 this.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 });\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 if (this.options.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 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 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 });\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 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 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 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 if (linePoints.length === currentSeries.data.length) {\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 if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\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.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.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 return new Point(clientX - offset.left - padding.left, clientY - offset.top - padding.top);\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 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 if (point && activePoint !== point && point.hover) {\n this._activePoint = point;\n if (!this._sharedTooltip() && !point.hover(this, e)) {\n var tooltipOptions = deepExtend({}, this.options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n this._tooltip.show(point);\n }\n this._highlight.show(point);\n }\n }\n return point;\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 () {\n var plotArea = this._plotArea;\n this._mousemove.cancel();\n plotArea.hideCrosshairs();\n this._unsetActivePoint();\n },\n _unsetActivePoint: function () {\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) {\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) {\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 highlight.show(items);\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 _destroyView: function () {\n var ref = this;\n var model = ref._model;\n var selections = ref._selections;\n if (model) {\n model.destroy();\n this._model = null;\n }\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n this._unsetActivePoint();\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 CHANGE = 'change';\n var DATABOUND = 'dataBound';\n var LEAVE = 'leave';\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();\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(e);\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 ($.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('
' + '
', {\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 },\n destroy: function () {\n this._clearShowTimeout();\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 },\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 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.html(content);\n this._clearShowTimeout();\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n },\n hide: function () {\n var tooltip = this;\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\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}));"]}