{"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","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","idx","defined","zIndex","hasGradientOverlay","overlay","gradient","forEach","callback","forEachReverse","areNumbers","hasValue","wrapData","seriesItem","isArray","paneID","ID","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","array","axisGroupBox","axes","axisBox","contentBox","wrap","clone","Box","paneAnchor","pane","anchor","isTransparent","color","setValue","fieldName","target","parentObj","indexOf","split","shift","appendIfNotNull","element","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","name","min","range","createDiv","className","closestHandle","hasClasses","stopPropagation","updateAxisOptions$1","vertical","yAxis","xAxis","tooltipAlignment","angle","horizontal","radians","dataviz","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","datavizConstants","MAX_VALUE","MIN_VALUE","VALUE","WHITE","CIRCLE","X","Y","BLACK","ARC","ChartElement","alignPathToPixel","setDefaultOptions","eventElement","getTemplate","TextBox","ShapeElement","getSpacing","CurveProcessor","append","styleValue","BoxElement","DateCategoryAxis","elementStyles","bindEvents","services","unbindEvents","limitValue","support","drawing","Path","Animation","AnimationFactory","Group","Color","geometry","transform","ChartAxis","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","ZERO","INTERPOLATE","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","SERIES_CLICK","SERIES_HOVER","PLOT_AREA_CLICK","PLOT_AREA_HOVER","DRAG","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT","SELECT_END","RENDER","SHOW_TOOLTIP","HIDE_TOOLTIP","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","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","MOUSEMOVE_DELAY","Chart","_axis","point","getCategory","getValue","slot","from","to","limit","valueRange","visual","chartsVisual","chartContainer","plotArea","_plotArea","backgroundVisual","_bgVisual","sumOrNull","avg","first","_valueFields","_otherFields","_nullValue","_undefinedValue","register","otherFields","this$1","_makeValue","undefined","canonicalFields","pointIx","item","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","ref","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","stack","otherStack","isStacked100","group","plotRange","startValue","positive","prevValue","isStackedBar","otherValue","axisCrossingValue","isStacked","STRING","categoryAxisCrossingValue","convertableToNumber","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","_bindPoint","outOfRangePoint","bindCache","_bindCache","formatPointValue","format","auto","click","trigger","eventArgs","hover","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","fromPoints","closed","close","aliasFor","coords","parent","getNearestPoint","calculateStepPoints","stepPoint","justified","previousPoint","curveProcessor","segments","curve","process","apply","renderSegments","lastSegment","sortedPoints","pointCount","_segments","sortPoints","seriesMissingValues","createSegment","_addSegment","children","unshift","segment","missingValues","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","_outOfRangeMinPoint","_previousSegmentPoint","_createGapStackPoint","segmentIx","seriesIdx","update","chartAxisRanges","chartRange","reset","query","content","textBox","textOptions","labelBox","top","bottom","alignToClipBox","start","parentBox","createLabel","customVisual","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","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","shrinkToFit","initFields","initSeries","legend","crosshairs","createPanes","createCrosshairs","setTitle","currentPane","panes","paneOptions","panesLength","paneIndex","currentCrosshair","removeCrosshairs","splice","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","reflowAxes","reflowCharts","redraw","panesArray","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","_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","categoryField","aggregateSeries","filterSeries","minCategory","srcCategories","totalRangeIndices","outOfRangePoints","ceil","_outOfRangeMaxPoint","_seriesMax","aggregatorSeries","srcData","outOfRangeMinIdx","outOfRangeMaxIdx","getFn","outOfRangeMinCategory","outOfRangeMaxCategory","aggregator","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","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","leave","_unsetActivePoint","renderChildren","createItems","userAlign","getService","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","_registry","registry","match","observer","_dateAxis","initOptions","createElements","_index","selection","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","wrapper","direction","leftMask","rightMask","borderLeftWidth","borderRightWidth","_mousewheelHandler","mousewheel","_mousewheel","obj","_domEvents","DomEventsBuilder","_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","edge","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","_initSurface","_initHandlers","bindCategories","FontLoader","preloadFonts","_destroyed","_redraw","_attachEvents","_setElementClass","firstChild","seriesCopies","applyDefaults","applySeriesColors","getSize","resize","force","_resize","_noTransitionsRedraw","_model","findAxisByName","findPaneByName","findPaneByIndex","filter","seriesName","categoryName","togglePointsHighlight","_highlight","_sharedTooltip","_tooltip","hideTooltip","surface","_surfaceWrap","chartArea","elementSize","renderAs","Surface","model","_getModel","_destroyView","traverse","draw","play","_createTooltip","_setupSelection","_createPannable","_createZoomSelection","_createMousewheelZoom","_navState","_cancelDomEvents","exportVisual","exportOptions","currentOptions","pannable","_pannable","zoomable","_zoomSelection","_toggleDomDrag","domEvents","toggleDrag","requiresHandlers","_mousewheelZoom","_toggleDomZoom","toggleZoom","_createSharedTooltip","seriesColor","colors","_createPlotArea","RootElement","_modelOptions","DEFAULT_WIDTH","DEFAULT_HEIGHT","skipSeries","_hasSelection","_selections","selections","select","addDuration","weekStartDay","_selectStart","_select","_selectEnd","_clickHandler","_click","_surfaceMouseenterHandler","_mouseover","_surfaceMouseleaveHandler","_mouseout","_mousemove","throttle","removeObserver","eventNames","isDefaultPrevented","_toDocumentCoordinates","obj$1","_shouldAttachMouseMove","cancel","_stopDragEvent","_gestureDistance","suspendTracking","_zooming","resumeTracking","previousGestureDistance","scaleDelta","mousewheelZoom","_drawingChartElement","_startNavigation","_suppressHover","ranges$1","translateRange","_endNavigation","prevented","totalDelta","scaleRange","chartEvent","_getChartElement","eventTarget","closest","coordinates","eventCoordinates","_elementPadding","_padding","clientX","clientY","drawingElement","_activePoint","_propagateClick","_startHover","handlingTap","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","_trackSharedTooltip","pointArgs","hoverArgs","_tooltipCategoryIx","hideElements","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","clearInterval","autoBind","bindCategoryAxisFromSeries","onAxis","dataLength","dataIx","dataRow","uniqueCategories","_isBindable","transitionsState","updateMouseMoveHandler","applyOptions","setOptions","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","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","unbind","_dataChangeHandler","_hasData","fetch","off","_destroyCrosshairTooltips","findSeries","findSeriesByName","_createSeries","findSeriesByIndex","_seriesOptions","on","_mouseleave","relatedTarget","themes","themeName","autoTheme","_initChart","_createChart","_isRtl","_onInit","_initTooltip","tooltips","_crosshairTooltips","_getCrosshairTooltip","_showTooltip","_hideTooltip","_onRender","_copyMembers","names","_events","_tooltipleave","_onLegendItemClick","_legendItemClick","save","_bindData","groupedSeries","view","grouped","seriesVisibility","applyByGroup","applyByIndex","seriesData","categoriesData","_bindCategoryAxis","isRtl","css","ExportMixin","PDFMixin","plugin","action","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","_pane","_options","_filterPoints","_clearFields","toggleVisibility","hasFilter","_filterData"],"mappings":"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d,GAC9CoK,GAAOrT,KAAKiB,QAAQ2lC,OAAOhI,MAAOrY,EAAM48B,gBAG5CjiC,GAAQ,QACRC,GAAQ,QACRC,GAAO,OACPC,GAAM,MACNC,GAAM,MACNC,GAAY,WACZC,GAAgB,UAChBC,GAAK,KACThD,GAAgBrf,QAAQikB,SAASvF,IAC7BxH,GACAK,GACAI,GACAiB,GACA3B,GACAwB,GACAnB,GACAM,GACAP,GACAsB,GACAxB,GACAuB,GACAJ,GACAD,GACAS,GACApB,GACAU,GACAS,KAEJwG,GAAgBrf,QAAQikB,SAASjE,IAC7BzH,GACAC,GACApB,KAEJiI,GAAgBrf,QAAQikB,SAAS5D,IAAcxI,KAC/CwH,GAAgBrf,QAAQikB,SAASxD,IAAgBjJ,KACjD6H,GAAgBrf,QAAQikB,SAASpC,IAAiBpK,KAClD4H,GAAgBrf,QAAQikB,SAAShD,IAC7BnJ,GACAC,GACAC,KAEJqH,GAAgBrf,QAAQikB,SAASvC,IAC7BzJ,GACAC,GACAC,KAEJ1Q,GAAazH,QAAQikB,UACjB/M,GACAK,GACAI,GACAiB,GACA3B,GACAwB,KACAxF,KACAkH,GACA2H,GACAK,GACAhM,GACAC,KAEJ3O,GAAazH,QAAQikB,UACjB3L,GACAD,GACAD,GACAS,KAEAmJ,GACAK,KAEAlI,GACA2H,GACAK,KAEJ1a,GAAazH,QAAQikB,UACjBnL,GACApB,KACAzE,KACAkH,GACA2H,GACAK,GACAC,KAEJ3a,GAAazH,QAAQikB,UACjBnM,GACAC,GACAC,KAEA5E,GACAC,KACAyO,KACJra,GAAazH,QAAQikB,UACjBhM,GACAC,GACAC,KACAlF,KAAS6O,KACbra,GAAazH,QAAQikB,UAAUxM,KAAUxE,KACrCkH,GACA2H,GACA,kBACA,YAEJtE,GAAkBxd,QAAQikB,UACtB/M,GACAK,GACAI,GACAiB,GACA3B,GACAwB,GACAK,GACApB,KAEAzW,MAAOghB,GACPjY,MAAO+X,GACPqL,SAAUrL,GACVipC,SAAU9oC,GACV+oC,UAAWhpC,KAEfzE,GAAkBxd,QAAQikB,UACtB3L,GACAD,GACAD,GACAS,KA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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 grep = dataviz.grep;\n var DateCategoryAxis = dataviz.DateCategoryAxis;\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 limitValue = dataviz.limitValue;\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 var ChartPane = kendo.Class.extend({\n init: function (pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\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 value[fieldName] = getField(srcFieldName, object);\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] || fieldName);\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 SERIES_CLICK = 'seriesClick';\n var SERIES_HOVER = 'seriesHover';\n var PLOT_AREA_CLICK = 'plotAreaClick';\n var PLOT_AREA_HOVER = 'plotAreaHover';\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 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 SERIES_CLICK: SERIES_CLICK,\n SERIES_HOVER: SERIES_HOVER,\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 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 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 categories = this.categoryAxis.options.categories || [];\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 = categories[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 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 labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate({\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 } 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));\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 });\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 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 createVisual: 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.box;\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) {\n ChartElement.fn.init.call(this, options);\n this.textBox = new TextBox(content, this.options);\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 labelTemplate = getTemplate(labels);\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate({\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 } else {\n labelText = this.formatValue(labels.format);\n }\n this.label = new BarLabel(labelText, deepExtend({ vertical: options.vertical }, labels));\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 });\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.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 },\n hide: function () {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\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 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 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 },\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 });\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 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 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.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 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.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 axes = ref.axes;\n var panes = ref.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 && 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 && 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 });\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 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 labelText;\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n });\n } else {\n labelText = this.formatValue(options.format);\n }\n return new BarLabel(labelText, deepExtend({ vertical: this.options.vertical }, options));\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 series = this.options.series;\n var categories = this.categoryAxis.options.categories || [];\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: categories[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 function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\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 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 if (isNumber(categoryAxis.options.min) || isNumber(categoryAxis.options.max)) {\n currentSeries = this$1.filterSeries(currentSeries, categoryAxis);\n }\n processedSeries.push(currentSeries);\n }\n this.srcSeries = series;\n this.series = processedSeries;\n },\n filterSeries: function (series, categoryAxis) {\n var range = categoryAxis.totalRangeIndices();\n var justified = categoryAxis.options.justified;\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n range.min = isNumber(categoryAxis.options.min) ? Math.floor(range.min) : 0;\n if (isNumber(categoryAxis.options.max)) {\n range.max = justified ? Math.floor(range.max) + 1 : Math.ceil(range.max);\n } else {\n range.max = series.data.length;\n }\n var currentSeries = deepExtend({}, series);\n if (outOfRangePoints) {\n var minCategory = range.min - 1;\n var srcCategories = categoryAxis.options.srcCategories || [];\n if (minCategory >= 0 && minCategory < currentSeries.data.length) {\n currentSeries._outOfRangeMinPoint = {\n item: currentSeries.data[minCategory],\n category: srcCategories[minCategory],\n categoryIx: -1\n };\n }\n if (range.max < currentSeries.data.length) {\n currentSeries._outOfRangeMaxPoint = {\n item: currentSeries.data[range.max],\n category: srcCategories[range.max],\n categoryIx: range.max - range.min\n };\n }\n }\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, currentSeries.data.length);\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max);\n return currentSeries;\n },\n aggregateSeries: function (series, categoryAxis) {\n var this$1 = this;\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n var ref = categoryAxis.options;\n var categories = ref.categories;\n var srcCategories = ref.srcCategories;\n if (srcCategories === void 0) {\n srcCategories = categories;\n }\n var dataItems = ref.dataItems;\n if (dataItems === void 0) {\n dataItems = [];\n }\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n var aggregatorSeries = deepExtend({}, series);\n var result = deepExtend({}, series);\n var srcData = series.data;\n var srcPoints = [];\n var outOfRangeMinIdx = MIN_VALUE;\n var outOfRangeMaxIdx = MAX_VALUE;\n var getFn = getField;\n var outOfRangeMinCategory, outOfRangeMaxCategory;\n if (dateAxis) {\n getFn = getDateField;\n }\n for (var i = 0; i < srcData.length; i++) {\n var category = void 0;\n if (series.categoryField) {\n category = getFn(series.categoryField, srcData[i], this$1.chartService.intl);\n } else {\n category = srcCategories[i];\n }\n if (defined(category)) {\n var categoryIx = categoryAxis.categoryIndex(category);\n if (0 <= categoryIx && categoryIx < categories.length) {\n srcPoints[categoryIx] = srcPoints[categoryIx] || [];\n srcPoints[categoryIx].push(i);\n } else if (outOfRangePoints) {\n if (categoryIx < 0) {\n if (categoryIx === outOfRangeMinIdx) {\n outOfRangeMinCategory.points.push(i);\n } else if (categoryIx > outOfRangeMinIdx) {\n outOfRangeMinIdx = categoryIx;\n outOfRangeMinCategory = {\n category: category,\n points: [i]\n };\n }\n } else if (categoryIx >= categories.length) {\n if (categoryIx === outOfRangeMaxIdx) {\n outOfRangeMaxCategory.points.push(i);\n } else if (categoryIx < outOfRangeMaxIdx) {\n outOfRangeMaxIdx = categoryIx;\n outOfRangeMaxCategory = {\n category: category,\n points: [i]\n };\n }\n }\n }\n }\n }\n var aggregator = new SeriesAggregator(aggregatorSeries, SeriesBinder.current, DefaultAggregates.current);\n var data = result.data = [];\n for (var i$1 = 0; i$1 < categories.length; i$1++) {\n data[i$1] = aggregator.aggregatePoints(srcPoints[i$1], categories[i$1]);\n if (srcPoints[i$1]) {\n dataItems[i$1] = data[i$1];\n }\n }\n if (outOfRangeMinCategory && data.length) {\n result._outOfRangeMinPoint = {\n item: aggregator.aggregatePoints(outOfRangeMinCategory.points, outOfRangeMinCategory.category),\n categoryIx: outOfRangeMinIdx,\n category: outOfRangeMinCategory.category\n };\n }\n if (outOfRangeMaxCategory && data.length) {\n result._outOfRangeMaxPoint = {\n item: aggregator.aggregatePoints(outOfRangeMaxCategory.points, outOfRangeMaxCategory.category),\n categoryIx: outOfRangeMaxIdx,\n category: outOfRangeMaxCategory.category\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 while (categoriesToAdd--) {\n categories.push('');\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 DateCategoryAxis(axisOptions, this$1.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this$1.chartService);\n }\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: { categories: [] },\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 if (zoomPane && zoomPane.clipBox()) {\n var clipBox = zoomPane.clipBox().clone();\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)) {\n e.preventDefault();\n }\n },\n hover: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n e.preventDefault();\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n return true;\n },\n leave: function (widget) {\n widget._unsetActivePoint();\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 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 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 this._mousewheelHandler = this.options.mousewheel !== false ? this._mousewheel.bind(this) : stopPropagation;\n var obj;\n bindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this._domEvents = services.DomEventsBuilder.create(this.wrapper, {\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 var obj;\n unbindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this.chartElement.removeChild(this.wrapper);\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 axisOptions = ref.categoryAxis.options;\n var range = state.range;\n var target = state.moveTarget;\n var reverse = axisOptions.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 / (axisOptions.categories.length - 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 categories = this.categoryAxis.options.categories;\n var value = index;\n if (this._dateAxis) {\n if (index > categories.length - 1) {\n value = this.options.max;\n } else {\n value = categories[Math.ceil(index)];\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 function stopPropagation(e) {\n e.stopPropagation();\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 if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n });\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 }));\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 });\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 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 });\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 });\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 if (labelTemplate) {\n text = labelTemplate({\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n });\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));\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 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._initSurface();\n this._initHandlers();\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\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 return {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight\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 var axes = this._plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n return new ChartAxis(axes[idx]);\n }\n }\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 if (surface) {\n surface.destroy();\n }\n this.surface = drawing.Surface.create(wrap, { type: this.options.renderAs });\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._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 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 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 _toggleDomDrag: function () {\n if (!this.domEvents || !this.domEvents.toggleDrag) {\n return;\n }\n var pannable = this.options.pannable;\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n if (!pannable && (zoomable === false || selection === false) && !this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ])) {\n this.domEvents.toggleDrag(false);\n } else {\n this.domEvents.toggleDrag(true);\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 _toggleDomZoom: function () {\n if (!this.domEvents || !this.domEvents.toggleZoom) {\n return;\n }\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel;\n if ((zoomable === false || mousewheel === false) && !this.requiresHandlers([\n ZOOM_START,\n ZOOM,\n ZOOM_END\n ])) {\n this.domEvents.toggleZoom(false);\n } else {\n this.domEvents.toggleZoom(true);\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 ref = this;\n var options = ref.options;\n var element = ref.element;\n var size = dataviz.elementSize(element);\n this._size = null;\n return deepExtend({\n width: Math.floor(size.width) || datavizConstants.DEFAULT_WIDTH,\n height: Math.floor(size.height) || datavizConstants.DEFAULT_HEIGHT,\n transitions: options.transitions\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 _hasSelection: function () {\n return this._selections && this._selections.length;\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 min = 0;\n var max = options.categories.length - 1;\n if (axis instanceof DateCategoryAxis) {\n min = options.categories[min];\n max = options.categories[max];\n }\n if (!options.justified) {\n if (axis instanceof DateCategoryAxis) {\n max = dataviz.addDuration(max, 1, options.baseUnit, options.weekStartDay);\n } else {\n max++;\n }\n }\n var selection = new Selection(this$1, axis, deepExtend({\n min: min,\n max: 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._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 ref = this;\n var element = ref.element;\n var surface = ref.surface;\n surface.bind('mouseenter', this._surfaceMouseenterHandler);\n surface.bind('mouseleave', this._surfaceMouseleaveHandler);\n var obj;\n bindEvents(element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, 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._toggleDomDrag();\n this._toggleDomZoom();\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._stopDragEvent(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this.surface.suspendTracking();\n }\n },\n _gestureend: function (e) {\n if (this._zooming && !this._stopDragEvent(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._stopDragEvent(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._stopDragEvent(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 }\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._stopDragEvent(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._stopDragEvent(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 } 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 _stopDragEvent: function () {\n return this._hasSelection();\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._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 if (this._activePoint === element) {\n this._propagateClick(element, e);\n } else {\n if (!this._startHover(drawingElement, e)) {\n this._unsetActivePoint();\n }\n this._propagateClick(element, e);\n }\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 var chartElement = this._drawingChartElement(element, e);\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n if (this._suppressHover || !highlight || highlight.isHighlighted(chartElement) || this._sharedTooltip()) {\n return false;\n }\n var point = this._drawingChartElement(element, e, function (element) {\n return element.hover && !(element instanceof PlotAreaBase);\n });\n if (point && !point.hover(this, e)) {\n this._activePoint = point;\n var tooltipOptions = deepExtend({}, tooltipOptions, point.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(point);\n }\n highlight.show(point);\n return point;\n }\n },\n _mouseover: function (e) {\n var point = this._startHover(e.element, e.originalEvent);\n if (point && point.tooltipTracking) {\n this._mouseMoveTrackHandler = 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 seriesPoint.hover(this, e);\n this._activePoint = seriesPoint;\n var tooltipOptions = deepExtend({}, options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(seriesPoint);\n }\n highlight.show(seriesPoint);\n }\n }\n } else {\n var obj;\n unbindEvents(document, (obj = {}, obj[MOUSEMOVE] = this._mouseMoveTrackHandler, obj));\n this._unsetActivePoint();\n }\n },\n _mousemove: function (e) {\n var coords = this._eventCoordinates(e);\n this._trackCrosshairs(coords);\n if (this._plotArea.hover) {\n this._plotArea.hover(this, e);\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) {\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.box.containsPoint(coords)) {\n var index = categoryAxis.pointCategoryIndex(coords);\n if (index !== this._tooltipCategoryIx) {\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 } else {\n tooltip.hide();\n }\n this._tooltipCategoryIx = index;\n }\n }\n },\n hideElements: function () {\n var ref = this;\n var plotArea = ref._plotArea;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n this._mousemove.cancel();\n plotArea.hideCrosshairs();\n highlight.hide();\n tooltip.hide();\n delete this._tooltipCategoryIx;\n },\n _unsetActivePoint: function () {\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n this._activePoint = null;\n if (tooltip) {\n tooltip.hide();\n }\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 = {};\n var items = [];\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 if (s.categoryField && onAxis && 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[category]) {\n items.push([\n category,\n dataRow\n ]);\n if (!dateAxis) {\n uniqueCategories[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 }\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([PLOT_AREA_HOVER]);\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 },\n setOptions: function (options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n this._toggleDomDrag();\n this._toggleDomZoom();\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));\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n var obj$1;\n unbindEvents(document, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mouseMoveTrackHandler, obj$1));\n this._destroyView();\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n }\n this._clearRedrawTimeout();\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 }\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 function clearMissingValues(originalOptions, options) {\n for (var field in options) {\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 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 anyHasZIndex: anyHasZIndex,\n appendIfNotNull: areNumbers,\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 });\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 SERIES_CLICK = constants.SERIES_CLICK;\n var SERIES_HOVER = constants.SERIES_HOVER;\n var PLOT_AREA_CLICK = constants.PLOT_AREA_CLICK;\n var PLOT_AREA_HOVER = constants.PLOT_AREA_HOVER;\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 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 AXIS_LABEL_CLICK,\n LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER,\n PLOT_AREA_CLICK,\n PLOT_AREA_HOVER,\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 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._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 _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 === 'sass' || themeName === 'default-v2' || themeName === 'bootstrap-v4') {\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 },\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 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 this._redraw();\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 'exportVisual',\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 },\n applyByGroup: function (series, e) {\n if (e && e.action) {\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) {\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 (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 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}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}