{"version":3,"sources":["../node_modules/react-chartjs-2/es/index.js","../node_modules/lodash/isEqual.js","../node_modules/lodash/keyBy.js","../node_modules/lodash/_createAggregator.js","../node_modules/lodash/_arrayAggregator.js","../node_modules/lodash/_baseAggregator.js","../node_modules/react-bootstrap/es/Col.js","../node_modules/react-bootstrap/es/Row.js","../node_modules/chart.js/dist/Chart.js","../node_modules/process/browser.js"],"names":["process","__webpack_require__","d","__webpack_exports__","Doughnut","Pie","Line","Bar","HorizontalBar","Radar","react__WEBPACK_IMPORTED_MODULE_0__","react__WEBPACK_IMPORTED_MODULE_0___default","n","prop_types__WEBPACK_IMPORTED_MODULE_1__","prop_types__WEBPACK_IMPORTED_MODULE_1___default","chart_js__WEBPACK_IMPORTED_MODULE_2__","chart_js__WEBPACK_IMPORTED_MODULE_2___default","lodash_isEqual__WEBPACK_IMPORTED_MODULE_3__","lodash_isEqual__WEBPACK_IMPORTED_MODULE_3___default","lodash_keyBy__WEBPACK_IMPORTED_MODULE_4__","lodash_keyBy__WEBPACK_IMPORTED_MODULE_4___default","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","_objectWithoutProperties","obj","keys","indexOf","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","NODE_ENV","PUBLIC_URL","ChartComponent","_React$Component","_temp","_this","this","_len","args","Array","_key","apply","concat","handleOnClick","event","chartInstance","_this$props","props","getDatasetAtEvent","getElementAtEvent","getElementsAtEvent","onElementsClick","ref","element","componentWillMount","undefined","componentDidMount","renderChart","componentDidUpdate","redraw","destroyChart","updateChart","shouldComponentUpdate","nextProps","_props","type","options","plugins","legend","height","width","nextData","transformDataProp","shadowDataProp","componentWillUnmount","data","memoizeDataProps","datasets","map","set","saveCurrentDatasets","checkDatasets","isDev","usingCustomKeyProvider","datasetKeyProvider","getLabelAsKey","multipleDatasets","shouldWarn","forEach","dataset","label","console","error","getCurrentDatasets","config","_this2","_this3","a","helpers","configMerge","currentDatasets","nextDatasets","currentDatasetsIndexed","next","current","splice","point","pid","otherProps","rest","update","_props2","node","defaultProps","values","destroy","render","_props3","id","createElement","onClick","Component","propTypes","oneOfType","object","func","isRequired","number","arrayOf","bool","propName","componentName","controllers","Error","display","position","_React$Component2","_this5","_ref","_React$Component3","_this7","_ref2","_React$Component4","_this9","_ref3","_React$Component5","_this11","_ref4","_React$Component6","_this13","_ref5","_React$Component7","_this15","_ref6","_React$Component8","Polar","_this17","_ref7","_React$Component9","Bubble","_this19","_ref8","_React$Component10","Scatter","_this21","_ref9","defaults","baseIsEqual","module","exports","other","baseAssignValue","keyBy","createAggregator","result","arrayAggregator","baseAggregator","baseIteratee","isArray","setter","initializer","collection","iteratee","accumulator","array","index","baseEach","_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__","_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__","classnames__WEBPACK_IMPORTED_MODULE_2__","classnames__WEBPACK_IMPORTED_MODULE_2___default","react__WEBPACK_IMPORTED_MODULE_3__","react__WEBPACK_IMPORTED_MODULE_3___default","_ThemeProvider__WEBPACK_IMPORTED_MODULE_4__","DEVICE_SIZES","Col","forwardRef","bsPrefix","className","_ref$as","as","prefix","spans","classes","brkPoint","span","offset","order","propValue","_propValue$span","infix","push","displayName","_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_2__","classnames__WEBPACK_IMPORTED_MODULE_3__","classnames__WEBPACK_IMPORTED_MODULE_3___default","react__WEBPACK_IMPORTED_MODULE_4__","react__WEBPACK_IMPORTED_MODULE_4___default","_ThemeProvider__WEBPACK_IMPORTED_MODULE_5__","Row","noGutters","_this$props$as","moment","conversions","rgb2hsl","rgb2hsv","rgb2hwb","rgb2cmyk","rgb2keyword","rgb2xyz","rgb2lab","rgb2lch","lab2lch","hsl2rgb","hsl2hsv","hsl","h","s","l","hsl2hwb","hsl2cmyk","hsl2keyword","hsv2rgb","hsv2hsl","hsv","sl","v","hsv2hwb","hsv2cmyk","hsv2keyword","hwb2rgb","hwb2hsl","hwb2hsv","hwb2cmyk","hwb2keyword","cmyk2rgb","cmyk2hsl","cmyk2hsv","cmyk2hwb","cmyk2keyword","keyword2rgb","keyword2hsl","keyword2hsv","keyword2hwb","keyword2cmyk","keyword2lab","keyword2xyz","xyz2rgb","xyz2lab","xyz2lch","lab2xyz","lab2rgb","lch2lab","lch2xyz","lch2rgb","rgb","r","g","b","min","Math","max","delta","w","k","reverseKeywords","JSON","stringify","pow","x","y","z","xyz","t1","t2","t3","val","hi","floor","f","p","q","t","hwb","wh","bl","ratio","cmyk","c","m","lab","y2","hr","atan2","PI","sqrt","lch","cos","sin","keyword","cssKeywords","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","convert","Converter","arg","slice","pair","exec","from","to","round","convs","routeSpace","space","getValues","setValues","vals","fspace","colorConvert","colorName","colorString","getRgba","getHsla","getRgb","string","rgba","getHsl","hsla","getHwb","getAlpha","hexString","hexDouble","rgbString","alpha","rgbaString","percentString","percentaString","hslString","hslaString","hwbString","reverseNames","match","hexAlpha","parseInt","parseFloat","scale","isNaN","num","str","toString","toUpperCase","name","Color","valid","lightness","whiteness","isValid","setSpace","rgbArray","hslArray","hsvArray","hwbArray","cmykArray","rgbaArray","hslaArray","setChannel","hue","saturation","saturationv","blackness","rgbNumber","luminosity","lum","chan","contrast","color2","lum1","lum2","level","contrastRatio","dark","light","negate","lighten","darken","saturate","desaturate","whiten","blacken","greyscale","clearer","opaquer","rotate","degrees","mix","mixinColor","weight","w1","w2","toJSON","clone","prop","spaces","maxes","charAt","capped","chans","sname","svalues","window","chartjsColor","noop","uid","isNullOrUndef","substr","isObject","isFinite","_isFinite","_x","Number","valueOrDefault","defaultValue","valueAtIndexOrDefault","callback","fn","thisArg","each","loopable","reverse","len","arrayEquals","a0","a1","ilen","v0","v1","klen","_merger","tval","sval","merge","_mergerIf","mergeIf","sources","merger","extend","setFn","inherits","extensions","me","ChartElement","Surrogate","__super__","helpers_core","callCallback","item","fromIndex","getValueOrDefault","getValueAtIndexOrDefault","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","asin","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","helpers_easing","easingEffects","RAD_PER_DEG","DOUBLE_PI","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","exports$1","clear","chart","ctx","clearRect","roundedRect","radius","left","top","right","bottom","moveTo","arc","closePath","rect","drawPoint","style","rotation","xOffset","yOffset","size","cornerRadius","rad","beginPath","lineTo","SQRT1_2","fill","stroke","drawImage","_isPointInArea","area","clipArea","save","clip","unclipArea","restore","previous","flip","stepped","steppedLine","midpoint","tension","bezierCurveTo","controlPointPreviousX","controlPointNextX","controlPointPreviousY","controlPointNextY","helpers_canvas","drawRoundedRectangle","_set","scope","defaultColor","defaultFontColor","defaultFontFamily","defaultFontSize","defaultFontStyle","defaultLineHeight","showLines","core_defaults","helpers_options","toLineHeight","matches","toPadding","_parseFont","globalDefaults","global","fontSize","font","family","fontFamily","lineHeight","fontStyle","toFontString","resolve","inputs","context","helpers$1","easing","canvas","Element","configuration","initialize","hidden","pivot","_view","_model","_start","transition","ease","model","start","view","actual","origin","c0","c1","interpolate","tooltipPosition","hasValue","isNumber","core_element","exports$2","currentStep","numSteps","onAnimationProgress","onAnimationComplete","core_animation","defineProperty","get","animation","duration","onProgress","onComplete","core_animations","animations","request","addAnimation","lazy","startTime","Date","now","animating","requestAnimationFrame","cancelAnimation","findIndex","requestAnimFrame","startDigest","advance","nextStep","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","DatasetController","datasetIndex","datasetElementType","dataElementType","linkScales","addElements","updateIndex","meta","getMeta","getDataset","xAxisID","scales","xAxes","yAxisID","yAxes","getDatasetMeta","getScaleForId","scaleID","_getValueScaleId","_getIndexScaleId","_getValueScale","_getIndexScale","reset","_data","createMetaDataset","_chart","_datasetIndex","createMetaData","_index","metaData","addElementAndReset","updateElement","buildOrUpdateElements","isExtensible","method","base","res","resyncElements","easingValue","elements","draw","removeHoverStyle","$previousStyle","setHoverStyle","custom","getHoverColor","backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","numMeta","numData","insertElements","count","onDataPush","onDataPop","pop","onDataShift","shift","onDataSplice","onDataUnshift","core_datasetController","borderAlign","element_arc","inLabelRange","mouseX","vm","hoverRadius","inRange","chartX","chartY","pointRelativePosition","getAngleFromPoint","angle","distance","startAngle","endAngle","betweenAngles","withinRadius","innerRadius","outerRadius","getCenterPoint","halfAngle","halfRadius","getArea","centreAngle","rangeFromCentre","angleMargin","sA","eA","pixelMargin","fillStyle","lineWidth","lineJoin","strokeStyle","valueOrDefault$1","line","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","capBezierPoints","element_line","currentVM","spanGaps","points","_children","globalOptionLineElements","lastDrawnIndex","_loop","lineCap","setLineDash","lineDashOffset","previousItem","skip","valueOrDefault$2","defaultColor$1","xRange","abs","hitRadius","pointStyle","element_point","mouseY","inXRange","inYRange","padding","chartArea","defaultColor$2","isVertical","getBarBounds","x1","x2","y1","half","swap","orig","v2","parseBorderWidth","maxW","maxH","edge","borderSkipped","horizontal","parseBorderSkipped","_inRange","skipX","skipY","bounds","rectangle","element_rectangle","rects","border","outer","inner","boundingRects","fillRect","Arc","Point","Rectangle","resolve$1","hover","mode","categoryPercentage","barPercentage","gridLines","offsetGridLines","controller_bar","stack","bar","_ruler","getRuler","_resolveElementOptions","_xScale","_yScale","datasetLabel","labels","_updateElementGeometry","vscale","getBasePixel","isHorizontal","ruler","vpixels","calculateBarValuePixels","ipixels","calculateBarIndexPixels","head","center","_getStacks","last","stacked","stacks","isDatasetVisible","getStackCount","getStackIndex","stackCount","end","pixels","getPixelForValue","barThickness","prev","curr","ticks","getTicks","getPixelForTick","computeMinSampleSize","imeta","ivalue","getRightValue","minBarLength","controller","range","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","maxBarThickness","Infinity","dataIndex","valueOrDefault$3","resolve$2","tooltips","callbacks","title","dataPoint","xLabel","yLabel","controller_bubble","xScale","yScale","dsIndex","getPixelForDecimal","NaN","_options","resolve$3","valueOrDefault$4","animateRotate","animateScale","legendCallback","text","join","generateLabels","ds","arcOpts","bw","e","legendItem","cutoutPercentage","circumference","tooltipItem","dataLabel","controller_doughnut","getRingIndex","ringIndex","j","opts","availableWidth","availableHeight","minSize","arcs","chartWeight","_getRingWeight","contains0","contains90","contains180","contains270","cutout","getMaxBorderWidth","radiusLength","_getVisibleDatasetWeightTotal","offsetX","offsetY","total","calculateTotal","_getRingWeightOffset","animationOpts","centerX","centerY","calculateCircumference","hoverWidth","ringWeightOffset","dataSetIndex","axis","controller_horizontalBar","valueOrDefault$5","resolve$4","isPointInArea","lineEnabled","showLine","controller_line","lineTension","_scale","_resolveLineOptions","updateBezierControlPoints","lineModel","_resolvePointOptions","calculatePointY","ELEMENT_OPTIONS","elementOptions","dsMeta","sumPos","sumNeg","stackedRightValue","rightValue","controlPoints","capControlPoint","pt","filter","cubicInterpolationMode","splineCurveMonotone","splineCurve","nextItem","halfBorderWidth","resolve$5","angleLines","circular","pointLabels","beginAtZero","controller_polarArea","starts","_starts","angles","_angles","_updateRadius","countVisibleElements","_computeAngle","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getDistanceFromCenterForValue","resetRadius","doughnut","controller_pie","valueOrDefault$6","resolve$6","controller_radar","pointPosition","getPointPositionForValue","bubble","horizontalBar","polarArea","pie","radar","scatter","getRelativePosition","native","parseVisibleItems","handler","jlen","getIntersectItems","getNearestItems","intersect","distanceMetric","minDistance","POSITIVE_INFINITY","nearestItems","getDistanceMetricForAxis","useX","useY","pt1","pt2","deltaX","deltaY","indexMode","items","core_interaction","modes","single","x-axis","nearest","intersectsItem","filterByPosition","where","sortByWeight","_tmpIndex_","sort","addSizeByPosition","boxes","box","layout","core_layouts","addBox","fullWidth","removeBox","layoutItem","configure","layoutOptions","leftPadding","rightPadding","topPadding","bottomPadding","leftBoxes","rightBoxes","topBoxes","bottomBoxes","chartAreaBoxes","maxPadding","verticalBoxes","horizontalBoxes","outerBoxes","chartWidth","chartHeight","chartAreaWidth","verticalBoxWidth","maxChartAreaWidth","maxChartAreaHeight","outerBoxSizes","minBoxSizes","getPadding","boxPadding","findMaxPadding","fitBox","minBoxSize","findNextWhere","scaleMargin","leftPaddingAddition","topPaddingAddition","newMaxChartAreaHeight","newMaxChartAreaWidth","placeBox","minBox","stylesheet","freeze","default","EXPANDO_KEY","CSS_SIZE_MONITOR","CSS_PREFIX","CSS_RENDER_MONITOR","CSS_RENDER_ANIMATION","ANIMATION_START_EVENTS","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","readUsedSize","property","getStyle","eventListenerOptions","supports","addEventListener","passive","addListener","removeListener","removeEventListener","createEvent","nativeEvent","createDiv","cls","el","document","addResizeListener","expando","resizer","expand","shrink","appendChild","_reset","scrollLeft","scrollTop","onScroll","bind","createResizer","ticking","throttled","container","maintainAspectRatio","parentNode","clientWidth","proxy","renderProxy","animationName","reflow","offsetParent","classList","add","watchForRender","insertBefore","firstChild","removeResizeListener","remove","unwatchForRender","removeChild","platform_dom$2","disableCSSInjection","_enabled","_ensureLoaded","_loaded","platform","css","_style","setAttribute","getElementsByTagName","createTextNode","injectCSS","acquireContext","getElementById","getContext","renderHeight","getAttribute","renderWidth","initial","displayWidth","aspectRatio","displayHeight","initCanvas","releaseContext","removeAttribute","proxies","pos","fromNativeEvent","addEvent","removeEvent","implementation","core_plugins","_plugins","_cacheId","register","plugin","unregister","idx","getAll","notify","hook","descriptor","params","descriptors","cache","$plugins","_invalidate","core_scaleService","constructors","registerScaleType","scaleConstructor","scaleDefaults","getScaleConstructor","getScaleDefaults","updateScaleDefaults","additions","addScalesToLayout","valueOrDefault$7","enabled","titleFontStyle","titleSpacing","titleMarginBottom","titleFontColor","titleAlign","bodySpacing","bodyFontColor","bodyAlign","footerFontStyle","footerSpacing","footerMarginTop","footerFontColor","footerAlign","yPadding","xPadding","caretPadding","caretSize","multiKeyBackground","displayColors","beforeTitle","tooltipItems","labelCount","afterTitle","beforeBody","beforeLabel","labelColor","activeElement","labelTextColor","afterLabel","afterBody","beforeFooter","footer","afterFooter","positioners","average","eventPosition","nearestElement","distanceBetweenPoints","tp","pushOrConcat","toPush","splitNewlines","String","split","createTooltipItem","indexScale","valueScale","getLabelForIndex","getBaseModel","tooltipOpts","xAlign","yAlign","_bodyFontFamily","bodyFontFamily","_bodyFontStyle","bodyFontStyle","_bodyAlign","bodyFontSize","_titleFontFamily","titleFontFamily","_titleFontStyle","titleFontSize","_titleAlign","_footerFontFamily","footerFontFamily","_footerFontStyle","footerFontSize","_footerAlign","opacity","legendColorBackground","getAlignedX","align","getBeforeAfterBodyLines","exports$3","_lastActive","getTitle","lines","getBeforeBody","getBody","bodyItems","bodyItem","before","after","getAfterBody","getFooter","changed","existingModel","active","_active","alignment","backgroundPoint","tooltipSize","caretX","caretY","labelColors","labelTextColors","_eventPosition","itemSort","body","dataPoints","tooltip","combinedBodyLength","reduce","titleLineCount","footerLineCount","widthPadding","maxLineWidth","measureText","fontString","getTooltipSize","lf","rf","olf","orf","yf","midX","midY","determineAlignment","paddingAndSize","radiusAndPadding","getBackgroundPoint","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","tmp","drawTitle","textAlign","textBaseline","fillText","drawBody","textColor","drawColorBoxes","xLinePadding","colorX","fillLineOfText","strokeRect","drawFooter","drawBackground","quadraticCurveTo","hasTooltipContent","globalAlpha","handleEvent","getElementsAtEventForMode","positioners_1","core_tooltip","valueOrDefault$8","mergeScaleConfig","slen","mergeConfig","positionIsHorizontal","events","onHover","animationDuration","responsive","responsiveAnimationDuration","Chart","construct","initConfig","_bufferedRender","instances","retinaScale","devicePixelRatio","bindEvents","resize","ensureScalesHaveIDs","buildOrUpdateScales","initToolTip","stop","silent","newWidth","getMaximumWidth","newHeight","getMaximumHeight","newSize","onResize","scalesOptions","scaleOptions","xAxisOptions","yAxisOptions","updated","dtype","dposition","isDefault","scaleType","scaleClass","mergeTicksOptions","hasUpdated","buildOrUpdateControllers","newControllers","destroyDatasetMeta","ControllerClass","resetElements","newOptions","updateConfig","updateLayout","updateDatasets","lastActive","_bufferedRequest","updateDataset","animationOptions","animationObject","easingFunction","stepDecimal","drawDatasets","_drawTooltip","drawDataset","getElementsAtXAxis","_meta","generateLegend","unbindEvents","toBase64Image","toDataURL","_chartInstance","_listeners","eventHandler","updateHoverStyle","bufferedRequest","hoverOptions","core_controller","abstract","DateAdapter","Controller","types","scaleMerge","formats","parse","format","diff","startOf","endOf","_create","override","members","core_adapters","_date","core_ticks","formatters","tickValue","logDelta","log10","tickString","maxTick","logTick","toExponential","numDecimal","toFixed","logarithmic","remain","valueOrDefault$9","labelsFromTicks","computeTextSize","tick","longestText","color","drawBorder","drawOnChartArea","drawTicks","tickMarkLength","zeroLineWidth","zeroLineColor","zeroLineBorderDash","zeroLineBorderDashOffset","scaleLabel","labelString","minRotation","maxRotation","mirror","autoSkip","autoSkipPadding","labelOffset","minor","major","core_scale","paddingLeft","paddingTop","paddingRight","paddingBottom","_ticks","beforeUpdate","maxWidth","maxHeight","margins","_maxLabelLines","longestLabelWidth","longestTextCache","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","beforeTickToLabelConversion","convertTicksToLabels","afterTickToLabelConversion","beforeCalculateTickRotation","calculateTickRotation","afterCalculateTickRotation","beforeFit","fit","afterFit","afterUpdate","tickOpts","userCallback","tickFont","labelRotation","cosRotation","originalLabelWidth","labelWidth","tickWidth","angleRadians","toRadians","scaleLabelOpts","gridLineOpts","_isVisible","parseFont","isFullWidth","scaleLabelFont","scaleLabelPadding","deltaHeight","largestTextWidth","tallestLabelHeightInLines","numberOfLabelLines","lineSpace","tickPadding","sinRotation","labelHeight","firstLabelWidth","lastLabelWidth","offsetLeft","offsetRight","handleMargins","rawValue","getValueForPixel","innerWidth","pixel","finalVal","innerHeight","decimal","valueOffset","getBaseValue","_autoSkip","optionTicks","tickCount","skipRatio","maxTicks","maxTicksLimit","ticksLength","_tickSize","axisLength","PaddingBottom","rot","borderValue","tickStart","tickEnd","optionMajorTicks","isRotated","isMirrored","tickFontColor","fontColor","majorTickFontColor","majorTickFont","tl","scaleLabelFontColor","labelRotationRadians","itemsToDraw","axisWidth","alignPixel","_alignPixel","lineColor","tx1","ty1","tx2","ty2","labelX","labelY","textOffset","zeroLineIndex","lineValue","getPixelForGridLine","labelYOffset","labelXOffset","glWidth","glColor","glBorderDash","glBorderDashOffset","itemToDraw","translate","scaleLabelX","scaleLabelY","halfLineHeight","isLeft","firstLineWidth","lastLineWidth","scale_category","getLabels","xLabels","yLabels","minIndex","maxIndex","valueCategory","offsetAmt","valueWidth","widthOffset","valueHeight","heightOffset","horz","valueDimension","_defaults","scale_linearbase","handleTickRangeOptions","minSign","sign","maxSign","setMin","suggestedMin","setMax","suggestedMax","getTickLimit","stepSize","ceil","_computeTickLimit","handleDirectionalChanges","numericGeneratorOptions","precision","fixedStepSize","generationOptions","dataRange","factor","niceMin","niceMax","numSpaces","unit","maxNumSpaces","rmin","rmax","spacing","niceNum","_decimalPlaces","almostWhole","almostEquals","generateTicks","ticksAsNumbers","defaultConfig$1","scale_linear","IDMatches","hasStacks","valuesPerStack","positiveValues","negativeValues","relativePoints","valuesForType","minVal","maxVal","innerDimension","_defaults$1","valueOrDefault$a","defaultConfig$2","nonNegativeOrDefault","scale_logarithmic","minNotZero","exp","significand","tickVal","endExp","endSignificand","lastTick","generateTicks$1","tickValues","_getFirstTickValue","firstTickValue","_defaults$2","valueOrDefault$b","valueAtIndexOrDefault$1","resolve$7","defaultConfig$3","animate","showLabelBackdrop","backdropColor","backdropPaddingY","backdropPaddingX","getValueCount","getTickBackdropHeight","determineLimits","getTextAlignForAngle","adjustPointPositionForLabelHeight","textSize","numberOrZero","param","scale_radialLinear","drawingArea","NEGATIVE_INFINITY","plFont","furthestLimits","furthestAngles","_pointLabelSizes","valueCount","getPointPosition","getIndexAngle","toDegrees","hLimits","vLimits","setReductions","fitWithPointLabels","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","angleMultiplier","startAngleRadians","scalingFactor","distanceFromCenter","thisAngle","getBasePosition","angleLineOpts","pointLabelOpts","tickBackdropHeight","outerDistance","outerPosition","extra","pointLabelPosition","pointLabelFontColor","drawPointLabels","yCenterOffset","drawRadiusLine","_defaults$3","valueOrDefault$c","MIN_INTEGER","MIN_SAFE_INTEGER","MAX_INTEGER","MAX_SAFE_INTEGER","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","arrayUnique","hash","out","interpolate$1","table","skey","tkey","mid","i0","i1","lo","lookup","toTimestamp","input","adapter","_adapter","time","parser","determineMajorUnit","generate","capacity","timeOpts","minUnit","interval","determineUnitForAutoTicks","unitStepSize","weekday","isoWeekday","majorTicksEnabled","first","milliseconds","determineStepSize","scale_time","adapters","date","warn","displayFormats","timestamp","timestamps","dataLabels","_horizontal","_table","_timestamps","getLabelCapacity","_unit","determineUnitForFormatting","_majorUnit","distribution","buildLookupTable","_offsets","computeOffsets","majorUnit","ticksFromTimestamps","tooltipFormat","datetime","tickFormatFunction","minorFormat","majorFormat","majorTime","majorTickOpts","formatter","getPixelForOffset","isReverse","getLabelWidth","ticksOpts","tickLabelWidth","tickFontSize","exampleTime","exampleLabel","_defaults$4","displayFormat","category","radialLinear","FORMATS","_id","valueOf","_format","amount","filler","propagate","mappers","visible","boundary","decodeFill","computeBoundary","scaleBottom","scaleTop","scaleZero","resolveTarget","visited","createMapper","isDrawable","drawArea","curve0","curve1","len0","len1","plugin_filler","afterDatasetsUpdate","$filler","mapper","beforeDatasetDraw","loop","p0","p1","d0","d1","doFill","noop$1","valueOrDefault$d","getBoxWidth","labelOpts","usePointStyle","boxWidth","ci","onLeave","lineDash","Legend","legendHitBoxes","_hoveredItem","doughnutMode","beforeBuildLabels","buildLabels","afterBuildLabels","legendItems","labelFont","hitboxes","lineWidths","totalHeight","vPadding","columnWidths","totalWidth","currentColWidth","currentColHeight","itemHeight","itemWidth","lineDefault","legendWidth","cursor","textWidth","SQRT2","drawLegendBox","halfFontSize","xLeft","yMiddle","_getLegendItemAt","hitBox","lh","hoveredItem","createNewLegendAndAttach","legendOpts","plugin_legend","_element","beforeInit","afterEvent","noop$2","Title","lineCount","fontOpts","titleX","titleY","createNewTitleBlockAndAttach","titleOpts","titleBlock","parseMaxStyle","styleValue","parentProperty","valueInPixels","isConstrainedValue","getConstraintDimension","domNode","maxStyle","percentageProperty","defaultView","_getParentNode","constrainedNode","getComputedStyle","constrainedContainer","hasCNode","hasCContainer","infinity","filterCallback","filtered","arrayToSearch","startIndex","currentItem","findPreviousWhere","epsilon","rounded","exponent","log","LOG10E","powerOf10","isPowerOf10","radians","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","aliasPixel","pixelWidth","currentDevicePixelRatio","halfWidth","firstPoint","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","EPSILON","pointBefore","pointCurrent","pointAfter","alphaK","betaK","tauK","squaredMagnitude","pointsWithTangents","deltaK","mK","pointsLen","slopeDeltaX","fraction","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","evt","originalEvent","srcElement","boundingRect","getBoundingClientRect","touches","clientX","clientY","getConstraintWidth","getConstraintHeight","_calculatePadding","parentDimension","parent","host","cw","clientHeight","ch","currentStyle","getPropertyValue","forceRatio","pixelRatio","pixelSize","arrayOfThings","gc","garbageCollect","longest","thing","nestedThing","gcLen","numberOfLines","CanvasGradient","colorValue","CanvasPattern","core_helpers","_adapters","Animation","animationService","Interaction","layouts","Scale","scaleService","Ticks","Tooltip","src","pluginService","PluginBase","canvasHelpers","layoutService","LinearScaleBase","klass","cfg","toLowerCase","factory","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","nextTick","browser","env","argv","version","versions","on","once","off","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask"],"mappings":"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","file":"static/js/50.c035070f.chunk.js","sourcesContent":["var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Chart from 'chart.js';\nimport isEqual from 'lodash/isEqual';\nimport keyBy from 'lodash/keyBy';\nvar NODE_ENV = typeof process !== 'undefined' && process.env && process.env.NODE_ENV;\n\nvar ChartComponent = function (_React$Component) {\n _inherits(ChartComponent, _React$Component);\n\n function ChartComponent() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, ChartComponent);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.handleOnClick = function (event) {\n var instance = _this.chartInstance;\n var _this$props = _this.props,\n getDatasetAtEvent = _this$props.getDatasetAtEvent,\n getElementAtEvent = _this$props.getElementAtEvent,\n getElementsAtEvent = _this$props.getElementsAtEvent,\n onElementsClick = _this$props.onElementsClick;\n getDatasetAtEvent && getDatasetAtEvent(instance.getDatasetAtEvent(event), event);\n getElementAtEvent && getElementAtEvent(instance.getElementAtEvent(event), event);\n getElementsAtEvent && getElementsAtEvent(instance.getElementsAtEvent(event), event);\n onElementsClick && onElementsClick(instance.getElementsAtEvent(event), event); // Backward compatibility\n }, _this.ref = function (element) {\n _this.element = element;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n ChartComponent.prototype.componentWillMount = function componentWillMount() {\n this.chartInstance = undefined;\n };\n\n ChartComponent.prototype.componentDidMount = function componentDidMount() {\n this.renderChart();\n };\n\n ChartComponent.prototype.componentDidUpdate = function componentDidUpdate() {\n if (this.props.redraw) {\n this.destroyChart();\n this.renderChart();\n return;\n }\n\n this.updateChart();\n };\n\n ChartComponent.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n var _props = this.props,\n redraw = _props.redraw,\n type = _props.type,\n options = _props.options,\n plugins = _props.plugins,\n legend = _props.legend,\n height = _props.height,\n width = _props.width;\n\n if (nextProps.redraw === true) {\n return true;\n }\n\n if (height !== nextProps.height || width !== nextProps.width) {\n return true;\n }\n\n if (type !== nextProps.type) {\n return true;\n }\n\n if (!isEqual(legend, nextProps.legend)) {\n return true;\n }\n\n if (!isEqual(options, nextProps.options)) {\n return true;\n }\n\n var nextData = this.transformDataProp(nextProps);\n\n if (!isEqual(this.shadowDataProp, nextData)) {\n return true;\n }\n\n return !isEqual(plugins, nextProps.plugins);\n };\n\n ChartComponent.prototype.componentWillUnmount = function componentWillUnmount() {\n this.destroyChart();\n };\n\n ChartComponent.prototype.transformDataProp = function transformDataProp(props) {\n var data = props.data;\n\n if (typeof data == 'function') {\n var node = this.element;\n return data(node);\n } else {\n return data;\n }\n }; // Chart.js directly mutates the data.dataset objects by adding _meta proprerty\n // this makes impossible to compare the current and next data changes\n // therefore we memoize the data prop while sending a fake to Chart.js for mutation.\n // see https://github.com/chartjs/Chart.js/blob/master/src/core/core.controller.js#L615-L617\n\n\n ChartComponent.prototype.memoizeDataProps = function memoizeDataProps() {\n if (!this.props.data) {\n return;\n }\n\n var data = this.transformDataProp(this.props);\n this.shadowDataProp = _extends({}, data, {\n datasets: data.datasets && data.datasets.map(function (set) {\n return _extends({}, set);\n })\n });\n this.saveCurrentDatasets(); // to remove the dataset metadata from this chart when the chart is destroyed\n\n return data;\n };\n\n ChartComponent.prototype.checkDatasets = function checkDatasets(datasets) {\n var isDev = NODE_ENV !== 'production' && NODE_ENV !== 'prod';\n var usingCustomKeyProvider = this.props.datasetKeyProvider !== ChartComponent.getLabelAsKey;\n var multipleDatasets = datasets.length > 1;\n\n if (isDev && multipleDatasets && !usingCustomKeyProvider) {\n var shouldWarn = false;\n datasets.forEach(function (dataset) {\n if (!dataset.label) {\n shouldWarn = true;\n }\n });\n\n if (shouldWarn) {\n console.error('[react-chartjs-2] Warning: Each dataset needs a unique key. By default, the \"label\" property on each dataset is used. Alternatively, you may provide a \"datasetKeyProvider\" as a prop that returns a unique key.');\n }\n }\n };\n\n ChartComponent.prototype.getCurrentDatasets = function getCurrentDatasets() {\n return this.chartInstance && this.chartInstance.config.data && this.chartInstance.config.data.datasets || [];\n };\n\n ChartComponent.prototype.saveCurrentDatasets = function saveCurrentDatasets() {\n var _this2 = this;\n\n this.datasets = this.datasets || {};\n var currentDatasets = this.getCurrentDatasets();\n currentDatasets.forEach(function (d) {\n _this2.datasets[_this2.props.datasetKeyProvider(d)] = d;\n });\n };\n\n ChartComponent.prototype.updateChart = function updateChart() {\n var _this3 = this;\n\n var options = this.props.options;\n var data = this.memoizeDataProps(this.props);\n if (!this.chartInstance) return;\n\n if (options) {\n this.chartInstance.options = Chart.helpers.configMerge(this.chartInstance.options, options);\n } // Pipe datasets to chart instance datasets enabling\n // seamless transitions\n\n\n var currentDatasets = this.getCurrentDatasets();\n var nextDatasets = data.datasets || [];\n this.checkDatasets(currentDatasets);\n var currentDatasetsIndexed = keyBy(currentDatasets, this.props.datasetKeyProvider); // We can safely replace the dataset array, as long as we retain the _meta property\n // on each dataset.\n\n this.chartInstance.config.data.datasets = nextDatasets.map(function (next) {\n var current = currentDatasetsIndexed[_this3.props.datasetKeyProvider(next)];\n\n if (current && current.type === next.type) {\n // The data array must be edited in place. As chart.js adds listeners to it.\n current.data.splice(next.data.length);\n next.data.forEach(function (point, pid) {\n current.data[pid] = next.data[pid];\n });\n\n var _data = next.data,\n otherProps = _objectWithoutProperties(next, ['data']); // Merge properties. Notice a weakness here. If a property is removed\n // from next, it will be retained by current and never disappears.\n // Workaround is to set value to null or undefined in next.\n\n\n return _extends({}, current, otherProps);\n } else {\n return next;\n }\n });\n\n var datasets = data.datasets,\n rest = _objectWithoutProperties(data, ['datasets']);\n\n this.chartInstance.config.data = _extends({}, this.chartInstance.config.data, rest);\n this.chartInstance.update();\n };\n\n ChartComponent.prototype.renderChart = function renderChart() {\n var _props2 = this.props,\n options = _props2.options,\n legend = _props2.legend,\n type = _props2.type,\n plugins = _props2.plugins;\n var node = this.element;\n var data = this.memoizeDataProps();\n\n if (typeof legend !== 'undefined' && !isEqual(ChartComponent.defaultProps.legend, legend)) {\n options.legend = legend;\n }\n\n this.chartInstance = new Chart(node, {\n type: type,\n data: data,\n options: options,\n plugins: plugins\n });\n };\n\n ChartComponent.prototype.destroyChart = function destroyChart() {\n // Put all of the datasets that have existed in the chart back on the chart\n // so that the metadata associated with this chart get destroyed.\n // This allows the datasets to be used in another chart. This can happen,\n // for example, in a tabbed UI where the chart gets created each time the\n // tab gets switched to the chart and uses the same data).\n this.saveCurrentDatasets();\n var datasets = Object.values(this.datasets);\n this.chartInstance.config.data.datasets = datasets;\n this.chartInstance.destroy();\n };\n\n ChartComponent.prototype.render = function render() {\n var _props3 = this.props,\n height = _props3.height,\n width = _props3.width,\n id = _props3.id;\n return React.createElement('canvas', {\n ref: this.ref,\n height: height,\n width: width,\n id: id,\n onClick: this.handleOnClick\n });\n };\n\n return ChartComponent;\n}(React.Component);\n\nChartComponent.getLabelAsKey = function (d) {\n return d.label;\n};\n\nChartComponent.propTypes = {\n data: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired,\n getDatasetAtEvent: PropTypes.func,\n getElementAtEvent: PropTypes.func,\n getElementsAtEvent: PropTypes.func,\n height: PropTypes.number,\n legend: PropTypes.object,\n onElementsClick: PropTypes.func,\n options: PropTypes.object,\n plugins: PropTypes.arrayOf(PropTypes.object),\n redraw: PropTypes.bool,\n type: function type(props, propName, componentName) {\n if (!Chart.controllers[props[propName]]) {\n return new Error('Invalid chart type `' + props[propName] + '` supplied to' + ' `' + componentName + '`.');\n }\n },\n width: PropTypes.number,\n datasetKeyProvider: PropTypes.func\n};\nChartComponent.defaultProps = {\n legend: {\n display: true,\n position: 'bottom'\n },\n type: 'doughnut',\n height: 150,\n width: 300,\n redraw: false,\n options: {},\n datasetKeyProvider: ChartComponent.getLabelAsKey\n};\nexport default ChartComponent;\nexport var Doughnut = function (_React$Component2) {\n _inherits(Doughnut, _React$Component2);\n\n function Doughnut() {\n _classCallCheck(this, Doughnut);\n\n return _possibleConstructorReturn(this, _React$Component2.apply(this, arguments));\n }\n\n Doughnut.prototype.render = function render() {\n var _this5 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref) {\n return _this5.chartInstance = _ref && _ref.chartInstance;\n },\n type: 'doughnut'\n }));\n };\n\n return Doughnut;\n}(React.Component);\nexport var Pie = function (_React$Component3) {\n _inherits(Pie, _React$Component3);\n\n function Pie() {\n _classCallCheck(this, Pie);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n }\n\n Pie.prototype.render = function render() {\n var _this7 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref2) {\n return _this7.chartInstance = _ref2 && _ref2.chartInstance;\n },\n type: 'pie'\n }));\n };\n\n return Pie;\n}(React.Component);\nexport var Line = function (_React$Component4) {\n _inherits(Line, _React$Component4);\n\n function Line() {\n _classCallCheck(this, Line);\n\n return _possibleConstructorReturn(this, _React$Component4.apply(this, arguments));\n }\n\n Line.prototype.render = function render() {\n var _this9 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref3) {\n return _this9.chartInstance = _ref3 && _ref3.chartInstance;\n },\n type: 'line'\n }));\n };\n\n return Line;\n}(React.Component);\nexport var Bar = function (_React$Component5) {\n _inherits(Bar, _React$Component5);\n\n function Bar() {\n _classCallCheck(this, Bar);\n\n return _possibleConstructorReturn(this, _React$Component5.apply(this, arguments));\n }\n\n Bar.prototype.render = function render() {\n var _this11 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref4) {\n return _this11.chartInstance = _ref4 && _ref4.chartInstance;\n },\n type: 'bar'\n }));\n };\n\n return Bar;\n}(React.Component);\nexport var HorizontalBar = function (_React$Component6) {\n _inherits(HorizontalBar, _React$Component6);\n\n function HorizontalBar() {\n _classCallCheck(this, HorizontalBar);\n\n return _possibleConstructorReturn(this, _React$Component6.apply(this, arguments));\n }\n\n HorizontalBar.prototype.render = function render() {\n var _this13 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref5) {\n return _this13.chartInstance = _ref5 && _ref5.chartInstance;\n },\n type: 'horizontalBar'\n }));\n };\n\n return HorizontalBar;\n}(React.Component);\nexport var Radar = function (_React$Component7) {\n _inherits(Radar, _React$Component7);\n\n function Radar() {\n _classCallCheck(this, Radar);\n\n return _possibleConstructorReturn(this, _React$Component7.apply(this, arguments));\n }\n\n Radar.prototype.render = function render() {\n var _this15 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref6) {\n return _this15.chartInstance = _ref6 && _ref6.chartInstance;\n },\n type: 'radar'\n }));\n };\n\n return Radar;\n}(React.Component);\nexport var Polar = function (_React$Component8) {\n _inherits(Polar, _React$Component8);\n\n function Polar() {\n _classCallCheck(this, Polar);\n\n return _possibleConstructorReturn(this, _React$Component8.apply(this, arguments));\n }\n\n Polar.prototype.render = function render() {\n var _this17 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref7) {\n return _this17.chartInstance = _ref7 && _ref7.chartInstance;\n },\n type: 'polarArea'\n }));\n };\n\n return Polar;\n}(React.Component);\nexport var Bubble = function (_React$Component9) {\n _inherits(Bubble, _React$Component9);\n\n function Bubble() {\n _classCallCheck(this, Bubble);\n\n return _possibleConstructorReturn(this, _React$Component9.apply(this, arguments));\n }\n\n Bubble.prototype.render = function render() {\n var _this19 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref8) {\n return _this19.chartInstance = _ref8 && _ref8.chartInstance;\n },\n type: 'bubble'\n }));\n };\n\n return Bubble;\n}(React.Component);\nexport var Scatter = function (_React$Component10) {\n _inherits(Scatter, _React$Component10);\n\n function Scatter() {\n _classCallCheck(this, Scatter);\n\n return _possibleConstructorReturn(this, _React$Component10.apply(this, arguments));\n }\n\n Scatter.prototype.render = function render() {\n var _this21 = this;\n\n return React.createElement(ChartComponent, _extends({}, this.props, {\n ref: function ref(_ref9) {\n return _this21.chartInstance = _ref9 && _ref9.chartInstance;\n },\n type: 'scatter'\n }));\n };\n\n return Scatter;\n}(React.Component);\nexport var defaults = Chart.defaults;\nexport { Chart };","var baseIsEqual = require('./_baseIsEqual');\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n\n\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;","var baseAssignValue = require('./_baseAssignValue'),\n createAggregator = require('./_createAggregator');\n/**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n\n\nvar keyBy = createAggregator(function (result, value, key) {\n baseAssignValue(result, key, value);\n});\nmodule.exports = keyBy;","var arrayAggregator = require('./_arrayAggregator'),\n baseAggregator = require('./_baseAggregator'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n/**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n\n\nfunction createAggregator(setter, initializer) {\n return function (collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n}\n\nmodule.exports = createAggregator;","/**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\nfunction arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n\n return accumulator;\n}\n\nmodule.exports = arrayAggregator;","var baseEach = require('./_baseEach');\n/**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n\n\nfunction baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function (value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n}\n\nmodule.exports = baseAggregator;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport classNames from 'classnames';\nimport React from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nvar DEVICE_SIZES = ['xl', 'lg', 'md', 'sm', 'xs'];\nvar Col = React.forwardRef( // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\nfunction (_ref, ref) {\n var bsPrefix = _ref.bsPrefix,\n className = _ref.className,\n _ref$as = _ref.as,\n Component = _ref$as === void 0 ? 'div' : _ref$as,\n props = _objectWithoutPropertiesLoose(_ref, [\"bsPrefix\", \"className\", \"as\"]);\n\n var prefix = useBootstrapPrefix(bsPrefix, 'col');\n var spans = [];\n var classes = [];\n DEVICE_SIZES.forEach(function (brkPoint) {\n var propValue = props[brkPoint];\n delete props[brkPoint];\n var span, offset, order;\n\n if (propValue != null && typeof propValue === 'object') {\n var _propValue$span = propValue.span;\n span = _propValue$span === void 0 ? true : _propValue$span;\n offset = propValue.offset;\n order = propValue.order;\n } else {\n span = propValue;\n }\n\n var infix = brkPoint !== 'xs' ? \"-\" + brkPoint : '';\n if (span != null) spans.push(span === true ? \"\" + prefix + infix : \"\" + prefix + infix + \"-\" + span);\n if (order != null) classes.push(\"order\" + infix + \"-\" + order);\n if (offset != null) classes.push(\"offset\" + infix + \"-\" + offset);\n });\n\n if (!spans.length) {\n spans.push(prefix); // plain 'col'\n }\n\n return React.createElement(Component, _extends({}, props, {\n ref: ref,\n className: classNames.apply(void 0, [className].concat(spans, classes))\n }));\n});\nCol.displayName = 'Col';\nexport default Col;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport classNames from 'classnames';\nimport React from 'react';\nimport { createBootstrapComponent } from './ThemeProvider';\n\nvar Row =\n/*#__PURE__*/\nfunction (_React$Component) {\n _inheritsLoose(Row, _React$Component);\n\n function Row() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = Row.prototype;\n\n _proto.render = function render() {\n var _this$props = this.props,\n bsPrefix = _this$props.bsPrefix,\n noGutters = _this$props.noGutters,\n _this$props$as = _this$props.as,\n Component = _this$props$as === void 0 ? 'div' : _this$props$as,\n className = _this$props.className,\n props = _objectWithoutPropertiesLoose(_this$props, [\"bsPrefix\", \"noGutters\", \"as\", \"className\"]);\n\n return React.createElement(Component, _extends({}, props, {\n className: classNames(className, bsPrefix, noGutters && 'no-gutters')\n }));\n };\n\n return Row;\n}(React.Component);\n\nRow.defaultProps = {\n noGutters: false\n};\nexport default createBootstrapComponent(Row, 'row');","/*!\n * Chart.js v2.8.0\n * https://www.chartjs.org\n * (c) 2019 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function () {\n try {\n return require('moment');\n } catch (e) {}\n }()) : typeof define === 'function' && define.amd ? define(['require'], function (require) {\n return factory(function () {\n try {\n return require('moment');\n } catch (e) {}\n }());\n }) : global.Chart = factory(global.moment);\n})(this, function (moment) {\n 'use strict';\n\n moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n /* MIT license */\n\n var conversions = {\n rgb2hsl: rgb2hsl,\n rgb2hsv: rgb2hsv,\n rgb2hwb: rgb2hwb,\n rgb2cmyk: rgb2cmyk,\n rgb2keyword: rgb2keyword,\n rgb2xyz: rgb2xyz,\n rgb2lab: rgb2lab,\n rgb2lch: rgb2lch,\n hsl2rgb: hsl2rgb,\n hsl2hsv: hsl2hsv,\n hsl2hwb: hsl2hwb,\n hsl2cmyk: hsl2cmyk,\n hsl2keyword: hsl2keyword,\n hsv2rgb: hsv2rgb,\n hsv2hsl: hsv2hsl,\n hsv2hwb: hsv2hwb,\n hsv2cmyk: hsv2cmyk,\n hsv2keyword: hsv2keyword,\n hwb2rgb: hwb2rgb,\n hwb2hsl: hwb2hsl,\n hwb2hsv: hwb2hsv,\n hwb2cmyk: hwb2cmyk,\n hwb2keyword: hwb2keyword,\n cmyk2rgb: cmyk2rgb,\n cmyk2hsl: cmyk2hsl,\n cmyk2hsv: cmyk2hsv,\n cmyk2hwb: cmyk2hwb,\n cmyk2keyword: cmyk2keyword,\n keyword2rgb: keyword2rgb,\n keyword2hsl: keyword2hsl,\n keyword2hsv: keyword2hsv,\n keyword2hwb: keyword2hwb,\n keyword2cmyk: keyword2cmyk,\n keyword2lab: keyword2lab,\n keyword2xyz: keyword2xyz,\n xyz2rgb: xyz2rgb,\n xyz2lab: xyz2lab,\n xyz2lch: xyz2lch,\n lab2xyz: lab2xyz,\n lab2rgb: lab2rgb,\n lab2lch: lab2lch,\n lch2lab: lch2lab,\n lch2xyz: lch2xyz,\n lch2rgb: lch2rgb\n };\n\n function rgb2hsl(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h,\n s,\n l;\n if (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;\n h = Math.min(h * 60, 360);\n if (h < 0) h += 360;\n l = (min + max) / 2;\n if (max == min) s = 0;else if (l <= 0.5) s = delta / (max + min);else s = delta / (2 - max - min);\n return [h, s * 100, l * 100];\n }\n\n function rgb2hsv(rgb) {\n var r = rgb[0],\n g = rgb[1],\n b = rgb[2],\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n delta = max - min,\n h,\n s,\n v;\n if (max == 0) s = 0;else s = delta / max * 1000 / 10;\n if (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;\n h = Math.min(h * 60, 360);\n if (h < 0) h += 360;\n v = max / 255 * 1000 / 10;\n return [h, s, v];\n }\n\n function rgb2hwb(rgb) {\n var r = rgb[0],\n g = rgb[1],\n b = rgb[2],\n h = rgb2hsl(rgb)[0],\n w = 1 / 255 * Math.min(r, Math.min(g, b)),\n b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n return [h, w * 100, b * 100];\n }\n\n function rgb2cmyk(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255,\n c,\n m,\n y,\n k;\n k = Math.min(1 - r, 1 - g, 1 - b);\n c = (1 - r - k) / (1 - k) || 0;\n m = (1 - g - k) / (1 - k) || 0;\n y = (1 - b - k) / (1 - k) || 0;\n return [c * 100, m * 100, y * 100, k * 100];\n }\n\n function rgb2keyword(rgb) {\n return reverseKeywords[JSON.stringify(rgb)];\n }\n\n function rgb2xyz(rgb) {\n var r = rgb[0] / 255,\n g = rgb[1] / 255,\n b = rgb[2] / 255; // assume sRGB\n\n r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;\n var x = r * 0.4124 + g * 0.3576 + b * 0.1805;\n var y = r * 0.2126 + g * 0.7152 + b * 0.0722;\n var z = r * 0.0193 + g * 0.1192 + b * 0.9505;\n return [x * 100, y * 100, z * 100];\n }\n\n function rgb2lab(rgb) {\n var xyz = rgb2xyz(rgb),\n x = xyz[0],\n y = xyz[1],\n z = xyz[2],\n l,\n a,\n b;\n x /= 95.047;\n y /= 100;\n z /= 108.883;\n x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;\n y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;\n z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;\n l = 116 * y - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n return [l, a, b];\n }\n\n function rgb2lch(args) {\n return lab2lch(rgb2lab(args));\n }\n\n function hsl2rgb(hsl) {\n var h = hsl[0] / 360,\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n t1,\n t2,\n t3,\n rgb,\n val;\n\n if (s == 0) {\n val = l * 255;\n return [val, val, val];\n }\n\n if (l < 0.5) t2 = l * (1 + s);else t2 = l + s - l * s;\n t1 = 2 * l - t2;\n rgb = [0, 0, 0];\n\n for (var i = 0; i < 3; i++) {\n t3 = h + 1 / 3 * -(i - 1);\n t3 < 0 && t3++;\n t3 > 1 && t3--;\n if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3;else if (2 * t3 < 1) val = t2;else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;else val = t1;\n rgb[i] = val * 255;\n }\n\n return rgb;\n }\n\n function hsl2hsv(hsl) {\n var h = hsl[0],\n s = hsl[1] / 100,\n l = hsl[2] / 100,\n sv,\n v;\n\n if (l === 0) {\n // no need to do calc on black\n // also avoids divide by 0 error\n return [0, 0, 0];\n }\n\n l *= 2;\n s *= l <= 1 ? l : 2 - l;\n v = (l + s) / 2;\n sv = 2 * s / (l + s);\n return [h, sv * 100, v * 100];\n }\n\n function hsl2hwb(args) {\n return rgb2hwb(hsl2rgb(args));\n }\n\n function hsl2cmyk(args) {\n return rgb2cmyk(hsl2rgb(args));\n }\n\n function hsl2keyword(args) {\n return rgb2keyword(hsl2rgb(args));\n }\n\n function hsv2rgb(hsv) {\n var h = hsv[0] / 60,\n s = hsv[1] / 100,\n v = hsv[2] / 100,\n hi = Math.floor(h) % 6;\n var f = h - Math.floor(h),\n p = 255 * v * (1 - s),\n q = 255 * v * (1 - s * f),\n t = 255 * v * (1 - s * (1 - f)),\n v = 255 * v;\n\n switch (hi) {\n case 0:\n return [v, t, p];\n\n case 1:\n return [q, v, p];\n\n case 2:\n return [p, v, t];\n\n case 3:\n return [p, q, v];\n\n case 4:\n return [t, p, v];\n\n case 5:\n return [v, p, q];\n }\n }\n\n function hsv2hsl(hsv) {\n var h = hsv[0],\n s = hsv[1] / 100,\n v = hsv[2] / 100,\n sl,\n l;\n l = (2 - s) * v;\n sl = s * v;\n sl /= l <= 1 ? l : 2 - l;\n sl = sl || 0;\n l /= 2;\n return [h, sl * 100, l * 100];\n }\n\n function hsv2hwb(args) {\n return rgb2hwb(hsv2rgb(args));\n }\n\n function hsv2cmyk(args) {\n return rgb2cmyk(hsv2rgb(args));\n }\n\n function hsv2keyword(args) {\n return rgb2keyword(hsv2rgb(args));\n } // http://dev.w3.org/csswg/css-color/#hwb-to-rgb\n\n\n function hwb2rgb(hwb) {\n var h = hwb[0] / 360,\n wh = hwb[1] / 100,\n bl = hwb[2] / 100,\n ratio = wh + bl,\n i,\n v,\n f,\n n; // wh + bl cant be > 1\n\n if (ratio > 1) {\n wh /= ratio;\n bl /= ratio;\n }\n\n i = Math.floor(6 * h);\n v = 1 - bl;\n f = 6 * h - i;\n\n if ((i & 0x01) != 0) {\n f = 1 - f;\n }\n\n n = wh + f * (v - wh); // linear interpolation\n\n switch (i) {\n default:\n case 6:\n case 0:\n r = v;\n g = n;\n b = wh;\n break;\n\n case 1:\n r = n;\n g = v;\n b = wh;\n break;\n\n case 2:\n r = wh;\n g = v;\n b = n;\n break;\n\n case 3:\n r = wh;\n g = n;\n b = v;\n break;\n\n case 4:\n r = n;\n g = wh;\n b = v;\n break;\n\n case 5:\n r = v;\n g = wh;\n b = n;\n break;\n }\n\n return [r * 255, g * 255, b * 255];\n }\n\n function hwb2hsl(args) {\n return rgb2hsl(hwb2rgb(args));\n }\n\n function hwb2hsv(args) {\n return rgb2hsv(hwb2rgb(args));\n }\n\n function hwb2cmyk(args) {\n return rgb2cmyk(hwb2rgb(args));\n }\n\n function hwb2keyword(args) {\n return rgb2keyword(hwb2rgb(args));\n }\n\n function cmyk2rgb(cmyk) {\n var c = cmyk[0] / 100,\n m = cmyk[1] / 100,\n y = cmyk[2] / 100,\n k = cmyk[3] / 100,\n r,\n g,\n b;\n r = 1 - Math.min(1, c * (1 - k) + k);\n g = 1 - Math.min(1, m * (1 - k) + k);\n b = 1 - Math.min(1, y * (1 - k) + k);\n return [r * 255, g * 255, b * 255];\n }\n\n function cmyk2hsl(args) {\n return rgb2hsl(cmyk2rgb(args));\n }\n\n function cmyk2hsv(args) {\n return rgb2hsv(cmyk2rgb(args));\n }\n\n function cmyk2hwb(args) {\n return rgb2hwb(cmyk2rgb(args));\n }\n\n function cmyk2keyword(args) {\n return rgb2keyword(cmyk2rgb(args));\n }\n\n function xyz2rgb(xyz) {\n var x = xyz[0] / 100,\n y = xyz[1] / 100,\n z = xyz[2] / 100,\n r,\n g,\n b;\n r = x * 3.2406 + y * -1.5372 + z * -0.4986;\n g = x * -0.9689 + y * 1.8758 + z * 0.0415;\n b = x * 0.0557 + y * -0.2040 + z * 1.0570; // assume sRGB\n\n r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r = r * 12.92;\n g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g = g * 12.92;\n b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b = b * 12.92;\n r = Math.min(Math.max(0, r), 1);\n g = Math.min(Math.max(0, g), 1);\n b = Math.min(Math.max(0, b), 1);\n return [r * 255, g * 255, b * 255];\n }\n\n function xyz2lab(xyz) {\n var x = xyz[0],\n y = xyz[1],\n z = xyz[2],\n l,\n a,\n b;\n x /= 95.047;\n y /= 100;\n z /= 108.883;\n x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;\n y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;\n z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;\n l = 116 * y - 16;\n a = 500 * (x - y);\n b = 200 * (y - z);\n return [l, a, b];\n }\n\n function xyz2lch(args) {\n return lab2lch(xyz2lab(args));\n }\n\n function lab2xyz(lab) {\n var l = lab[0],\n a = lab[1],\n b = lab[2],\n x,\n y,\n z,\n y2;\n\n if (l <= 8) {\n y = l * 100 / 903.3;\n y2 = 7.787 * (y / 100) + 16 / 116;\n } else {\n y = 100 * Math.pow((l + 16) / 116, 3);\n y2 = Math.pow(y / 100, 1 / 3);\n }\n\n x = x / 95.047 <= 0.008856 ? x = 95.047 * (a / 500 + y2 - 16 / 116) / 7.787 : 95.047 * Math.pow(a / 500 + y2, 3);\n z = z / 108.883 <= 0.008859 ? z = 108.883 * (y2 - b / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(y2 - b / 200, 3);\n return [x, y, z];\n }\n\n function lab2lch(lab) {\n var l = lab[0],\n a = lab[1],\n b = lab[2],\n hr,\n h,\n c;\n hr = Math.atan2(b, a);\n h = hr * 360 / 2 / Math.PI;\n\n if (h < 0) {\n h += 360;\n }\n\n c = Math.sqrt(a * a + b * b);\n return [l, c, h];\n }\n\n function lab2rgb(args) {\n return xyz2rgb(lab2xyz(args));\n }\n\n function lch2lab(lch) {\n var l = lch[0],\n c = lch[1],\n h = lch[2],\n a,\n b,\n hr;\n hr = h / 360 * 2 * Math.PI;\n a = c * Math.cos(hr);\n b = c * Math.sin(hr);\n return [l, a, b];\n }\n\n function lch2xyz(args) {\n return lab2xyz(lch2lab(args));\n }\n\n function lch2rgb(args) {\n return lab2rgb(lch2lab(args));\n }\n\n function keyword2rgb(keyword) {\n return cssKeywords[keyword];\n }\n\n function keyword2hsl(args) {\n return rgb2hsl(keyword2rgb(args));\n }\n\n function keyword2hsv(args) {\n return rgb2hsv(keyword2rgb(args));\n }\n\n function keyword2hwb(args) {\n return rgb2hwb(keyword2rgb(args));\n }\n\n function keyword2cmyk(args) {\n return rgb2cmyk(keyword2rgb(args));\n }\n\n function keyword2lab(args) {\n return rgb2lab(keyword2rgb(args));\n }\n\n function keyword2xyz(args) {\n return rgb2xyz(keyword2rgb(args));\n }\n\n var cssKeywords = {\n aliceblue: [240, 248, 255],\n antiquewhite: [250, 235, 215],\n aqua: [0, 255, 255],\n aquamarine: [127, 255, 212],\n azure: [240, 255, 255],\n beige: [245, 245, 220],\n bisque: [255, 228, 196],\n black: [0, 0, 0],\n blanchedalmond: [255, 235, 205],\n blue: [0, 0, 255],\n blueviolet: [138, 43, 226],\n brown: [165, 42, 42],\n burlywood: [222, 184, 135],\n cadetblue: [95, 158, 160],\n chartreuse: [127, 255, 0],\n chocolate: [210, 105, 30],\n coral: [255, 127, 80],\n cornflowerblue: [100, 149, 237],\n cornsilk: [255, 248, 220],\n crimson: [220, 20, 60],\n cyan: [0, 255, 255],\n darkblue: [0, 0, 139],\n darkcyan: [0, 139, 139],\n darkgoldenrod: [184, 134, 11],\n darkgray: [169, 169, 169],\n darkgreen: [0, 100, 0],\n darkgrey: [169, 169, 169],\n darkkhaki: [189, 183, 107],\n darkmagenta: [139, 0, 139],\n darkolivegreen: [85, 107, 47],\n darkorange: [255, 140, 0],\n darkorchid: [153, 50, 204],\n darkred: [139, 0, 0],\n darksalmon: [233, 150, 122],\n darkseagreen: [143, 188, 143],\n darkslateblue: [72, 61, 139],\n darkslategray: [47, 79, 79],\n darkslategrey: [47, 79, 79],\n darkturquoise: [0, 206, 209],\n darkviolet: [148, 0, 211],\n deeppink: [255, 20, 147],\n deepskyblue: [0, 191, 255],\n dimgray: [105, 105, 105],\n dimgrey: [105, 105, 105],\n dodgerblue: [30, 144, 255],\n firebrick: [178, 34, 34],\n floralwhite: [255, 250, 240],\n forestgreen: [34, 139, 34],\n fuchsia: [255, 0, 255],\n gainsboro: [220, 220, 220],\n ghostwhite: [248, 248, 255],\n gold: [255, 215, 0],\n goldenrod: [218, 165, 32],\n gray: [128, 128, 128],\n green: [0, 128, 0],\n greenyellow: [173, 255, 47],\n grey: [128, 128, 128],\n honeydew: [240, 255, 240],\n hotpink: [255, 105, 180],\n indianred: [205, 92, 92],\n indigo: [75, 0, 130],\n ivory: [255, 255, 240],\n khaki: [240, 230, 140],\n lavender: [230, 230, 250],\n lavenderblush: [255, 240, 245],\n lawngreen: [124, 252, 0],\n lemonchiffon: [255, 250, 205],\n lightblue: [173, 216, 230],\n lightcoral: [240, 128, 128],\n lightcyan: [224, 255, 255],\n lightgoldenrodyellow: [250, 250, 210],\n lightgray: [211, 211, 211],\n lightgreen: [144, 238, 144],\n lightgrey: [211, 211, 211],\n lightpink: [255, 182, 193],\n lightsalmon: [255, 160, 122],\n lightseagreen: [32, 178, 170],\n lightskyblue: [135, 206, 250],\n lightslategray: [119, 136, 153],\n lightslategrey: [119, 136, 153],\n lightsteelblue: [176, 196, 222],\n lightyellow: [255, 255, 224],\n lime: [0, 255, 0],\n limegreen: [50, 205, 50],\n linen: [250, 240, 230],\n magenta: [255, 0, 255],\n maroon: [128, 0, 0],\n mediumaquamarine: [102, 205, 170],\n mediumblue: [0, 0, 205],\n mediumorchid: [186, 85, 211],\n mediumpurple: [147, 112, 219],\n mediumseagreen: [60, 179, 113],\n mediumslateblue: [123, 104, 238],\n mediumspringgreen: [0, 250, 154],\n mediumturquoise: [72, 209, 204],\n mediumvioletred: [199, 21, 133],\n midnightblue: [25, 25, 112],\n mintcream: [245, 255, 250],\n mistyrose: [255, 228, 225],\n moccasin: [255, 228, 181],\n navajowhite: [255, 222, 173],\n navy: [0, 0, 128],\n oldlace: [253, 245, 230],\n olive: [128, 128, 0],\n olivedrab: [107, 142, 35],\n orange: [255, 165, 0],\n orangered: [255, 69, 0],\n orchid: [218, 112, 214],\n palegoldenrod: [238, 232, 170],\n palegreen: [152, 251, 152],\n paleturquoise: [175, 238, 238],\n palevioletred: [219, 112, 147],\n papayawhip: [255, 239, 213],\n peachpuff: [255, 218, 185],\n peru: [205, 133, 63],\n pink: [255, 192, 203],\n plum: [221, 160, 221],\n powderblue: [176, 224, 230],\n purple: [128, 0, 128],\n rebeccapurple: [102, 51, 153],\n red: [255, 0, 0],\n rosybrown: [188, 143, 143],\n royalblue: [65, 105, 225],\n saddlebrown: [139, 69, 19],\n salmon: [250, 128, 114],\n sandybrown: [244, 164, 96],\n seagreen: [46, 139, 87],\n seashell: [255, 245, 238],\n sienna: [160, 82, 45],\n silver: [192, 192, 192],\n skyblue: [135, 206, 235],\n slateblue: [106, 90, 205],\n slategray: [112, 128, 144],\n slategrey: [112, 128, 144],\n snow: [255, 250, 250],\n springgreen: [0, 255, 127],\n steelblue: [70, 130, 180],\n tan: [210, 180, 140],\n teal: [0, 128, 128],\n thistle: [216, 191, 216],\n tomato: [255, 99, 71],\n turquoise: [64, 224, 208],\n violet: [238, 130, 238],\n wheat: [245, 222, 179],\n white: [255, 255, 255],\n whitesmoke: [245, 245, 245],\n yellow: [255, 255, 0],\n yellowgreen: [154, 205, 50]\n };\n var reverseKeywords = {};\n\n for (var key in cssKeywords) {\n reverseKeywords[JSON.stringify(cssKeywords[key])] = key;\n }\n\n var convert = function convert() {\n return new Converter();\n };\n\n for (var func in conversions) {\n // export Raw versions\n convert[func + \"Raw\"] = function (func) {\n // accept array or plain args\n return function (arg) {\n if (typeof arg == \"number\") arg = Array.prototype.slice.call(arguments);\n return conversions[func](arg);\n };\n }(func);\n\n var pair = /(\\w+)2(\\w+)/.exec(func),\n from = pair[1],\n to = pair[2]; // export rgb2hsl and [\"rgb\"][\"hsl\"]\n\n convert[from] = convert[from] || {};\n\n convert[from][to] = convert[func] = function (func) {\n return function (arg) {\n if (typeof arg == \"number\") arg = Array.prototype.slice.call(arguments);\n var val = conversions[func](arg);\n if (typeof val == \"string\" || val === undefined) return val; // keyword\n\n for (var i = 0; i < val.length; i++) {\n val[i] = Math.round(val[i]);\n }\n\n return val;\n };\n }(func);\n }\n /* Converter does lazy conversion and caching */\n\n\n var Converter = function Converter() {\n this.convs = {};\n };\n /* Either get the values for a space or\n set the values for a space, depending on args */\n\n\n Converter.prototype.routeSpace = function (space, args) {\n var values = args[0];\n\n if (values === undefined) {\n // color.rgb()\n return this.getValues(space);\n } // color.rgb(10, 10, 10)\n\n\n if (typeof values == \"number\") {\n values = Array.prototype.slice.call(args);\n }\n\n return this.setValues(space, values);\n };\n /* Set the values for a space, invalidating cache */\n\n\n Converter.prototype.setValues = function (space, values) {\n this.space = space;\n this.convs = {};\n this.convs[space] = values;\n return this;\n };\n /* Get the values for a space. If there's already\n a conversion for the space, fetch it, otherwise\n compute it */\n\n\n Converter.prototype.getValues = function (space) {\n var vals = this.convs[space];\n\n if (!vals) {\n var fspace = this.space,\n from = this.convs[fspace];\n vals = convert[fspace][space](from);\n this.convs[space] = vals;\n }\n\n return vals;\n };\n\n [\"rgb\", \"hsl\", \"hsv\", \"cmyk\", \"keyword\"].forEach(function (space) {\n Converter.prototype[space] = function (vals) {\n return this.routeSpace(space, arguments);\n };\n });\n var colorConvert = convert;\n var colorName = {\n \"aliceblue\": [240, 248, 255],\n \"antiquewhite\": [250, 235, 215],\n \"aqua\": [0, 255, 255],\n \"aquamarine\": [127, 255, 212],\n \"azure\": [240, 255, 255],\n \"beige\": [245, 245, 220],\n \"bisque\": [255, 228, 196],\n \"black\": [0, 0, 0],\n \"blanchedalmond\": [255, 235, 205],\n \"blue\": [0, 0, 255],\n \"blueviolet\": [138, 43, 226],\n \"brown\": [165, 42, 42],\n \"burlywood\": [222, 184, 135],\n \"cadetblue\": [95, 158, 160],\n \"chartreuse\": [127, 255, 0],\n \"chocolate\": [210, 105, 30],\n \"coral\": [255, 127, 80],\n \"cornflowerblue\": [100, 149, 237],\n \"cornsilk\": [255, 248, 220],\n \"crimson\": [220, 20, 60],\n \"cyan\": [0, 255, 255],\n \"darkblue\": [0, 0, 139],\n \"darkcyan\": [0, 139, 139],\n \"darkgoldenrod\": [184, 134, 11],\n \"darkgray\": [169, 169, 169],\n \"darkgreen\": [0, 100, 0],\n \"darkgrey\": [169, 169, 169],\n \"darkkhaki\": [189, 183, 107],\n \"darkmagenta\": [139, 0, 139],\n \"darkolivegreen\": [85, 107, 47],\n \"darkorange\": [255, 140, 0],\n \"darkorchid\": [153, 50, 204],\n \"darkred\": [139, 0, 0],\n \"darksalmon\": [233, 150, 122],\n \"darkseagreen\": [143, 188, 143],\n \"darkslateblue\": [72, 61, 139],\n \"darkslategray\": [47, 79, 79],\n \"darkslategrey\": [47, 79, 79],\n \"darkturquoise\": [0, 206, 209],\n \"darkviolet\": [148, 0, 211],\n \"deeppink\": [255, 20, 147],\n \"deepskyblue\": [0, 191, 255],\n \"dimgray\": [105, 105, 105],\n \"dimgrey\": [105, 105, 105],\n \"dodgerblue\": [30, 144, 255],\n \"firebrick\": [178, 34, 34],\n \"floralwhite\": [255, 250, 240],\n \"forestgreen\": [34, 139, 34],\n \"fuchsia\": [255, 0, 255],\n \"gainsboro\": [220, 220, 220],\n \"ghostwhite\": [248, 248, 255],\n \"gold\": [255, 215, 0],\n \"goldenrod\": [218, 165, 32],\n \"gray\": [128, 128, 128],\n \"green\": [0, 128, 0],\n \"greenyellow\": [173, 255, 47],\n \"grey\": [128, 128, 128],\n \"honeydew\": [240, 255, 240],\n \"hotpink\": [255, 105, 180],\n \"indianred\": [205, 92, 92],\n \"indigo\": [75, 0, 130],\n \"ivory\": [255, 255, 240],\n \"khaki\": [240, 230, 140],\n \"lavender\": [230, 230, 250],\n \"lavenderblush\": [255, 240, 245],\n \"lawngreen\": [124, 252, 0],\n \"lemonchiffon\": [255, 250, 205],\n \"lightblue\": [173, 216, 230],\n \"lightcoral\": [240, 128, 128],\n \"lightcyan\": [224, 255, 255],\n \"lightgoldenrodyellow\": [250, 250, 210],\n \"lightgray\": [211, 211, 211],\n \"lightgreen\": [144, 238, 144],\n \"lightgrey\": [211, 211, 211],\n \"lightpink\": [255, 182, 193],\n \"lightsalmon\": [255, 160, 122],\n \"lightseagreen\": [32, 178, 170],\n \"lightskyblue\": [135, 206, 250],\n \"lightslategray\": [119, 136, 153],\n \"lightslategrey\": [119, 136, 153],\n \"lightsteelblue\": [176, 196, 222],\n \"lightyellow\": [255, 255, 224],\n \"lime\": [0, 255, 0],\n \"limegreen\": [50, 205, 50],\n \"linen\": [250, 240, 230],\n \"magenta\": [255, 0, 255],\n \"maroon\": [128, 0, 0],\n \"mediumaquamarine\": [102, 205, 170],\n \"mediumblue\": [0, 0, 205],\n \"mediumorchid\": [186, 85, 211],\n \"mediumpurple\": [147, 112, 219],\n \"mediumseagreen\": [60, 179, 113],\n \"mediumslateblue\": [123, 104, 238],\n \"mediumspringgreen\": [0, 250, 154],\n \"mediumturquoise\": [72, 209, 204],\n \"mediumvioletred\": [199, 21, 133],\n \"midnightblue\": [25, 25, 112],\n \"mintcream\": [245, 255, 250],\n \"mistyrose\": [255, 228, 225],\n \"moccasin\": [255, 228, 181],\n \"navajowhite\": [255, 222, 173],\n \"navy\": [0, 0, 128],\n \"oldlace\": [253, 245, 230],\n \"olive\": [128, 128, 0],\n \"olivedrab\": [107, 142, 35],\n \"orange\": [255, 165, 0],\n \"orangered\": [255, 69, 0],\n \"orchid\": [218, 112, 214],\n \"palegoldenrod\": [238, 232, 170],\n \"palegreen\": [152, 251, 152],\n \"paleturquoise\": [175, 238, 238],\n \"palevioletred\": [219, 112, 147],\n \"papayawhip\": [255, 239, 213],\n \"peachpuff\": [255, 218, 185],\n \"peru\": [205, 133, 63],\n \"pink\": [255, 192, 203],\n \"plum\": [221, 160, 221],\n \"powderblue\": [176, 224, 230],\n \"purple\": [128, 0, 128],\n \"rebeccapurple\": [102, 51, 153],\n \"red\": [255, 0, 0],\n \"rosybrown\": [188, 143, 143],\n \"royalblue\": [65, 105, 225],\n \"saddlebrown\": [139, 69, 19],\n \"salmon\": [250, 128, 114],\n \"sandybrown\": [244, 164, 96],\n \"seagreen\": [46, 139, 87],\n \"seashell\": [255, 245, 238],\n \"sienna\": [160, 82, 45],\n \"silver\": [192, 192, 192],\n \"skyblue\": [135, 206, 235],\n \"slateblue\": [106, 90, 205],\n \"slategray\": [112, 128, 144],\n \"slategrey\": [112, 128, 144],\n \"snow\": [255, 250, 250],\n \"springgreen\": [0, 255, 127],\n \"steelblue\": [70, 130, 180],\n \"tan\": [210, 180, 140],\n \"teal\": [0, 128, 128],\n \"thistle\": [216, 191, 216],\n \"tomato\": [255, 99, 71],\n \"turquoise\": [64, 224, 208],\n \"violet\": [238, 130, 238],\n \"wheat\": [245, 222, 179],\n \"white\": [255, 255, 255],\n \"whitesmoke\": [245, 245, 245],\n \"yellow\": [255, 255, 0],\n \"yellowgreen\": [154, 205, 50]\n };\n /* MIT license */\n\n var colorString = {\n getRgba: getRgba,\n getHsla: getHsla,\n getRgb: getRgb,\n getHsl: getHsl,\n getHwb: getHwb,\n getAlpha: getAlpha,\n hexString: hexString,\n rgbString: rgbString,\n rgbaString: rgbaString,\n percentString: percentString,\n percentaString: percentaString,\n hslString: hslString,\n hslaString: hslaString,\n hwbString: hwbString,\n keyword: keyword\n };\n\n function getRgba(string) {\n if (!string) {\n return;\n }\n\n var abbr = /^#([a-fA-F0-9]{3,4})$/i,\n hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n keyword = /(\\w+)/;\n var rgb = [0, 0, 0],\n a = 1,\n match = string.match(abbr),\n hexAlpha = \"\";\n\n if (match) {\n match = match[1];\n hexAlpha = match[3];\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i] + match[i], 16);\n }\n\n if (hexAlpha) {\n a = Math.round(parseInt(hexAlpha + hexAlpha, 16) / 255 * 100) / 100;\n }\n } else if (match = string.match(hex)) {\n hexAlpha = match[2];\n match = match[1];\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n }\n\n if (hexAlpha) {\n a = Math.round(parseInt(hexAlpha, 16) / 255 * 100) / 100;\n }\n } else if (match = string.match(rgba)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = parseInt(match[i + 1]);\n }\n\n a = parseFloat(match[4]);\n } else if (match = string.match(per)) {\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n }\n\n a = parseFloat(match[4]);\n } else if (match = string.match(keyword)) {\n if (match[1] == \"transparent\") {\n return [0, 0, 0, 0];\n }\n\n rgb = colorName[match[1]];\n\n if (!rgb) {\n return;\n }\n }\n\n for (var i = 0; i < rgb.length; i++) {\n rgb[i] = scale(rgb[i], 0, 255);\n }\n\n if (!a && a != 0) {\n a = 1;\n } else {\n a = scale(a, 0, 1);\n }\n\n rgb[3] = a;\n return rgb;\n }\n\n function getHsla(string) {\n if (!string) {\n return;\n }\n\n var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hsl);\n\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n s = scale(parseFloat(match[2]), 0, 100),\n l = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, s, l, a];\n }\n }\n\n function getHwb(string) {\n if (!string) {\n return;\n }\n\n var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n var match = string.match(hwb);\n\n if (match) {\n var alpha = parseFloat(match[4]);\n var h = scale(parseInt(match[1]), 0, 360),\n w = scale(parseFloat(match[2]), 0, 100),\n b = scale(parseFloat(match[3]), 0, 100),\n a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n return [h, w, b, a];\n }\n }\n\n function getRgb(string) {\n var rgba = getRgba(string);\n return rgba && rgba.slice(0, 3);\n }\n\n function getHsl(string) {\n var hsla = getHsla(string);\n return hsla && hsla.slice(0, 3);\n }\n\n function getAlpha(string) {\n var vals = getRgba(string);\n\n if (vals) {\n return vals[3];\n } else if (vals = getHsla(string)) {\n return vals[3];\n } else if (vals = getHwb(string)) {\n return vals[3];\n }\n } // generators\n\n\n function hexString(rgba, a) {\n var a = a !== undefined && rgba.length === 3 ? a : rgba[3];\n return \"#\" + hexDouble(rgba[0]) + hexDouble(rgba[1]) + hexDouble(rgba[2]) + (a >= 0 && a < 1 ? hexDouble(Math.round(a * 255)) : \"\");\n }\n\n function rgbString(rgba, alpha) {\n if (alpha < 1 || rgba[3] && rgba[3] < 1) {\n return rgbaString(rgba, alpha);\n }\n\n return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n }\n\n function rgbaString(rgba, alpha) {\n if (alpha === undefined) {\n alpha = rgba[3] !== undefined ? rgba[3] : 1;\n }\n\n return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \", \" + alpha + \")\";\n }\n\n function percentString(rgba, alpha) {\n if (alpha < 1 || rgba[3] && rgba[3] < 1) {\n return percentaString(rgba, alpha);\n }\n\n var r = Math.round(rgba[0] / 255 * 100),\n g = Math.round(rgba[1] / 255 * 100),\n b = Math.round(rgba[2] / 255 * 100);\n return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n }\n\n function percentaString(rgba, alpha) {\n var r = Math.round(rgba[0] / 255 * 100),\n g = Math.round(rgba[1] / 255 * 100),\n b = Math.round(rgba[2] / 255 * 100);\n return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n }\n\n function hslString(hsla, alpha) {\n if (alpha < 1 || hsla[3] && hsla[3] < 1) {\n return hslaString(hsla, alpha);\n }\n\n return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n }\n\n function hslaString(hsla, alpha) {\n if (alpha === undefined) {\n alpha = hsla[3] !== undefined ? hsla[3] : 1;\n }\n\n return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \" + alpha + \")\";\n } // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n // (hwb have alpha optional & 1 is default value)\n\n\n function hwbString(hwb, alpha) {\n if (alpha === undefined) {\n alpha = hwb[3] !== undefined ? hwb[3] : 1;\n }\n\n return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\" + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n }\n\n function keyword(rgb) {\n return reverseNames[rgb.slice(0, 3)];\n } // helpers\n\n\n function scale(num, min, max) {\n return Math.min(Math.max(min, num), max);\n }\n\n function hexDouble(num) {\n var str = num.toString(16).toUpperCase();\n return str.length < 2 ? \"0\" + str : str;\n } //create a list of reverse color names\n\n\n var reverseNames = {};\n\n for (var name in colorName) {\n reverseNames[colorName[name]] = name;\n }\n /* MIT license */\n\n\n var Color = function Color(obj) {\n if (obj instanceof Color) {\n return obj;\n }\n\n if (!(this instanceof Color)) {\n return new Color(obj);\n }\n\n this.valid = false;\n this.values = {\n rgb: [0, 0, 0],\n hsl: [0, 0, 0],\n hsv: [0, 0, 0],\n hwb: [0, 0, 0],\n cmyk: [0, 0, 0, 0],\n alpha: 1\n }; // parse Color() argument\n\n var vals;\n\n if (typeof obj === 'string') {\n vals = colorString.getRgba(obj);\n\n if (vals) {\n this.setValues('rgb', vals);\n } else if (vals = colorString.getHsla(obj)) {\n this.setValues('hsl', vals);\n } else if (vals = colorString.getHwb(obj)) {\n this.setValues('hwb', vals);\n }\n } else if (typeof obj === 'object') {\n vals = obj;\n\n if (vals.r !== undefined || vals.red !== undefined) {\n this.setValues('rgb', vals);\n } else if (vals.l !== undefined || vals.lightness !== undefined) {\n this.setValues('hsl', vals);\n } else if (vals.v !== undefined || vals.value !== undefined) {\n this.setValues('hsv', vals);\n } else if (vals.w !== undefined || vals.whiteness !== undefined) {\n this.setValues('hwb', vals);\n } else if (vals.c !== undefined || vals.cyan !== undefined) {\n this.setValues('cmyk', vals);\n }\n }\n };\n\n Color.prototype = {\n isValid: function isValid() {\n return this.valid;\n },\n rgb: function rgb() {\n return this.setSpace('rgb', arguments);\n },\n hsl: function hsl() {\n return this.setSpace('hsl', arguments);\n },\n hsv: function hsv() {\n return this.setSpace('hsv', arguments);\n },\n hwb: function hwb() {\n return this.setSpace('hwb', arguments);\n },\n cmyk: function cmyk() {\n return this.setSpace('cmyk', arguments);\n },\n rgbArray: function rgbArray() {\n return this.values.rgb;\n },\n hslArray: function hslArray() {\n return this.values.hsl;\n },\n hsvArray: function hsvArray() {\n return this.values.hsv;\n },\n hwbArray: function hwbArray() {\n var values = this.values;\n\n if (values.alpha !== 1) {\n return values.hwb.concat([values.alpha]);\n }\n\n return values.hwb;\n },\n cmykArray: function cmykArray() {\n return this.values.cmyk;\n },\n rgbaArray: function rgbaArray() {\n var values = this.values;\n return values.rgb.concat([values.alpha]);\n },\n hslaArray: function hslaArray() {\n var values = this.values;\n return values.hsl.concat([values.alpha]);\n },\n alpha: function alpha(val) {\n if (val === undefined) {\n return this.values.alpha;\n }\n\n this.setValues('alpha', val);\n return this;\n },\n red: function red(val) {\n return this.setChannel('rgb', 0, val);\n },\n green: function green(val) {\n return this.setChannel('rgb', 1, val);\n },\n blue: function blue(val) {\n return this.setChannel('rgb', 2, val);\n },\n hue: function hue(val) {\n if (val) {\n val %= 360;\n val = val < 0 ? 360 + val : val;\n }\n\n return this.setChannel('hsl', 0, val);\n },\n saturation: function saturation(val) {\n return this.setChannel('hsl', 1, val);\n },\n lightness: function lightness(val) {\n return this.setChannel('hsl', 2, val);\n },\n saturationv: function saturationv(val) {\n return this.setChannel('hsv', 1, val);\n },\n whiteness: function whiteness(val) {\n return this.setChannel('hwb', 1, val);\n },\n blackness: function blackness(val) {\n return this.setChannel('hwb', 2, val);\n },\n value: function value(val) {\n return this.setChannel('hsv', 2, val);\n },\n cyan: function cyan(val) {\n return this.setChannel('cmyk', 0, val);\n },\n magenta: function magenta(val) {\n return this.setChannel('cmyk', 1, val);\n },\n yellow: function yellow(val) {\n return this.setChannel('cmyk', 2, val);\n },\n black: function black(val) {\n return this.setChannel('cmyk', 3, val);\n },\n hexString: function hexString() {\n return colorString.hexString(this.values.rgb);\n },\n rgbString: function rgbString() {\n return colorString.rgbString(this.values.rgb, this.values.alpha);\n },\n rgbaString: function rgbaString() {\n return colorString.rgbaString(this.values.rgb, this.values.alpha);\n },\n percentString: function percentString() {\n return colorString.percentString(this.values.rgb, this.values.alpha);\n },\n hslString: function hslString() {\n return colorString.hslString(this.values.hsl, this.values.alpha);\n },\n hslaString: function hslaString() {\n return colorString.hslaString(this.values.hsl, this.values.alpha);\n },\n hwbString: function hwbString() {\n return colorString.hwbString(this.values.hwb, this.values.alpha);\n },\n keyword: function keyword() {\n return colorString.keyword(this.values.rgb, this.values.alpha);\n },\n rgbNumber: function rgbNumber() {\n var rgb = this.values.rgb;\n return rgb[0] << 16 | rgb[1] << 8 | rgb[2];\n },\n luminosity: function luminosity() {\n // http://www.w3.org/TR/WCAG20/#relativeluminancedef\n var rgb = this.values.rgb;\n var lum = [];\n\n for (var i = 0; i < rgb.length; i++) {\n var chan = rgb[i] / 255;\n lum[i] = chan <= 0.03928 ? chan / 12.92 : Math.pow((chan + 0.055) / 1.055, 2.4);\n }\n\n return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n },\n contrast: function contrast(color2) {\n // http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n var lum1 = this.luminosity();\n var lum2 = color2.luminosity();\n\n if (lum1 > lum2) {\n return (lum1 + 0.05) / (lum2 + 0.05);\n }\n\n return (lum2 + 0.05) / (lum1 + 0.05);\n },\n level: function level(color2) {\n var contrastRatio = this.contrast(color2);\n\n if (contrastRatio >= 7.1) {\n return 'AAA';\n }\n\n return contrastRatio >= 4.5 ? 'AA' : '';\n },\n dark: function dark() {\n // YIQ equation from http://24ways.org/2010/calculating-color-contrast\n var rgb = this.values.rgb;\n var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n return yiq < 128;\n },\n light: function light() {\n return !this.dark();\n },\n negate: function negate() {\n var rgb = [];\n\n for (var i = 0; i < 3; i++) {\n rgb[i] = 255 - this.values.rgb[i];\n }\n\n this.setValues('rgb', rgb);\n return this;\n },\n lighten: function lighten(ratio) {\n var hsl = this.values.hsl;\n hsl[2] += hsl[2] * ratio;\n this.setValues('hsl', hsl);\n return this;\n },\n darken: function darken(ratio) {\n var hsl = this.values.hsl;\n hsl[2] -= hsl[2] * ratio;\n this.setValues('hsl', hsl);\n return this;\n },\n saturate: function saturate(ratio) {\n var hsl = this.values.hsl;\n hsl[1] += hsl[1] * ratio;\n this.setValues('hsl', hsl);\n return this;\n },\n desaturate: function desaturate(ratio) {\n var hsl = this.values.hsl;\n hsl[1] -= hsl[1] * ratio;\n this.setValues('hsl', hsl);\n return this;\n },\n whiten: function whiten(ratio) {\n var hwb = this.values.hwb;\n hwb[1] += hwb[1] * ratio;\n this.setValues('hwb', hwb);\n return this;\n },\n blacken: function blacken(ratio) {\n var hwb = this.values.hwb;\n hwb[2] += hwb[2] * ratio;\n this.setValues('hwb', hwb);\n return this;\n },\n greyscale: function greyscale() {\n var rgb = this.values.rgb; // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n\n var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n this.setValues('rgb', [val, val, val]);\n return this;\n },\n clearer: function clearer(ratio) {\n var alpha = this.values.alpha;\n this.setValues('alpha', alpha - alpha * ratio);\n return this;\n },\n opaquer: function opaquer(ratio) {\n var alpha = this.values.alpha;\n this.setValues('alpha', alpha + alpha * ratio);\n return this;\n },\n rotate: function rotate(degrees) {\n var hsl = this.values.hsl;\n var hue = (hsl[0] + degrees) % 360;\n hsl[0] = hue < 0 ? 360 + hue : hue;\n this.setValues('hsl', hsl);\n return this;\n },\n\n /**\n * Ported from sass implementation in C\n * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n */\n mix: function mix(mixinColor, weight) {\n var color1 = this;\n var color2 = mixinColor;\n var p = weight === undefined ? 0.5 : weight;\n var w = 2 * p - 1;\n var a = color1.alpha() - color2.alpha();\n var w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n var w2 = 1 - w1;\n return this.rgb(w1 * color1.red() + w2 * color2.red(), w1 * color1.green() + w2 * color2.green(), w1 * color1.blue() + w2 * color2.blue()).alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n },\n toJSON: function toJSON() {\n return this.rgb();\n },\n clone: function clone() {\n // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n // making the final build way to big to embed in Chart.js. So let's do it manually,\n // assuming that values to clone are 1 dimension arrays containing only numbers,\n // except 'alpha' which is a number.\n var result = new Color();\n var source = this.values;\n var target = result.values;\n var value, type;\n\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n value = source[prop];\n type = {}.toString.call(value);\n\n if (type === '[object Array]') {\n target[prop] = value.slice(0);\n } else if (type === '[object Number]') {\n target[prop] = value;\n } else {\n console.error('unexpected color value:', value);\n }\n }\n }\n\n return result;\n }\n };\n Color.prototype.spaces = {\n rgb: ['red', 'green', 'blue'],\n hsl: ['hue', 'saturation', 'lightness'],\n hsv: ['hue', 'saturation', 'value'],\n hwb: ['hue', 'whiteness', 'blackness'],\n cmyk: ['cyan', 'magenta', 'yellow', 'black']\n };\n Color.prototype.maxes = {\n rgb: [255, 255, 255],\n hsl: [360, 100, 100],\n hsv: [360, 100, 100],\n hwb: [360, 100, 100],\n cmyk: [100, 100, 100, 100]\n };\n\n Color.prototype.getValues = function (space) {\n var values = this.values;\n var vals = {};\n\n for (var i = 0; i < space.length; i++) {\n vals[space.charAt(i)] = values[space][i];\n }\n\n if (values.alpha !== 1) {\n vals.a = values.alpha;\n } // {r: 255, g: 255, b: 255, a: 0.4}\n\n\n return vals;\n };\n\n Color.prototype.setValues = function (space, vals) {\n var values = this.values;\n var spaces = this.spaces;\n var maxes = this.maxes;\n var alpha = 1;\n var i;\n this.valid = true;\n\n if (space === 'alpha') {\n alpha = vals;\n } else if (vals.length) {\n // [10, 10, 10]\n values[space] = vals.slice(0, space.length);\n alpha = vals[space.length];\n } else if (vals[space.charAt(0)] !== undefined) {\n // {r: 10, g: 10, b: 10}\n for (i = 0; i < space.length; i++) {\n values[space][i] = vals[space.charAt(i)];\n }\n\n alpha = vals.a;\n } else if (vals[spaces[space][0]] !== undefined) {\n // {red: 10, green: 10, blue: 10}\n var chans = spaces[space];\n\n for (i = 0; i < space.length; i++) {\n values[space][i] = vals[chans[i]];\n }\n\n alpha = vals.alpha;\n }\n\n values.alpha = Math.max(0, Math.min(1, alpha === undefined ? values.alpha : alpha));\n\n if (space === 'alpha') {\n return false;\n }\n\n var capped; // cap values of the space prior converting all values\n\n for (i = 0; i < space.length; i++) {\n capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n values[space][i] = Math.round(capped);\n } // convert to all the other color spaces\n\n\n for (var sname in spaces) {\n if (sname !== space) {\n values[sname] = colorConvert[space][sname](values[space]);\n }\n }\n\n return true;\n };\n\n Color.prototype.setSpace = function (space, args) {\n var vals = args[0];\n\n if (vals === undefined) {\n // color.rgb()\n return this.getValues(space);\n } // color.rgb(10, 10, 10)\n\n\n if (typeof vals === 'number') {\n vals = Array.prototype.slice.call(args);\n }\n\n this.setValues(space, vals);\n return this;\n };\n\n Color.prototype.setChannel = function (space, index, val) {\n var svalues = this.values[space];\n\n if (val === undefined) {\n // color.red()\n return svalues[index];\n } else if (val === svalues[index]) {\n // color.red(color.red())\n return this;\n } // color.red(100)\n\n\n svalues[index] = val;\n this.setValues(space, svalues);\n return this;\n };\n\n if (typeof window !== 'undefined') {\n window.Color = Color;\n }\n\n var chartjsColor = Color;\n /**\n * @namespace Chart.helpers\n */\n\n var helpers = {\n /**\n * An empty function that can be used, for example, for optional callback.\n */\n noop: function noop() {},\n\n /**\n * Returns a unique id, sequentially generated from a global variable.\n * @returns {number}\n * @function\n */\n uid: function () {\n var id = 0;\n return function () {\n return id++;\n };\n }(),\n\n /**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param {*} value - The value to test.\n * @returns {boolean}\n * @since 2.7.0\n */\n isNullOrUndef: function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n },\n\n /**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param {*} value - The value to test.\n * @returns {boolean}\n * @function\n */\n isArray: function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n\n var type = Object.prototype.toString.call(value);\n\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n\n return false;\n },\n\n /**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param {*} value - The value to test.\n * @returns {boolean}\n * @since 2.7.0\n */\n isObject: function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n },\n\n /**\n * Returns true if `value` is a finite number, else returns false\n * @param {*} value - The value to test.\n * @returns {boolean}\n */\n isFinite: function (_isFinite) {\n function isFinite(_x) {\n return _isFinite.apply(this, arguments);\n }\n\n isFinite.toString = function () {\n return _isFinite.toString();\n };\n\n return isFinite;\n }(function (value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(value);\n }),\n\n /**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param {*} value - The value to return if defined.\n * @param {*} defaultValue - The value to return if `value` is undefined.\n * @returns {*}\n */\n valueOrDefault: function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n },\n\n /**\n * Returns value at the given `index` in array if defined, else returns `defaultValue`.\n * @param {Array} value - The array to lookup for value at `index`.\n * @param {number} index - The index in `value` to lookup for value.\n * @param {*} defaultValue - The value to return if `value[index]` is undefined.\n * @returns {*}\n */\n valueAtIndexOrDefault: function valueAtIndexOrDefault(value, index, defaultValue) {\n return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n },\n\n /**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param {function} fn - The function to call.\n * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\n * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\n * @returns {*}\n */\n callback: function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n },\n\n /**\n * Note(SB) for performance sake, this method should only be used when loopable type\n * is unknown or in none intensive code (not called often and small loopable). Else\n * it's preferable to use a regular for() loop and save extra function calls.\n * @param {object|Array} loopable - The object or array to be iterated.\n * @param {function} fn - The function to call for each item.\n * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\n * @param {boolean} [reverse] - If true, iterates backward on the loopable.\n */\n each: function each(loopable, fn, thisArg, reverse) {\n var i, len, keys;\n\n if (helpers.isArray(loopable)) {\n len = loopable.length;\n\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (helpers.isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n },\n\n /**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @see https://stackoverflow.com/a/14853974\n * @param {Array} a0 - The array to compare\n * @param {Array} a1 - The array to compare\n * @returns {boolean}\n */\n arrayEquals: function arrayEquals(a0, a1) {\n var i, ilen, v0, v1;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0 instanceof Array && v1 instanceof Array) {\n if (!helpers.arrayEquals(v0, v1)) {\n return false;\n }\n } else if (v0 !== v1) {\n // NOTE: two different object instances will never be equal: {x:20} != {x:20}\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param {*} source - The value to clone.\n * @returns {*}\n */\n clone: function clone(source) {\n if (helpers.isArray(source)) {\n return source.map(helpers.clone);\n }\n\n if (helpers.isObject(source)) {\n var target = {};\n var keys = Object.keys(source);\n var klen = keys.length;\n var k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = helpers.clone(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n },\n\n /**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */\n _merger: function _merger(key, target, source, options) {\n var tval = target[key];\n var sval = source[key];\n\n if (helpers.isObject(tval) && helpers.isObject(sval)) {\n helpers.merge(tval, sval, options);\n } else {\n target[key] = helpers.clone(sval);\n }\n },\n\n /**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */\n _mergerIf: function _mergerIf(key, target, source) {\n var tval = target[key];\n var sval = source[key];\n\n if (helpers.isObject(tval) && helpers.isObject(sval)) {\n helpers.mergeIf(tval, sval);\n } else if (!target.hasOwnProperty(key)) {\n target[key] = helpers.clone(sval);\n }\n },\n\n /**\n * Recursively deep copies `source` properties into `target` with the given `options`.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param {object} target - The target object in which all sources are merged into.\n * @param {object|object[]} source - Object(s) to merge into `target`.\n * @param {object} [options] - Merging options:\n * @param {function} [options.merger] - The merge method (key, target, source, options)\n * @returns {object} The `target` object.\n */\n merge: function merge(target, source, options) {\n var sources = helpers.isArray(source) ? source : [source];\n var ilen = sources.length;\n var merge, i, keys, klen, k;\n\n if (!helpers.isObject(target)) {\n return target;\n }\n\n options = options || {};\n merge = options.merger || helpers._merger;\n\n for (i = 0; i < ilen; ++i) {\n source = sources[i];\n\n if (!helpers.isObject(source)) {\n continue;\n }\n\n keys = Object.keys(source);\n\n for (k = 0, klen = keys.length; k < klen; ++k) {\n merge(keys[k], target, source, options);\n }\n }\n\n return target;\n },\n\n /**\n * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n * @param {object} target - The target object in which all sources are merged into.\n * @param {object|object[]} source - Object(s) to merge into `target`.\n * @returns {object} The `target` object.\n */\n mergeIf: function mergeIf(target, source) {\n return helpers.merge(target, source, {\n merger: helpers._mergerIf\n });\n },\n\n /**\n * Applies the contents of two or more objects together into the first object.\n * @param {object} target - The target object in which all objects are merged into.\n * @param {object} arg1 - Object containing additional properties to merge in target.\n * @param {object} argN - Additional objects containing properties to merge in target.\n * @returns {object} The `target` object.\n */\n extend: function extend(target) {\n var setFn = function setFn(value, key) {\n target[key] = value;\n };\n\n for (var i = 1, ilen = arguments.length; i < ilen; ++i) {\n helpers.each(arguments[i], setFn);\n }\n\n return target;\n },\n\n /**\n * Basic javascript inheritance based on the model created in Backbone.js\n */\n inherits: function inherits(extensions) {\n var me = this;\n var ChartElement = extensions && extensions.hasOwnProperty('constructor') ? extensions.constructor : function () {\n return me.apply(this, arguments);\n };\n\n var Surrogate = function Surrogate() {\n this.constructor = ChartElement;\n };\n\n Surrogate.prototype = me.prototype;\n ChartElement.prototype = new Surrogate();\n ChartElement.extend = helpers.inherits;\n\n if (extensions) {\n helpers.extend(ChartElement.prototype, extensions);\n }\n\n ChartElement.__super__ = me.prototype;\n return ChartElement;\n }\n };\n var helpers_core = helpers; // DEPRECATIONS\n\n /**\n * Provided for backward compatibility, use Chart.helpers.callback instead.\n * @function Chart.helpers.callCallback\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\n\n helpers.callCallback = helpers.callback;\n /**\n * Provided for backward compatibility, use Array.prototype.indexOf instead.\n * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\n * @function Chart.helpers.indexOf\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\n\n helpers.indexOf = function (array, item, fromIndex) {\n return Array.prototype.indexOf.call(array, item, fromIndex);\n };\n /**\n * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\n * @function Chart.helpers.getValueOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\n\n\n helpers.getValueOrDefault = helpers.valueOrDefault;\n /**\n * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\n * @function Chart.helpers.getValueAtIndexOrDefault\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\n\n helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n /**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easingEffects\n * @see http://www.robertpenner.com/easing/\n */\n\n var effects = {\n linear: function linear(t) {\n return t;\n },\n easeInQuad: function easeInQuad(t) {\n return t * t;\n },\n easeOutQuad: function easeOutQuad(t) {\n return -t * (t - 2);\n },\n easeInOutQuad: function easeInOutQuad(t) {\n if ((t /= 0.5) < 1) {\n return 0.5 * t * t;\n }\n\n return -0.5 * (--t * (t - 2) - 1);\n },\n easeInCubic: function easeInCubic(t) {\n return t * t * t;\n },\n easeOutCubic: function easeOutCubic(t) {\n return (t = t - 1) * t * t + 1;\n },\n easeInOutCubic: function easeInOutCubic(t) {\n if ((t /= 0.5) < 1) {\n return 0.5 * t * t * t;\n }\n\n return 0.5 * ((t -= 2) * t * t + 2);\n },\n easeInQuart: function easeInQuart(t) {\n return t * t * t * t;\n },\n easeOutQuart: function easeOutQuart(t) {\n return -((t = t - 1) * t * t * t - 1);\n },\n easeInOutQuart: function easeInOutQuart(t) {\n if ((t /= 0.5) < 1) {\n return 0.5 * t * t * t * t;\n }\n\n return -0.5 * ((t -= 2) * t * t * t - 2);\n },\n easeInQuint: function easeInQuint(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function easeOutQuint(t) {\n return (t = t - 1) * t * t * t * t + 1;\n },\n easeInOutQuint: function easeInOutQuint(t) {\n if ((t /= 0.5) < 1) {\n return 0.5 * t * t * t * t * t;\n }\n\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n },\n easeInSine: function easeInSine(t) {\n return -Math.cos(t * (Math.PI / 2)) + 1;\n },\n easeOutSine: function easeOutSine(t) {\n return Math.sin(t * (Math.PI / 2));\n },\n easeInOutSine: function easeInOutSine(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n },\n easeInExpo: function easeInExpo(t) {\n return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n },\n easeOutExpo: function easeOutExpo(t) {\n return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;\n },\n easeInOutExpo: function easeInOutExpo(t) {\n if (t === 0) {\n return 0;\n }\n\n if (t === 1) {\n return 1;\n }\n\n if ((t /= 0.5) < 1) {\n return 0.5 * Math.pow(2, 10 * (t - 1));\n }\n\n return 0.5 * (-Math.pow(2, -10 * --t) + 2);\n },\n easeInCirc: function easeInCirc(t) {\n if (t >= 1) {\n return t;\n }\n\n return -(Math.sqrt(1 - t * t) - 1);\n },\n easeOutCirc: function easeOutCirc(t) {\n return Math.sqrt(1 - (t = t - 1) * t);\n },\n easeInOutCirc: function easeInOutCirc(t) {\n if ((t /= 0.5) < 1) {\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n }\n\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n },\n easeInElastic: function easeInElastic(t) {\n var s = 1.70158;\n var p = 0;\n var a = 1;\n\n if (t === 0) {\n return 0;\n }\n\n if (t === 1) {\n return 1;\n }\n\n if (!p) {\n p = 0.3;\n }\n\n if (a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n },\n easeOutElastic: function easeOutElastic(t) {\n var s = 1.70158;\n var p = 0;\n var a = 1;\n\n if (t === 0) {\n return 0;\n }\n\n if (t === 1) {\n return 1;\n }\n\n if (!p) {\n p = 0.3;\n }\n\n if (a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n },\n easeInOutElastic: function easeInOutElastic(t) {\n var s = 1.70158;\n var p = 0;\n var a = 1;\n\n if (t === 0) {\n return 0;\n }\n\n if ((t /= 0.5) === 2) {\n return 1;\n }\n\n if (!p) {\n p = 0.45;\n }\n\n if (a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n if (t < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n }\n\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n },\n easeInBack: function easeInBack(t) {\n var s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack: function easeOutBack(t) {\n var s = 1.70158;\n return (t = t - 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack: function easeInOutBack(t) {\n var s = 1.70158;\n\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: function easeInBounce(t) {\n return 1 - effects.easeOutBounce(1 - t);\n },\n easeOutBounce: function easeOutBounce(t) {\n if (t < 1 / 2.75) {\n return 7.5625 * t * t;\n }\n\n if (t < 2 / 2.75) {\n return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;\n }\n\n if (t < 2.5 / 2.75) {\n return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;\n }\n\n return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;\n },\n easeInOutBounce: function easeInOutBounce(t) {\n if (t < 0.5) {\n return effects.easeInBounce(t * 2) * 0.5;\n }\n\n return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n }\n };\n var helpers_easing = {\n effects: effects\n }; // DEPRECATIONS\n\n /**\n * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\n * @function Chart.helpers.easingEffects\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\n\n helpers_core.easingEffects = effects;\n var PI = Math.PI;\n var RAD_PER_DEG = PI / 180;\n var DOUBLE_PI = PI * 2;\n var HALF_PI = PI / 2;\n var QUARTER_PI = PI / 4;\n var TWO_THIRDS_PI = PI * 2 / 3;\n /**\n * @namespace Chart.helpers.canvas\n */\n\n var exports$1 = {\n /**\n * Clears the entire canvas associated to the given `chart`.\n * @param {Chart} chart - The chart for which to clear the canvas.\n */\n clear: function clear(chart) {\n chart.ctx.clearRect(0, 0, chart.width, chart.height);\n },\n\n /**\n * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\n * given size (width, height) and the same `radius` for all corners.\n * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\n * @param {number} x - The x axis of the coordinate for the rectangle starting point.\n * @param {number} y - The y axis of the coordinate for the rectangle starting point.\n * @param {number} width - The rectangle's width.\n * @param {number} height - The rectangle's height.\n * @param {number} radius - The rounded amount (in pixels) for the four corners.\n * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\n */\n roundedRect: function roundedRect(ctx, x, y, width, height, radius) {\n if (radius) {\n var r = Math.min(radius, height / 2, width / 2);\n var left = x + r;\n var top = y + r;\n var right = x + width - r;\n var bottom = y + height - r;\n ctx.moveTo(x, top);\n\n if (left < right && top < bottom) {\n ctx.arc(left, top, r, -PI, -HALF_PI);\n ctx.arc(right, top, r, -HALF_PI, 0);\n ctx.arc(right, bottom, r, 0, HALF_PI);\n ctx.arc(left, bottom, r, HALF_PI, PI);\n } else if (left < right) {\n ctx.moveTo(left, y);\n ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n ctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\n } else if (top < bottom) {\n ctx.arc(left, top, r, -PI, 0);\n ctx.arc(left, bottom, r, 0, PI);\n } else {\n ctx.arc(left, top, r, -PI, PI);\n }\n\n ctx.closePath();\n ctx.moveTo(x, y);\n } else {\n ctx.rect(x, y, width, height);\n }\n },\n drawPoint: function drawPoint(ctx, style, radius, x, y, rotation) {\n var type, xOffset, yOffset, size, cornerRadius;\n var rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && typeof style === 'object') {\n type = style.toString();\n\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n ctx.arc(x, y, radius, 0, DOUBLE_PI);\n ctx.closePath();\n break;\n\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n\n rad += QUARTER_PI;\n\n /* falls through */\n\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n\n case 'crossRot':\n rad += QUARTER_PI;\n\n /* falls through */\n\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n\n ctx.fill();\n ctx.stroke();\n },\n\n /**\n * Returns true if the point is inside the rectangle\n * @param {object} point - The point to test\n * @param {object} area - The rectangle\n * @returns {boolean}\n * @private\n */\n _isPointInArea: function _isPointInArea(point, area) {\n var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n\n return point.x > area.left - epsilon && point.x < area.right + epsilon && point.y > area.top - epsilon && point.y < area.bottom + epsilon;\n },\n clipArea: function clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n },\n unclipArea: function unclipArea(ctx) {\n ctx.restore();\n },\n lineTo: function lineTo(ctx, previous, target, flip) {\n var stepped = target.steppedLine;\n\n if (stepped) {\n if (stepped === 'middle') {\n var midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, flip ? target.y : previous.y);\n ctx.lineTo(midpoint, flip ? previous.y : target.y);\n } else if (stepped === 'after' && !flip || stepped !== 'after' && flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n\n ctx.lineTo(target.x, target.y);\n return;\n }\n\n if (!target.tension) {\n ctx.lineTo(target.x, target.y);\n return;\n }\n\n ctx.bezierCurveTo(flip ? previous.controlPointPreviousX : previous.controlPointNextX, flip ? previous.controlPointPreviousY : previous.controlPointNextY, flip ? target.controlPointNextX : target.controlPointPreviousX, flip ? target.controlPointNextY : target.controlPointPreviousY, target.x, target.y);\n }\n };\n var helpers_canvas = exports$1; // DEPRECATIONS\n\n /**\n * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\n * @namespace Chart.helpers.clear\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\n\n helpers_core.clear = exports$1.clear;\n /**\n * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\n * @namespace Chart.helpers.drawRoundedRectangle\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\n\n helpers_core.drawRoundedRectangle = function (ctx) {\n ctx.beginPath();\n exports$1.roundedRect.apply(exports$1, arguments);\n };\n\n var defaults = {\n /**\n * @private\n */\n _set: function _set(scope, values) {\n return helpers_core.merge(this[scope] || (this[scope] = {}), values);\n }\n };\n\n defaults._set('global', {\n defaultColor: 'rgba(0,0,0,0.1)',\n defaultFontColor: '#666',\n defaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n defaultFontSize: 12,\n defaultFontStyle: 'normal',\n defaultLineHeight: 1.2,\n showLines: true\n });\n\n var core_defaults = defaults;\n var valueOrDefault = helpers_core.valueOrDefault;\n /**\n * Converts the given font object into a CSS font string.\n * @param {object} font - A font object.\n * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */\n\n function toFontString(font) {\n if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n }\n /**\n * @alias Chart.helpers.options\n * @namespace\n */\n\n\n var helpers_options = {\n /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param {number} size - The font size (in pixels) used to resolve relative `value`.\n * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */\n toLineHeight: function toLineHeight(value, size) {\n var matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n\n case '%':\n value /= 100;\n break;\n\n default:\n break;\n }\n\n return size * value;\n },\n\n /**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param {number|object} value - If a number, set the value to all TRBL component,\n * else, if and object, use defined properties and sets undefined ones to 0.\n * @returns {object} The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */\n toPadding: function toPadding(value) {\n var t, r, b, l;\n\n if (helpers_core.isObject(value)) {\n t = +value.top || 0;\n r = +value.right || 0;\n b = +value.bottom || 0;\n l = +value.left || 0;\n } else {\n t = r = b = l = +value || 0;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n height: t + b,\n width: l + r\n };\n },\n\n /**\n * Parses font options and returns the font object.\n * @param {object} options - A object that contains font options to be parsed.\n * @return {object} The font object.\n * @todo Support font.* options and renamed to toFont().\n * @private\n */\n _parseFont: function _parseFont(options) {\n var globalDefaults = core_defaults.global;\n var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n var font = {\n family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\n lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\n size: size,\n style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\n weight: null,\n string: ''\n };\n font.string = toFontString(font);\n return font;\n },\n\n /**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param {Array} inputs - An array of values, falling back to the last value.\n * @param {object} [context] - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param {number} [index] - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @since 2.7.0\n */\n resolve: function resolve(inputs, context, index) {\n var i, ilen, value;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n\n if (value === undefined) {\n continue;\n }\n\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n }\n\n if (index !== undefined && helpers_core.isArray(value)) {\n value = value[index];\n }\n\n if (value !== undefined) {\n return value;\n }\n }\n }\n };\n var helpers$1 = helpers_core;\n var easing = helpers_easing;\n var canvas = helpers_canvas;\n var options = helpers_options;\n helpers$1.easing = easing;\n helpers$1.canvas = canvas;\n helpers$1.options = options;\n\n function interpolate(start, view, model, ease) {\n var keys = Object.keys(model);\n var i, ilen, key, actual, origin, target, type, c0, c1;\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n target = model[key]; // if a value is added to the model after pivot() has been called, the view\n // doesn't contain it, so let's initialize the view to the target value.\n\n if (!view.hasOwnProperty(key)) {\n view[key] = target;\n }\n\n actual = view[key];\n\n if (actual === target || key[0] === '_') {\n continue;\n }\n\n if (!start.hasOwnProperty(key)) {\n start[key] = actual;\n }\n\n origin = start[key];\n type = typeof target;\n\n if (type === typeof origin) {\n if (type === 'string') {\n c0 = chartjsColor(origin);\n\n if (c0.valid) {\n c1 = chartjsColor(target);\n\n if (c1.valid) {\n view[key] = c1.mix(c0, ease).rgbString();\n continue;\n }\n }\n } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\n view[key] = origin + (target - origin) * ease;\n continue;\n }\n }\n\n view[key] = target;\n }\n }\n\n var Element = function Element(configuration) {\n helpers$1.extend(this, configuration);\n this.initialize.apply(this, arguments);\n };\n\n helpers$1.extend(Element.prototype, {\n initialize: function initialize() {\n this.hidden = false;\n },\n pivot: function pivot() {\n var me = this;\n\n if (!me._view) {\n me._view = helpers$1.clone(me._model);\n }\n\n me._start = {};\n return me;\n },\n transition: function transition(ease) {\n var me = this;\n var model = me._model;\n var start = me._start;\n var view = me._view; // No animation -> No Transition\n\n if (!model || ease === 1) {\n me._view = model;\n me._start = null;\n return me;\n }\n\n if (!view) {\n view = me._view = {};\n }\n\n if (!start) {\n start = me._start = {};\n }\n\n interpolate(start, view, model, ease);\n return me;\n },\n tooltipPosition: function tooltipPosition() {\n return {\n x: this._model.x,\n y: this._model.y\n };\n },\n hasValue: function hasValue() {\n return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\n }\n });\n Element.extend = helpers$1.inherits;\n var core_element = Element;\n var exports$2 = core_element.extend({\n chart: null,\n // the animation associated chart instance\n currentStep: 0,\n // the current animation step\n numSteps: 60,\n // default number of steps\n easing: '',\n // the easing to use for this animation\n render: null,\n // render function used by the animation service\n onAnimationProgress: null,\n // user specified callback to fire on each step of the animation\n onAnimationComplete: null // user specified callback to fire when the animation finishes\n\n });\n var core_animation = exports$2; // DEPRECATIONS\n\n /**\n * Provided for backward compatibility, use Chart.Animation instead\n * @prop Chart.Animation#animationObject\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n */\n\n Object.defineProperty(exports$2.prototype, 'animationObject', {\n get: function get() {\n return this;\n }\n });\n /**\n * Provided for backward compatibility, use Chart.Animation#chart instead\n * @prop Chart.Animation#chartInstance\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n */\n\n Object.defineProperty(exports$2.prototype, 'chartInstance', {\n get: function get() {\n return this.chart;\n },\n set: function set(value) {\n this.chart = value;\n }\n });\n\n core_defaults._set('global', {\n animation: {\n duration: 1000,\n easing: 'easeOutQuart',\n onProgress: helpers$1.noop,\n onComplete: helpers$1.noop\n }\n });\n\n var core_animations = {\n animations: [],\n request: null,\n\n /**\n * @param {Chart} chart - The chart to animate.\n * @param {Chart.Animation} animation - The animation that we will animate.\n * @param {number} duration - The animation duration in ms.\n * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\n */\n addAnimation: function addAnimation(chart, animation, duration, lazy) {\n var animations = this.animations;\n var i, ilen;\n animation.chart = chart;\n animation.startTime = Date.now();\n animation.duration = duration;\n\n if (!lazy) {\n chart.animating = true;\n }\n\n for (i = 0, ilen = animations.length; i < ilen; ++i) {\n if (animations[i].chart === chart) {\n animations[i] = animation;\n return;\n }\n }\n\n animations.push(animation); // If there are no animations queued, manually kickstart a digest, for lack of a better word\n\n if (animations.length === 1) {\n this.requestAnimationFrame();\n }\n },\n cancelAnimation: function cancelAnimation(chart) {\n var index = helpers$1.findIndex(this.animations, function (animation) {\n return animation.chart === chart;\n });\n\n if (index !== -1) {\n this.animations.splice(index, 1);\n chart.animating = false;\n }\n },\n requestAnimationFrame: function requestAnimationFrame() {\n var me = this;\n\n if (me.request === null) {\n // Skip animation frame requests until the active one is executed.\n // This can happen when processing mouse events, e.g. 'mousemove'\n // and 'mouseout' events will trigger multiple renders.\n me.request = helpers$1.requestAnimFrame.call(window, function () {\n me.request = null;\n me.startDigest();\n });\n }\n },\n\n /**\n * @private\n */\n startDigest: function startDigest() {\n var me = this;\n me.advance(); // Do we have more stuff to animate?\n\n if (me.animations.length > 0) {\n me.requestAnimationFrame();\n }\n },\n\n /**\n * @private\n */\n advance: function advance() {\n var animations = this.animations;\n var animation, chart, numSteps, nextStep;\n var i = 0; // 1 animation per chart, so we are looping charts here\n\n while (i < animations.length) {\n animation = animations[i];\n chart = animation.chart;\n numSteps = animation.numSteps; // Make sure that currentStep starts at 1\n // https://github.com/chartjs/Chart.js/issues/6104\n\n nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\n animation.currentStep = Math.min(nextStep, numSteps);\n helpers$1.callback(animation.render, [chart, animation], chart);\n helpers$1.callback(animation.onAnimationProgress, [animation], chart);\n\n if (animation.currentStep >= numSteps) {\n helpers$1.callback(animation.onAnimationComplete, [animation], chart);\n chart.animating = false;\n animations.splice(i, 1);\n } else {\n ++i;\n }\n }\n }\n };\n var resolve = helpers$1.options.resolve;\n var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n /**\n * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\n */\n\n function listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach(function (key) {\n var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n var base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value: function value() {\n var args = Array.prototype.slice.call(arguments);\n var res = base.apply(this, args);\n helpers$1.each(array._chartjs.listeners, function (object) {\n if (typeof object[method] === 'function') {\n object[method].apply(object, args);\n }\n });\n return res;\n }\n });\n });\n }\n /**\n * Removes the given array event listener and cleanup extra attached properties (such as\n * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n */\n\n\n function unlistenArrayEvents(array, listener) {\n var stub = array._chartjs;\n\n if (!stub) {\n return;\n }\n\n var listeners = stub.listeners;\n var index = listeners.indexOf(listener);\n\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach(function (key) {\n delete array[key];\n });\n delete array._chartjs;\n } // Base class for all dataset controllers (line, bar, etc)\n\n\n var DatasetController = function DatasetController(chart, datasetIndex) {\n this.initialize(chart, datasetIndex);\n };\n\n helpers$1.extend(DatasetController.prototype, {\n /**\n * Element type used to generate a meta dataset (e.g. Chart.element.Line).\n * @type {Chart.core.element}\n */\n datasetElementType: null,\n\n /**\n * Element type used to generate a meta data (e.g. Chart.element.Point).\n * @type {Chart.core.element}\n */\n dataElementType: null,\n initialize: function initialize(chart, datasetIndex) {\n var me = this;\n me.chart = chart;\n me.index = datasetIndex;\n me.linkScales();\n me.addElements();\n },\n updateIndex: function updateIndex(datasetIndex) {\n this.index = datasetIndex;\n },\n linkScales: function linkScales() {\n var me = this;\n var meta = me.getMeta();\n var dataset = me.getDataset();\n\n if (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) {\n meta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;\n }\n\n if (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) {\n meta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;\n }\n },\n getDataset: function getDataset() {\n return this.chart.data.datasets[this.index];\n },\n getMeta: function getMeta() {\n return this.chart.getDatasetMeta(this.index);\n },\n getScaleForId: function getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n },\n\n /**\n * @private\n */\n _getValueScaleId: function _getValueScaleId() {\n return this.getMeta().yAxisID;\n },\n\n /**\n * @private\n */\n _getIndexScaleId: function _getIndexScaleId() {\n return this.getMeta().xAxisID;\n },\n\n /**\n * @private\n */\n _getValueScale: function _getValueScale() {\n return this.getScaleForId(this._getValueScaleId());\n },\n\n /**\n * @private\n */\n _getIndexScale: function _getIndexScale() {\n return this.getScaleForId(this._getIndexScaleId());\n },\n reset: function reset() {\n this.update(true);\n },\n\n /**\n * @private\n */\n destroy: function destroy() {\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n },\n createMetaDataset: function createMetaDataset() {\n var me = this;\n var type = me.datasetElementType;\n return type && new type({\n _chart: me.chart,\n _datasetIndex: me.index\n });\n },\n createMetaData: function createMetaData(index) {\n var me = this;\n var type = me.dataElementType;\n return type && new type({\n _chart: me.chart,\n _datasetIndex: me.index,\n _index: index\n });\n },\n addElements: function addElements() {\n var me = this;\n var meta = me.getMeta();\n var data = me.getDataset().data || [];\n var metaData = meta.data;\n var i, ilen;\n\n for (i = 0, ilen = data.length; i < ilen; ++i) {\n metaData[i] = metaData[i] || me.createMetaData(i);\n }\n\n meta.dataset = meta.dataset || me.createMetaDataset();\n },\n addElementAndReset: function addElementAndReset(index) {\n var element = this.createMetaData(index);\n this.getMeta().data.splice(index, 0, element);\n this.updateElement(element, index, true);\n },\n buildOrUpdateElements: function buildOrUpdateElements() {\n var me = this;\n var dataset = me.getDataset();\n var data = dataset.data || (dataset.data = []); // In order to correctly handle data addition/deletion animation (an thus simulate\n // real-time charts), we need to monitor these data modifications and synchronize\n // the internal meta data accordingly.\n\n if (me._data !== data) {\n if (me._data) {\n // This case happens when the user replaced the data array instance.\n unlistenArrayEvents(me._data, me);\n }\n\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, me);\n }\n\n me._data = data;\n } // Re-sync meta data in case the user replaced the data array or if we missed\n // any updates and so make sure that we handle number of datapoints changing.\n\n\n me.resyncElements();\n },\n update: helpers$1.noop,\n transition: function transition(easingValue) {\n var meta = this.getMeta();\n var elements = meta.data || [];\n var ilen = elements.length;\n var i = 0;\n\n for (; i < ilen; ++i) {\n elements[i].transition(easingValue);\n }\n\n if (meta.dataset) {\n meta.dataset.transition(easingValue);\n }\n },\n draw: function draw() {\n var meta = this.getMeta();\n var elements = meta.data || [];\n var ilen = elements.length;\n var i = 0;\n\n if (meta.dataset) {\n meta.dataset.draw();\n }\n\n for (; i < ilen; ++i) {\n elements[i].draw();\n }\n },\n removeHoverStyle: function removeHoverStyle(element) {\n helpers$1.merge(element._model, element.$previousStyle || {});\n delete element.$previousStyle;\n },\n setHoverStyle: function setHoverStyle(element) {\n var dataset = this.chart.data.datasets[element._datasetIndex];\n var index = element._index;\n var custom = element.custom || {};\n var model = element._model;\n var getHoverColor = helpers$1.getHoverColor;\n element.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth\n };\n model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\n model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\n model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\n },\n\n /**\n * @private\n */\n resyncElements: function resyncElements() {\n var me = this;\n var meta = me.getMeta();\n var data = me.getDataset().data;\n var numMeta = meta.data.length;\n var numData = data.length;\n\n if (numData < numMeta) {\n meta.data.splice(numData, numMeta - numData);\n } else if (numData > numMeta) {\n me.insertElements(numMeta, numData - numMeta);\n }\n },\n\n /**\n * @private\n */\n insertElements: function insertElements(start, count) {\n for (var i = 0; i < count; ++i) {\n this.addElementAndReset(start + i);\n }\n },\n\n /**\n * @private\n */\n onDataPush: function onDataPush() {\n var count = arguments.length;\n this.insertElements(this.getDataset().data.length - count, count);\n },\n\n /**\n * @private\n */\n onDataPop: function onDataPop() {\n this.getMeta().data.pop();\n },\n\n /**\n * @private\n */\n onDataShift: function onDataShift() {\n this.getMeta().data.shift();\n },\n\n /**\n * @private\n */\n onDataSplice: function onDataSplice(start, count) {\n this.getMeta().data.splice(start, count);\n this.insertElements(start, arguments.length - 2);\n },\n\n /**\n * @private\n */\n onDataUnshift: function onDataUnshift() {\n this.insertElements(0, arguments.length);\n }\n });\n DatasetController.extend = helpers$1.inherits;\n var core_datasetController = DatasetController;\n\n core_defaults._set('global', {\n elements: {\n arc: {\n backgroundColor: core_defaults.global.defaultColor,\n borderColor: '#fff',\n borderWidth: 2,\n borderAlign: 'center'\n }\n }\n });\n\n var element_arc = core_element.extend({\n inLabelRange: function inLabelRange(mouseX) {\n var vm = this._view;\n\n if (vm) {\n return Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2);\n }\n\n return false;\n },\n inRange: function inRange(chartX, chartY) {\n var vm = this._view;\n\n if (vm) {\n var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {\n x: chartX,\n y: chartY\n });\n var angle = pointRelativePosition.angle;\n var distance = pointRelativePosition.distance; // Sanitise angle range\n\n var startAngle = vm.startAngle;\n var endAngle = vm.endAngle;\n\n while (endAngle < startAngle) {\n endAngle += 2.0 * Math.PI;\n }\n\n while (angle > endAngle) {\n angle -= 2.0 * Math.PI;\n }\n\n while (angle < startAngle) {\n angle += 2.0 * Math.PI;\n } // Check if within the range of the open/close angle\n\n\n var betweenAngles = angle >= startAngle && angle <= endAngle;\n var withinRadius = distance >= vm.innerRadius && distance <= vm.outerRadius;\n return betweenAngles && withinRadius;\n }\n\n return false;\n },\n getCenterPoint: function getCenterPoint() {\n var vm = this._view;\n var halfAngle = (vm.startAngle + vm.endAngle) / 2;\n var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n return {\n x: vm.x + Math.cos(halfAngle) * halfRadius,\n y: vm.y + Math.sin(halfAngle) * halfRadius\n };\n },\n getArea: function getArea() {\n var vm = this._view;\n return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n },\n tooltipPosition: function tooltipPosition() {\n var vm = this._view;\n var centreAngle = vm.startAngle + (vm.endAngle - vm.startAngle) / 2;\n var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n return {\n x: vm.x + Math.cos(centreAngle) * rangeFromCentre,\n y: vm.y + Math.sin(centreAngle) * rangeFromCentre\n };\n },\n draw: function draw() {\n var ctx = this._chart.ctx;\n var vm = this._view;\n var sA = vm.startAngle;\n var eA = vm.endAngle;\n var pixelMargin = vm.borderAlign === 'inner' ? 0.33 : 0;\n var angleMargin;\n ctx.save();\n ctx.beginPath();\n ctx.arc(vm.x, vm.y, Math.max(vm.outerRadius - pixelMargin, 0), sA, eA);\n ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n ctx.closePath();\n ctx.fillStyle = vm.backgroundColor;\n ctx.fill();\n\n if (vm.borderWidth) {\n if (vm.borderAlign === 'inner') {\n // Draw an inner border by cliping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n angleMargin = pixelMargin / vm.outerRadius;\n ctx.arc(vm.x, vm.y, vm.outerRadius, sA - angleMargin, eA + angleMargin);\n\n if (vm.innerRadius > pixelMargin) {\n angleMargin = pixelMargin / vm.innerRadius;\n ctx.arc(vm.x, vm.y, vm.innerRadius - pixelMargin, eA + angleMargin, sA - angleMargin, true);\n } else {\n ctx.arc(vm.x, vm.y, pixelMargin, eA + Math.PI / 2, sA - Math.PI / 2);\n }\n\n ctx.closePath();\n ctx.clip();\n ctx.beginPath();\n ctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n ctx.closePath();\n ctx.lineWidth = vm.borderWidth * 2;\n ctx.lineJoin = 'round';\n } else {\n ctx.lineWidth = vm.borderWidth;\n ctx.lineJoin = 'bevel';\n }\n\n ctx.strokeStyle = vm.borderColor;\n ctx.stroke();\n }\n\n ctx.restore();\n }\n });\n var valueOrDefault$1 = helpers$1.valueOrDefault;\n var defaultColor = core_defaults.global.defaultColor;\n\n core_defaults._set('global', {\n elements: {\n line: {\n tension: 0.4,\n backgroundColor: defaultColor,\n borderWidth: 3,\n borderColor: defaultColor,\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0.0,\n borderJoinStyle: 'miter',\n capBezierPoints: true,\n fill: true // do we fill in the area between the line and its base axis\n\n }\n }\n });\n\n var element_line = core_element.extend({\n draw: function draw() {\n var me = this;\n var vm = me._view;\n var ctx = me._chart.ctx;\n var spanGaps = vm.spanGaps;\n\n var points = me._children.slice(); // clone array\n\n\n var globalDefaults = core_defaults.global;\n var globalOptionLineElements = globalDefaults.elements.line;\n var lastDrawnIndex = -1;\n var index, current, previous, currentVM; // If we are looping, adding the first point again\n\n if (me._loop && points.length) {\n points.push(points[0]);\n }\n\n ctx.save(); // Stroke Line Options\n\n ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle; // IE 9 and 10 do not support line dash\n\n if (ctx.setLineDash) {\n ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n }\n\n ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\n ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\n ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor; // Stroke Line\n\n ctx.beginPath();\n lastDrawnIndex = -1;\n\n for (index = 0; index < points.length; ++index) {\n current = points[index];\n previous = helpers$1.previousItem(points, index);\n currentVM = current._view; // First point moves to it's starting position no matter what\n\n if (index === 0) {\n if (!currentVM.skip) {\n ctx.moveTo(currentVM.x, currentVM.y);\n lastDrawnIndex = index;\n }\n } else {\n previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n if (!currentVM.skip) {\n if (lastDrawnIndex !== index - 1 && !spanGaps || lastDrawnIndex === -1) {\n // There was a gap and this is the first point after the gap\n ctx.moveTo(currentVM.x, currentVM.y);\n } else {\n // Line to next point\n helpers$1.canvas.lineTo(ctx, previous._view, current._view);\n }\n\n lastDrawnIndex = index;\n }\n }\n }\n\n ctx.stroke();\n ctx.restore();\n }\n });\n var valueOrDefault$2 = helpers$1.valueOrDefault;\n var defaultColor$1 = core_defaults.global.defaultColor;\n\n core_defaults._set('global', {\n elements: {\n point: {\n radius: 3,\n pointStyle: 'circle',\n backgroundColor: defaultColor$1,\n borderColor: defaultColor$1,\n borderWidth: 1,\n // Hover\n hitRadius: 1,\n hoverRadius: 4,\n hoverBorderWidth: 1\n }\n }\n });\n\n function xRange(mouseX) {\n var vm = this._view;\n return vm ? Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius : false;\n }\n\n function yRange(mouseY) {\n var vm = this._view;\n return vm ? Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius : false;\n }\n\n var element_point = core_element.extend({\n inRange: function inRange(mouseX, mouseY) {\n var vm = this._view;\n return vm ? Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2) < Math.pow(vm.hitRadius + vm.radius, 2) : false;\n },\n inLabelRange: xRange,\n inXRange: xRange,\n inYRange: yRange,\n getCenterPoint: function getCenterPoint() {\n var vm = this._view;\n return {\n x: vm.x,\n y: vm.y\n };\n },\n getArea: function getArea() {\n return Math.PI * Math.pow(this._view.radius, 2);\n },\n tooltipPosition: function tooltipPosition() {\n var vm = this._view;\n return {\n x: vm.x,\n y: vm.y,\n padding: vm.radius + vm.borderWidth\n };\n },\n draw: function draw(chartArea) {\n var vm = this._view;\n var ctx = this._chart.ctx;\n var pointStyle = vm.pointStyle;\n var rotation = vm.rotation;\n var radius = vm.radius;\n var x = vm.x;\n var y = vm.y;\n var globalDefaults = core_defaults.global;\n var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\n\n if (vm.skip) {\n return;\n } // Clipping for Points.\n\n\n if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\n ctx.strokeStyle = vm.borderColor || defaultColor;\n ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\n ctx.fillStyle = vm.backgroundColor || defaultColor;\n helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\n }\n }\n });\n var defaultColor$2 = core_defaults.global.defaultColor;\n\n core_defaults._set('global', {\n elements: {\n rectangle: {\n backgroundColor: defaultColor$2,\n borderColor: defaultColor$2,\n borderSkipped: 'bottom',\n borderWidth: 0\n }\n }\n });\n\n function isVertical(vm) {\n return vm && vm.width !== undefined;\n }\n /**\n * Helper function to get the bounds of the bar regardless of the orientation\n * @param bar {Chart.Element.Rectangle} the bar\n * @return {Bounds} bounds of the bar\n * @private\n */\n\n\n function getBarBounds(vm) {\n var x1, x2, y1, y2, half;\n\n if (isVertical(vm)) {\n half = vm.width / 2;\n x1 = vm.x - half;\n x2 = vm.x + half;\n y1 = Math.min(vm.y, vm.base);\n y2 = Math.max(vm.y, vm.base);\n } else {\n half = vm.height / 2;\n x1 = Math.min(vm.x, vm.base);\n x2 = Math.max(vm.x, vm.base);\n y1 = vm.y - half;\n y2 = vm.y + half;\n }\n\n return {\n left: x1,\n top: y1,\n right: x2,\n bottom: y2\n };\n }\n\n function swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n }\n\n function parseBorderSkipped(vm) {\n var edge = vm.borderSkipped;\n var res = {};\n\n if (!edge) {\n return res;\n }\n\n if (vm.horizontal) {\n if (vm.base > vm.x) {\n edge = swap(edge, 'left', 'right');\n }\n } else if (vm.base < vm.y) {\n edge = swap(edge, 'bottom', 'top');\n }\n\n res[edge] = true;\n return res;\n }\n\n function parseBorderWidth(vm, maxW, maxH) {\n var value = vm.borderWidth;\n var skip = parseBorderSkipped(vm);\n var t, r, b, l;\n\n if (helpers$1.isObject(value)) {\n t = +value.top || 0;\n r = +value.right || 0;\n b = +value.bottom || 0;\n l = +value.left || 0;\n } else {\n t = r = b = l = +value || 0;\n }\n\n return {\n t: skip.top || t < 0 ? 0 : t > maxH ? maxH : t,\n r: skip.right || r < 0 ? 0 : r > maxW ? maxW : r,\n b: skip.bottom || b < 0 ? 0 : b > maxH ? maxH : b,\n l: skip.left || l < 0 ? 0 : l > maxW ? maxW : l\n };\n }\n\n function boundingRects(vm) {\n var bounds = getBarBounds(vm);\n var width = bounds.right - bounds.left;\n var height = bounds.bottom - bounds.top;\n var border = parseBorderWidth(vm, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b\n }\n };\n }\n\n function _inRange(vm, x, y) {\n var skipX = x === null;\n var skipY = y === null;\n var bounds = !vm || skipX && skipY ? false : getBarBounds(vm);\n return bounds && (skipX || x >= bounds.left && x <= bounds.right) && (skipY || y >= bounds.top && y <= bounds.bottom);\n }\n\n var element_rectangle = core_element.extend({\n draw: function draw() {\n var ctx = this._chart.ctx;\n var vm = this._view;\n var rects = boundingRects(vm);\n var outer = rects.outer;\n var inner = rects.inner;\n ctx.fillStyle = vm.backgroundColor;\n ctx.fillRect(outer.x, outer.y, outer.w, outer.h);\n\n if (outer.w === inner.w && outer.h === inner.h) {\n return;\n }\n\n ctx.save();\n ctx.beginPath();\n ctx.rect(outer.x, outer.y, outer.w, outer.h);\n ctx.clip();\n ctx.fillStyle = vm.borderColor;\n ctx.rect(inner.x, inner.y, inner.w, inner.h);\n ctx.fill('evenodd');\n ctx.restore();\n },\n height: function height() {\n var vm = this._view;\n return vm.base - vm.y;\n },\n inRange: function inRange(mouseX, mouseY) {\n return _inRange(this._view, mouseX, mouseY);\n },\n inLabelRange: function inLabelRange(mouseX, mouseY) {\n var vm = this._view;\n return isVertical(vm) ? _inRange(vm, mouseX, null) : _inRange(vm, null, mouseY);\n },\n inXRange: function inXRange(mouseX) {\n return _inRange(this._view, mouseX, null);\n },\n inYRange: function inYRange(mouseY) {\n return _inRange(this._view, null, mouseY);\n },\n getCenterPoint: function getCenterPoint() {\n var vm = this._view;\n var x, y;\n\n if (isVertical(vm)) {\n x = vm.x;\n y = (vm.y + vm.base) / 2;\n } else {\n x = (vm.x + vm.base) / 2;\n y = vm.y;\n }\n\n return {\n x: x,\n y: y\n };\n },\n getArea: function getArea() {\n var vm = this._view;\n return isVertical(vm) ? vm.width * Math.abs(vm.y - vm.base) : vm.height * Math.abs(vm.x - vm.base);\n },\n tooltipPosition: function tooltipPosition() {\n var vm = this._view;\n return {\n x: vm.x,\n y: vm.y\n };\n }\n });\n var elements = {};\n var Arc = element_arc;\n var Line = element_line;\n var Point = element_point;\n var Rectangle = element_rectangle;\n elements.Arc = Arc;\n elements.Line = Line;\n elements.Point = Point;\n elements.Rectangle = Rectangle;\n var resolve$1 = helpers$1.options.resolve;\n\n core_defaults._set('bar', {\n hover: {\n mode: 'label'\n },\n scales: {\n xAxes: [{\n type: 'category',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n offset: true,\n gridLines: {\n offsetGridLines: true\n }\n }],\n yAxes: [{\n type: 'linear'\n }]\n }\n });\n /**\n * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n * @private\n */\n\n\n function computeMinSampleSize(scale, pixels) {\n var min = scale.isHorizontal() ? scale.width : scale.height;\n var ticks = scale.getTicks();\n var prev, curr, i, ilen;\n\n for (i = 1, ilen = pixels.length; i < ilen; ++i) {\n min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\n }\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n min = i > 0 ? Math.min(min, curr - prev) : min;\n prev = curr;\n }\n\n return min;\n }\n /**\n * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n * mode currently always generates bars equally sized (until we introduce scriptable options?).\n * @private\n */\n\n\n function computeFitCategoryTraits(index, ruler, options) {\n var thickness = options.barThickness;\n var count = ruler.stackCount;\n var curr = ruler.pixels[index];\n var size, ratio;\n\n if (helpers$1.isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n // When bar thickness is enforced, category and bar percentages are ignored.\n // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n // and deprecate barPercentage since this value is ignored when thickness is absolute.\n size = thickness * count;\n ratio = 1;\n }\n\n return {\n chunk: size / count,\n ratio: ratio,\n start: curr - size / 2\n };\n }\n /**\n * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n * percentage options are 1), based on the previous and following categories. This mode\n * generates bars with different widths when data are not evenly spaced.\n * @private\n */\n\n\n function computeFlexCategoryTraits(index, ruler, options) {\n var pixels = ruler.pixels;\n var curr = pixels[index];\n var prev = index > 0 ? pixels[index - 1] : null;\n var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n var percent = options.categoryPercentage;\n var start, size;\n\n if (prev === null) {\n // first data: its size is double based on the next point or,\n // if it's also the last data, we use the scale size.\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n // last data: its size is also double based on the previous point.\n next = curr + curr - prev;\n }\n\n start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / ruler.stackCount,\n ratio: options.barPercentage,\n start: start\n };\n }\n\n var controller_bar = core_datasetController.extend({\n dataElementType: elements.Rectangle,\n initialize: function initialize() {\n var me = this;\n var meta;\n core_datasetController.prototype.initialize.apply(me, arguments);\n meta = me.getMeta();\n meta.stack = me.getDataset().stack;\n meta.bar = true;\n },\n update: function update(reset) {\n var me = this;\n var rects = me.getMeta().data;\n var i, ilen;\n me._ruler = me.getRuler();\n\n for (i = 0, ilen = rects.length; i < ilen; ++i) {\n me.updateElement(rects[i], i, reset);\n }\n },\n updateElement: function updateElement(rectangle, index, reset) {\n var me = this;\n var meta = me.getMeta();\n var dataset = me.getDataset();\n\n var options = me._resolveElementOptions(rectangle, index);\n\n rectangle._xScale = me.getScaleForId(meta.xAxisID);\n rectangle._yScale = me.getScaleForId(meta.yAxisID);\n rectangle._datasetIndex = me.index;\n rectangle._index = index;\n rectangle._model = {\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderSkipped: options.borderSkipped,\n borderWidth: options.borderWidth,\n datasetLabel: dataset.label,\n label: me.chart.data.labels[index]\n };\n\n me._updateElementGeometry(rectangle, index, reset);\n\n rectangle.pivot();\n },\n\n /**\n * @private\n */\n _updateElementGeometry: function _updateElementGeometry(rectangle, index, reset) {\n var me = this;\n var model = rectangle._model;\n\n var vscale = me._getValueScale();\n\n var base = vscale.getBasePixel();\n var horizontal = vscale.isHorizontal();\n var ruler = me._ruler || me.getRuler();\n var vpixels = me.calculateBarValuePixels(me.index, index);\n var ipixels = me.calculateBarIndexPixels(me.index, index, ruler);\n model.horizontal = horizontal;\n model.base = reset ? base : vpixels.base;\n model.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n model.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n model.height = horizontal ? ipixels.size : undefined;\n model.width = horizontal ? undefined : ipixels.size;\n },\n\n /**\n * Returns the stacks based on groups and bar visibility.\n * @param {number} [last] - The dataset index\n * @returns {string[]} The list of stack IDs\n * @private\n */\n _getStacks: function _getStacks(last) {\n var me = this;\n var chart = me.chart;\n\n var scale = me._getIndexScale();\n\n var stacked = scale.options.stacked;\n var ilen = last === undefined ? chart.data.datasets.length : last + 1;\n var stacks = [];\n var i, meta;\n\n for (i = 0; i < ilen; ++i) {\n meta = chart.getDatasetMeta(i);\n\n if (meta.bar && chart.isDatasetVisible(i) && (stacked === false || stacked === true && stacks.indexOf(meta.stack) === -1 || stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1))) {\n stacks.push(meta.stack);\n }\n }\n\n return stacks;\n },\n\n /**\n * Returns the effective number of stacks based on groups and bar visibility.\n * @private\n */\n getStackCount: function getStackCount() {\n return this._getStacks().length;\n },\n\n /**\n * Returns the stack index for the given dataset based on groups and bar visibility.\n * @param {number} [datasetIndex] - The dataset index\n * @param {string} [name] - The stack name to find\n * @returns {number} The stack index\n * @private\n */\n getStackIndex: function getStackIndex(datasetIndex, name) {\n var stacks = this._getStacks(datasetIndex);\n\n var index = name !== undefined ? stacks.indexOf(name) : -1; // indexOf returns -1 if element is not present\n\n return index === -1 ? stacks.length - 1 : index;\n },\n\n /**\n * @private\n */\n getRuler: function getRuler() {\n var me = this;\n\n var scale = me._getIndexScale();\n\n var stackCount = me.getStackCount();\n var datasetIndex = me.index;\n var isHorizontal = scale.isHorizontal();\n var start = isHorizontal ? scale.left : scale.top;\n var end = start + (isHorizontal ? scale.width : scale.height);\n var pixels = [];\n var i, ilen, min;\n\n for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n pixels.push(scale.getPixelForValue(null, i, datasetIndex));\n }\n\n min = helpers$1.isNullOrUndef(scale.options.barThickness) ? computeMinSampleSize(scale, pixels) : -1;\n return {\n min: min,\n pixels: pixels,\n start: start,\n end: end,\n stackCount: stackCount,\n scale: scale\n };\n },\n\n /**\n * Note: pixel values are not clamped to the scale area.\n * @private\n */\n calculateBarValuePixels: function calculateBarValuePixels(datasetIndex, index) {\n var me = this;\n var chart = me.chart;\n var meta = me.getMeta();\n\n var scale = me._getValueScale();\n\n var isHorizontal = scale.isHorizontal();\n var datasets = chart.data.datasets;\n var value = +scale.getRightValue(datasets[datasetIndex].data[index]);\n var minBarLength = scale.options.minBarLength;\n var stacked = scale.options.stacked;\n var stack = meta.stack;\n var start = 0;\n var i, imeta, ivalue, base, head, size;\n\n if (stacked || stacked === undefined && stack !== undefined) {\n for (i = 0; i < datasetIndex; ++i) {\n imeta = chart.getDatasetMeta(i);\n\n if (imeta.bar && imeta.stack === stack && imeta.controller._getValueScaleId() === scale.id && chart.isDatasetVisible(i)) {\n ivalue = +scale.getRightValue(datasets[i].data[index]);\n\n if (value < 0 && ivalue < 0 || value >= 0 && ivalue > 0) {\n start += ivalue;\n }\n }\n }\n }\n\n base = scale.getPixelForValue(start);\n head = scale.getPixelForValue(start + value);\n size = head - base;\n\n if (minBarLength !== undefined && Math.abs(size) < minBarLength) {\n size = minBarLength;\n\n if (value >= 0 && !isHorizontal || value < 0 && isHorizontal) {\n head = base - minBarLength;\n } else {\n head = base + minBarLength;\n }\n }\n\n return {\n size: size,\n base: base,\n head: head,\n center: head + size / 2\n };\n },\n\n /**\n * @private\n */\n calculateBarIndexPixels: function calculateBarIndexPixels(datasetIndex, index, ruler) {\n var me = this;\n var options = ruler.scale.options;\n var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options) : computeFitCategoryTraits(index, ruler, options);\n var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\n var center = range.start + range.chunk * stackIndex + range.chunk / 2;\n var size = Math.min(helpers$1.valueOrDefault(options.maxBarThickness, Infinity), range.chunk * range.ratio);\n return {\n base: center - size / 2,\n head: center + size / 2,\n center: center,\n size: size\n };\n },\n draw: function draw() {\n var me = this;\n var chart = me.chart;\n\n var scale = me._getValueScale();\n\n var rects = me.getMeta().data;\n var dataset = me.getDataset();\n var ilen = rects.length;\n var i = 0;\n helpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\n\n for (; i < ilen; ++i) {\n if (!isNaN(scale.getRightValue(dataset.data[i]))) {\n rects[i].draw();\n }\n }\n\n helpers$1.canvas.unclipArea(chart.ctx);\n },\n\n /**\n * @private\n */\n _resolveElementOptions: function _resolveElementOptions(rectangle, index) {\n var me = this;\n var chart = me.chart;\n var datasets = chart.data.datasets;\n var dataset = datasets[me.index];\n var custom = rectangle.custom || {};\n var options = chart.options.elements.rectangle;\n var values = {};\n var i, ilen, key; // Scriptable options\n\n var context = {\n chart: chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n };\n var keys = ['backgroundColor', 'borderColor', 'borderSkipped', 'borderWidth'];\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve$1([custom[key], dataset[key], options[key]], context, index);\n }\n\n return values;\n }\n });\n var valueOrDefault$3 = helpers$1.valueOrDefault;\n var resolve$2 = helpers$1.options.resolve;\n\n core_defaults._set('bubble', {\n hover: {\n mode: 'single'\n },\n scales: {\n xAxes: [{\n type: 'linear',\n // bubble should probably use a linear scale by default\n position: 'bottom',\n id: 'x-axis-0' // need an ID so datasets can reference the scale\n\n }],\n yAxes: [{\n type: 'linear',\n position: 'left',\n id: 'y-axis-0'\n }]\n },\n tooltips: {\n callbacks: {\n title: function title() {\n // Title doesn't make sense for scatter since we format the data as a point\n return '';\n },\n label: function label(item, data) {\n var datasetLabel = data.datasets[item.datasetIndex].label || '';\n var dataPoint = data.datasets[item.datasetIndex].data[item.index];\n return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n }\n }\n }\n });\n\n var controller_bubble = core_datasetController.extend({\n /**\n * @protected\n */\n dataElementType: elements.Point,\n\n /**\n * @protected\n */\n update: function update(reset) {\n var me = this;\n var meta = me.getMeta();\n var points = meta.data; // Update Points\n\n helpers$1.each(points, function (point, index) {\n me.updateElement(point, index, reset);\n });\n },\n\n /**\n * @protected\n */\n updateElement: function updateElement(point, index, reset) {\n var me = this;\n var meta = me.getMeta();\n var custom = point.custom || {};\n var xScale = me.getScaleForId(meta.xAxisID);\n var yScale = me.getScaleForId(meta.yAxisID);\n\n var options = me._resolveElementOptions(point, index);\n\n var data = me.getDataset().data[index];\n var dsIndex = me.index;\n var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\n var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n point._xScale = xScale;\n point._yScale = yScale;\n point._options = options;\n point._datasetIndex = dsIndex;\n point._index = index;\n point._model = {\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n hitRadius: options.hitRadius,\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n radius: reset ? 0 : options.radius,\n skip: custom.skip || isNaN(x) || isNaN(y),\n x: x,\n y: y\n };\n point.pivot();\n },\n\n /**\n * @protected\n */\n setHoverStyle: function setHoverStyle(point) {\n var model = point._model;\n var options = point._options;\n var getHoverColor = helpers$1.getHoverColor;\n point.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth,\n radius: model.radius\n };\n model.backgroundColor = valueOrDefault$3(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault$3(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault$3(options.hoverBorderWidth, options.borderWidth);\n model.radius = options.radius + options.hoverRadius;\n },\n\n /**\n * @private\n */\n _resolveElementOptions: function _resolveElementOptions(point, index) {\n var me = this;\n var chart = me.chart;\n var datasets = chart.data.datasets;\n var dataset = datasets[me.index];\n var custom = point.custom || {};\n var options = chart.options.elements.point;\n var data = dataset.data[index];\n var values = {};\n var i, ilen, key; // Scriptable options\n\n var context = {\n chart: chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n };\n var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth', 'hoverRadius', 'hitRadius', 'pointStyle', 'rotation'];\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve$2([custom[key], dataset[key], options[key]], context, index);\n } // Custom radius resolution\n\n\n values.radius = resolve$2([custom.radius, data ? data.r : undefined, dataset.radius, options.radius], context, index);\n return values;\n }\n });\n var resolve$3 = helpers$1.options.resolve;\n var valueOrDefault$4 = helpers$1.valueOrDefault;\n\n core_defaults._set('doughnut', {\n animation: {\n // Boolean - Whether we animate the rotation of the Doughnut\n animateRotate: true,\n // Boolean - Whether we animate scaling the Doughnut from the centre\n animateScale: false\n },\n hover: {\n mode: 'single'\n },\n legendCallback: function legendCallback(chart) {\n var text = [];\n text.push('<ul class=\"' + chart.id + '-legend\">');\n var data = chart.data;\n var datasets = data.datasets;\n var labels = data.labels;\n\n if (datasets.length) {\n for (var i = 0; i < datasets[0].data.length; ++i) {\n text.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n\n if (labels[i]) {\n text.push(labels[i]);\n }\n\n text.push('</li>');\n }\n }\n\n text.push('</ul>');\n return text.join('');\n },\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var ds = data.datasets[0];\n var arc = meta.data[i];\n var custom = arc && arc.custom || {};\n var arcOpts = chart.options.elements.arc;\n var fill = resolve$3([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);\n var stroke = resolve$3([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);\n var bw = resolve$3([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);\n return {\n text: label,\n fillStyle: fill,\n strokeStyle: stroke,\n lineWidth: bw,\n hidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem) {\n var index = legendItem.index;\n var chart = this.chart;\n var i, ilen, meta;\n\n for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n meta = chart.getDatasetMeta(i); // toggle visibility of index if exists\n\n if (meta.data[index]) {\n meta.data[index].hidden = !meta.data[index].hidden;\n }\n }\n\n chart.update();\n }\n },\n // The percentage of the chart that we cut out of the middle.\n cutoutPercentage: 50,\n // The rotation of the chart, where the first data arc begins.\n rotation: Math.PI * -0.5,\n // The total circumference of the chart.\n circumference: Math.PI * 2.0,\n // Need to override these to give a nice default\n tooltips: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(tooltipItem, data) {\n var dataLabel = data.labels[tooltipItem.index];\n var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\n if (helpers$1.isArray(dataLabel)) {\n // show value on first line of multiline label\n // need to clone because we are changing the value\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return dataLabel;\n }\n }\n }\n });\n\n var controller_doughnut = core_datasetController.extend({\n dataElementType: elements.Arc,\n linkScales: helpers$1.noop,\n // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n getRingIndex: function getRingIndex(datasetIndex) {\n var ringIndex = 0;\n\n for (var j = 0; j < datasetIndex; ++j) {\n if (this.chart.isDatasetVisible(j)) {\n ++ringIndex;\n }\n }\n\n return ringIndex;\n },\n update: function update(reset) {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var availableWidth = chartArea.right - chartArea.left;\n var availableHeight = chartArea.bottom - chartArea.top;\n var minSize = Math.min(availableWidth, availableHeight);\n var offset = {\n x: 0,\n y: 0\n };\n var meta = me.getMeta();\n var arcs = meta.data;\n var cutoutPercentage = opts.cutoutPercentage;\n var circumference = opts.circumference;\n\n var chartWeight = me._getRingWeight(me.index);\n\n var i, ilen; // If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc\n\n if (circumference < Math.PI * 2.0) {\n var startAngle = opts.rotation % (Math.PI * 2.0);\n startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);\n var endAngle = startAngle + circumference;\n var start = {\n x: Math.cos(startAngle),\n y: Math.sin(startAngle)\n };\n var end = {\n x: Math.cos(endAngle),\n y: Math.sin(endAngle)\n };\n var contains0 = startAngle <= 0 && endAngle >= 0 || startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle;\n var contains90 = startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle || startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle;\n var contains180 = startAngle <= -Math.PI && -Math.PI <= endAngle || startAngle <= Math.PI && Math.PI <= endAngle;\n var contains270 = startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle || startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle;\n var cutout = cutoutPercentage / 100.0;\n var min = {\n x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)),\n y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))\n };\n var max = {\n x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)),\n y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))\n };\n var size = {\n width: (max.x - min.x) * 0.5,\n height: (max.y - min.y) * 0.5\n };\n minSize = Math.min(availableWidth / size.width, availableHeight / size.height);\n offset = {\n x: (max.x + min.x) * -0.5,\n y: (max.y + min.y) * -0.5\n };\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n arcs[i]._options = me._resolveElementOptions(arcs[i], i);\n }\n\n chart.borderWidth = me.getMaxBorderWidth();\n chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);\n chart.innerRadius = Math.max(cutoutPercentage ? chart.outerRadius / 100 * cutoutPercentage : 0, 0);\n chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\n chart.offsetX = offset.x * chart.outerRadius;\n chart.offsetY = offset.y * chart.outerRadius;\n meta.total = me.calculateTotal();\n me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\n me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n me.updateElement(arcs[i], i, reset);\n }\n },\n updateElement: function updateElement(arc, index, reset) {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var animationOpts = opts.animation;\n var centerX = (chartArea.left + chartArea.right) / 2;\n var centerY = (chartArea.top + chartArea.bottom) / 2;\n var startAngle = opts.rotation; // non reset case handled later\n\n var endAngle = opts.rotation; // non reset case handled later\n\n var dataset = me.getDataset();\n var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI));\n var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n var options = arc._options || {};\n helpers$1.extend(arc, {\n // Utility\n _datasetIndex: me.index,\n _index: index,\n // Desired view properties\n _model: {\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n borderAlign: options.borderAlign,\n x: centerX + chart.offsetX,\n y: centerY + chart.offsetY,\n startAngle: startAngle,\n endAngle: endAngle,\n circumference: circumference,\n outerRadius: outerRadius,\n innerRadius: innerRadius,\n label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n }\n });\n var model = arc._model; // Set correct angles if not resetting\n\n if (!reset || !animationOpts.animateRotate) {\n if (index === 0) {\n model.startAngle = opts.rotation;\n } else {\n model.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n }\n\n model.endAngle = model.startAngle + model.circumference;\n }\n\n arc.pivot();\n },\n calculateTotal: function calculateTotal() {\n var dataset = this.getDataset();\n var meta = this.getMeta();\n var total = 0;\n var value;\n helpers$1.each(meta.data, function (element, index) {\n value = dataset.data[index];\n\n if (!isNaN(value) && !element.hidden) {\n total += Math.abs(value);\n }\n });\n /* if (total === 0) {\n \ttotal = NaN;\n }*/\n\n return total;\n },\n calculateCircumference: function calculateCircumference(value) {\n var total = this.getMeta().total;\n\n if (total > 0 && !isNaN(value)) {\n return Math.PI * 2.0 * (Math.abs(value) / total);\n }\n\n return 0;\n },\n // gets the max border or hover width to properly scale pie charts\n getMaxBorderWidth: function getMaxBorderWidth(arcs) {\n var me = this;\n var max = 0;\n var chart = me.chart;\n var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\n\n if (!arcs) {\n // Find the outmost visible dataset\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n\n if (i !== me.index) {\n controller = meta.controller;\n }\n\n break;\n }\n }\n }\n\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n arc = arcs[i];\n options = controller ? controller._resolveElementOptions(arc, i) : arc._options;\n\n if (options.borderAlign !== 'inner') {\n borderWidth = options.borderWidth;\n hoverWidth = options.hoverBorderWidth;\n max = borderWidth > max ? borderWidth : max;\n max = hoverWidth > max ? hoverWidth : max;\n }\n }\n\n return max;\n },\n\n /**\n * @protected\n */\n setHoverStyle: function setHoverStyle(arc) {\n var model = arc._model;\n var options = arc._options;\n var getHoverColor = helpers$1.getHoverColor;\n arc.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth\n };\n model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\n },\n\n /**\n * @private\n */\n _resolveElementOptions: function _resolveElementOptions(arc, index) {\n var me = this;\n var chart = me.chart;\n var dataset = me.getDataset();\n var custom = arc.custom || {};\n var options = chart.options.elements.arc;\n var values = {};\n var i, ilen, key; // Scriptable options\n\n var context = {\n chart: chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n };\n var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'];\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve$3([custom[key], dataset[key], options[key]], context, index);\n }\n\n return values;\n },\n\n /**\n * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n * @private\n */\n _getRingWeightOffset: function _getRingWeightOffset(datasetIndex) {\n var ringWeightOffset = 0;\n\n for (var i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n },\n\n /**\n * @private\n */\n _getRingWeight: function _getRingWeight(dataSetIndex) {\n return Math.max(valueOrDefault$4(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\n },\n\n /**\n * Returns the sum of all visibile data set weights. This value can be 0.\n * @private\n */\n _getVisibleDatasetWeightTotal: function _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length);\n }\n });\n\n core_defaults._set('horizontalBar', {\n hover: {\n mode: 'index',\n axis: 'y'\n },\n scales: {\n xAxes: [{\n type: 'linear',\n position: 'bottom'\n }],\n yAxes: [{\n type: 'category',\n position: 'left',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n offset: true,\n gridLines: {\n offsetGridLines: true\n }\n }]\n },\n elements: {\n rectangle: {\n borderSkipped: 'left'\n }\n },\n tooltips: {\n mode: 'index',\n axis: 'y'\n }\n });\n\n var controller_horizontalBar = controller_bar.extend({\n /**\n * @private\n */\n _getValueScaleId: function _getValueScaleId() {\n return this.getMeta().xAxisID;\n },\n\n /**\n * @private\n */\n _getIndexScaleId: function _getIndexScaleId() {\n return this.getMeta().yAxisID;\n }\n });\n var valueOrDefault$5 = helpers$1.valueOrDefault;\n var resolve$4 = helpers$1.options.resolve;\n var isPointInArea = helpers$1.canvas._isPointInArea;\n\n core_defaults._set('line', {\n showLines: true,\n spanGaps: false,\n hover: {\n mode: 'label'\n },\n scales: {\n xAxes: [{\n type: 'category',\n id: 'x-axis-0'\n }],\n yAxes: [{\n type: 'linear',\n id: 'y-axis-0'\n }]\n }\n });\n\n function lineEnabled(dataset, options) {\n return valueOrDefault$5(dataset.showLine, options.showLines);\n }\n\n var controller_line = core_datasetController.extend({\n datasetElementType: elements.Line,\n dataElementType: elements.Point,\n update: function update(reset) {\n var me = this;\n var meta = me.getMeta();\n var line = meta.dataset;\n var points = meta.data || [];\n var scale = me.getScaleForId(meta.yAxisID);\n var dataset = me.getDataset();\n var showLine = lineEnabled(dataset, me.chart.options);\n var i, ilen; // Update Line\n\n if (showLine) {\n // Compatibility: If the properties are defined with only the old name, use those values\n if (dataset.tension !== undefined && dataset.lineTension === undefined) {\n dataset.lineTension = dataset.tension;\n } // Utility\n\n\n line._scale = scale;\n line._datasetIndex = me.index; // Data\n\n line._children = points; // Model\n\n line._model = me._resolveLineOptions(line);\n line.pivot();\n } // Update Points\n\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n me.updateElement(points[i], i, reset);\n }\n\n if (showLine && line._model.tension !== 0) {\n me.updateBezierControlPoints();\n } // Now pivot the point for animation\n\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n points[i].pivot();\n }\n },\n updateElement: function updateElement(point, index, reset) {\n var me = this;\n var meta = me.getMeta();\n var custom = point.custom || {};\n var dataset = me.getDataset();\n var datasetIndex = me.index;\n var value = dataset.data[index];\n var yScale = me.getScaleForId(meta.yAxisID);\n var xScale = me.getScaleForId(meta.xAxisID);\n var lineModel = meta.dataset._model;\n var x, y;\n\n var options = me._resolvePointOptions(point, index);\n\n x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\n y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex); // Utility\n\n point._xScale = xScale;\n point._yScale = yScale;\n point._options = options;\n point._datasetIndex = datasetIndex;\n point._index = index; // Desired view properties\n\n point._model = {\n x: x,\n y: y,\n skip: custom.skip || isNaN(x) || isNaN(y),\n // Appearance\n radius: options.radius,\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n tension: valueOrDefault$5(custom.tension, lineModel ? lineModel.tension : 0),\n steppedLine: lineModel ? lineModel.steppedLine : false,\n // Tooltip\n hitRadius: options.hitRadius\n };\n },\n\n /**\n * @private\n */\n _resolvePointOptions: function _resolvePointOptions(element, index) {\n var me = this;\n var chart = me.chart;\n var dataset = chart.data.datasets[me.index];\n var custom = element.custom || {};\n var options = chart.options.elements.point;\n var values = {};\n var i, ilen, key; // Scriptable options\n\n var context = {\n chart: chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n };\n var ELEMENT_OPTIONS = {\n backgroundColor: 'pointBackgroundColor',\n borderColor: 'pointBorderColor',\n borderWidth: 'pointBorderWidth',\n hitRadius: 'pointHitRadius',\n hoverBackgroundColor: 'pointHoverBackgroundColor',\n hoverBorderColor: 'pointHoverBorderColor',\n hoverBorderWidth: 'pointHoverBorderWidth',\n hoverRadius: 'pointHoverRadius',\n pointStyle: 'pointStyle',\n radius: 'pointRadius',\n rotation: 'pointRotation'\n };\n var keys = Object.keys(ELEMENT_OPTIONS);\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve$4([custom[key], dataset[ELEMENT_OPTIONS[key]], dataset[key], options[key]], context, index);\n }\n\n return values;\n },\n\n /**\n * @private\n */\n _resolveLineOptions: function _resolveLineOptions(element) {\n var me = this;\n var chart = me.chart;\n var dataset = chart.data.datasets[me.index];\n var custom = element.custom || {};\n var options = chart.options;\n var elementOptions = options.elements.line;\n var values = {};\n var i, ilen, key;\n var keys = ['backgroundColor', 'borderWidth', 'borderColor', 'borderCapStyle', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'fill', 'cubicInterpolationMode'];\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve$4([custom[key], dataset[key], elementOptions[key]]);\n } // The default behavior of lines is to break at null values, according\n // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n // This option gives lines the ability to span gaps\n\n\n values.spanGaps = valueOrDefault$5(dataset.spanGaps, options.spanGaps);\n values.tension = valueOrDefault$5(dataset.lineTension, elementOptions.tension);\n values.steppedLine = resolve$4([custom.steppedLine, dataset.steppedLine, elementOptions.stepped]);\n return values;\n },\n calculatePointY: function calculatePointY(value, index, datasetIndex) {\n var me = this;\n var chart = me.chart;\n var meta = me.getMeta();\n var yScale = me.getScaleForId(meta.yAxisID);\n var sumPos = 0;\n var sumNeg = 0;\n var i, ds, dsMeta;\n\n if (yScale.options.stacked) {\n for (i = 0; i < datasetIndex; i++) {\n ds = chart.data.datasets[i];\n dsMeta = chart.getDatasetMeta(i);\n\n if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n var stackedRightValue = Number(yScale.getRightValue(ds.data[index]));\n\n if (stackedRightValue < 0) {\n sumNeg += stackedRightValue || 0;\n } else {\n sumPos += stackedRightValue || 0;\n }\n }\n }\n\n var rightValue = Number(yScale.getRightValue(value));\n\n if (rightValue < 0) {\n return yScale.getPixelForValue(sumNeg + rightValue);\n }\n\n return yScale.getPixelForValue(sumPos + rightValue);\n }\n\n return yScale.getPixelForValue(value);\n },\n updateBezierControlPoints: function updateBezierControlPoints() {\n var me = this;\n var chart = me.chart;\n var meta = me.getMeta();\n var lineModel = meta.dataset._model;\n var area = chart.chartArea;\n var points = meta.data || [];\n var i, ilen, model, controlPoints; // Only consider points that are drawn in case the spanGaps option is used\n\n if (lineModel.spanGaps) {\n points = points.filter(function (pt) {\n return !pt._model.skip;\n });\n }\n\n function capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n }\n\n if (lineModel.cubicInterpolationMode === 'monotone') {\n helpers$1.splineCurveMonotone(points);\n } else {\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n model = points[i]._model;\n controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i)._model, model, helpers$1.nextItem(points, i)._model, lineModel.tension);\n model.controlPointPreviousX = controlPoints.previous.x;\n model.controlPointPreviousY = controlPoints.previous.y;\n model.controlPointNextX = controlPoints.next.x;\n model.controlPointNextY = controlPoints.next.y;\n }\n }\n\n if (chart.options.elements.line.capBezierPoints) {\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n model = points[i]._model;\n\n if (isPointInArea(model, area)) {\n if (i > 0 && isPointInArea(points[i - 1]._model, area)) {\n model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n }\n\n if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\n model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n }\n }\n }\n }\n },\n draw: function draw() {\n var me = this;\n var chart = me.chart;\n var meta = me.getMeta();\n var points = meta.data || [];\n var area = chart.chartArea;\n var ilen = points.length;\n var halfBorderWidth;\n var i = 0;\n\n if (lineEnabled(me.getDataset(), chart.options)) {\n halfBorderWidth = (meta.dataset._model.borderWidth || 0) / 2;\n helpers$1.canvas.clipArea(chart.ctx, {\n left: area.left,\n right: area.right,\n top: area.top - halfBorderWidth,\n bottom: area.bottom + halfBorderWidth\n });\n meta.dataset.draw();\n helpers$1.canvas.unclipArea(chart.ctx);\n } // Draw the points\n\n\n for (; i < ilen; ++i) {\n points[i].draw(area);\n }\n },\n\n /**\n * @protected\n */\n setHoverStyle: function setHoverStyle(point) {\n var model = point._model;\n var options = point._options;\n var getHoverColor = helpers$1.getHoverColor;\n point.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth,\n radius: model.radius\n };\n model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\n model.radius = valueOrDefault$5(options.hoverRadius, options.radius);\n }\n });\n var resolve$5 = helpers$1.options.resolve;\n\n core_defaults._set('polarArea', {\n scale: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n gridLines: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n ticks: {\n beginAtZero: true\n }\n },\n // Boolean - Whether to animate the rotation of the chart\n animation: {\n animateRotate: true,\n animateScale: true\n },\n startAngle: -0.5 * Math.PI,\n legendCallback: function legendCallback(chart) {\n var text = [];\n text.push('<ul class=\"' + chart.id + '-legend\">');\n var data = chart.data;\n var datasets = data.datasets;\n var labels = data.labels;\n\n if (datasets.length) {\n for (var i = 0; i < datasets[0].data.length; ++i) {\n text.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n\n if (labels[i]) {\n text.push(labels[i]);\n }\n\n text.push('</li>');\n }\n }\n\n text.push('</ul>');\n return text.join('');\n },\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var ds = data.datasets[0];\n var arc = meta.data[i];\n var custom = arc.custom || {};\n var arcOpts = chart.options.elements.arc;\n var fill = resolve$5([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);\n var stroke = resolve$5([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);\n var bw = resolve$5([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);\n return {\n text: label,\n fillStyle: fill,\n strokeStyle: stroke,\n lineWidth: bw,\n hidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n // Extra data used for toggling the correct item\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem) {\n var index = legendItem.index;\n var chart = this.chart;\n var i, ilen, meta;\n\n for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n meta = chart.getDatasetMeta(i);\n meta.data[index].hidden = !meta.data[index].hidden;\n }\n\n chart.update();\n }\n },\n // Need to override these to give a nice default\n tooltips: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(item, data) {\n return data.labels[item.index] + ': ' + item.yLabel;\n }\n }\n }\n });\n\n var controller_polarArea = core_datasetController.extend({\n dataElementType: elements.Arc,\n linkScales: helpers$1.noop,\n update: function update(reset) {\n var me = this;\n var dataset = me.getDataset();\n var meta = me.getMeta();\n var start = me.chart.options.startAngle || 0;\n var starts = me._starts = [];\n var angles = me._angles = [];\n var arcs = meta.data;\n var i, ilen, angle;\n\n me._updateRadius();\n\n meta.count = me.countVisibleElements();\n\n for (i = 0, ilen = dataset.data.length; i < ilen; i++) {\n starts[i] = start;\n angle = me._computeAngle(i);\n angles[i] = angle;\n start += angle;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n arcs[i]._options = me._resolveElementOptions(arcs[i], i);\n me.updateElement(arcs[i], i, reset);\n }\n },\n\n /**\n * @private\n */\n _updateRadius: function _updateRadius() {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n chart.outerRadius = Math.max(minSize / 2, 0);\n chart.innerRadius = Math.max(opts.cutoutPercentage ? chart.outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n me.outerRadius = chart.outerRadius - chart.radiusLength * me.index;\n me.innerRadius = me.outerRadius - chart.radiusLength;\n },\n updateElement: function updateElement(arc, index, reset) {\n var me = this;\n var chart = me.chart;\n var dataset = me.getDataset();\n var opts = chart.options;\n var animationOpts = opts.animation;\n var scale = chart.scale;\n var labels = chart.data.labels;\n var centerX = scale.xCenter;\n var centerY = scale.yCenter; // var negHalfPI = -0.5 * Math.PI;\n\n var datasetStartAngle = opts.startAngle;\n var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n var startAngle = me._starts[index];\n var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\n var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n var options = arc._options || {};\n helpers$1.extend(arc, {\n // Utility\n _datasetIndex: me.index,\n _index: index,\n _scale: scale,\n // Desired view properties\n _model: {\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n borderAlign: options.borderAlign,\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius: reset ? resetRadius : distance,\n startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\n }\n });\n arc.pivot();\n },\n countVisibleElements: function countVisibleElements() {\n var dataset = this.getDataset();\n var meta = this.getMeta();\n var count = 0;\n helpers$1.each(meta.data, function (element, index) {\n if (!isNaN(dataset.data[index]) && !element.hidden) {\n count++;\n }\n });\n return count;\n },\n\n /**\n * @protected\n */\n setHoverStyle: function setHoverStyle(arc) {\n var model = arc._model;\n var options = arc._options;\n var getHoverColor = helpers$1.getHoverColor;\n var valueOrDefault = helpers$1.valueOrDefault;\n arc.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth\n };\n model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n },\n\n /**\n * @private\n */\n _resolveElementOptions: function _resolveElementOptions(arc, index) {\n var me = this;\n var chart = me.chart;\n var dataset = me.getDataset();\n var custom = arc.custom || {};\n var options = chart.options.elements.arc;\n var values = {};\n var i, ilen, key; // Scriptable options\n\n var context = {\n chart: chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n };\n var keys = ['backgroundColor', 'borderColor', 'borderWidth', 'borderAlign', 'hoverBackgroundColor', 'hoverBorderColor', 'hoverBorderWidth'];\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve$5([custom[key], dataset[key], options[key]], context, index);\n }\n\n return values;\n },\n\n /**\n * @private\n */\n _computeAngle: function _computeAngle(index) {\n var me = this;\n var count = this.getMeta().count;\n var dataset = me.getDataset();\n var meta = me.getMeta();\n\n if (isNaN(dataset.data[index]) || meta.data[index].hidden) {\n return 0;\n } // Scriptable options\n\n\n var context = {\n chart: me.chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n };\n return resolve$5([me.chart.options.elements.arc.angle, 2 * Math.PI / count], context, index);\n }\n });\n\n core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\n\n core_defaults._set('pie', {\n cutoutPercentage: 0\n }); // Pie charts are Doughnut chart with different defaults\n\n\n var controller_pie = controller_doughnut;\n var valueOrDefault$6 = helpers$1.valueOrDefault;\n var resolve$6 = helpers$1.options.resolve;\n\n core_defaults._set('radar', {\n scale: {\n type: 'radialLinear'\n },\n elements: {\n line: {\n tension: 0 // no bezier in radar\n\n }\n }\n });\n\n var controller_radar = core_datasetController.extend({\n datasetElementType: elements.Line,\n dataElementType: elements.Point,\n linkScales: helpers$1.noop,\n update: function update(reset) {\n var me = this;\n var meta = me.getMeta();\n var line = meta.dataset;\n var points = meta.data || [];\n var scale = me.chart.scale;\n var dataset = me.getDataset();\n var i, ilen; // Compatibility: If the properties are defined with only the old name, use those values\n\n if (dataset.tension !== undefined && dataset.lineTension === undefined) {\n dataset.lineTension = dataset.tension;\n } // Utility\n\n\n line._scale = scale;\n line._datasetIndex = me.index; // Data\n\n line._children = points;\n line._loop = true; // Model\n\n line._model = me._resolveLineOptions(line);\n line.pivot(); // Update Points\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n me.updateElement(points[i], i, reset);\n } // Update bezier control points\n\n\n me.updateBezierControlPoints(); // Now pivot the point for animation\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n points[i].pivot();\n }\n },\n updateElement: function updateElement(point, index, reset) {\n var me = this;\n var custom = point.custom || {};\n var dataset = me.getDataset();\n var scale = me.chart.scale;\n var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n\n var options = me._resolvePointOptions(point, index);\n\n var lineModel = me.getMeta().dataset._model;\n\n var x = reset ? scale.xCenter : pointPosition.x;\n var y = reset ? scale.yCenter : pointPosition.y; // Utility\n\n point._scale = scale;\n point._options = options;\n point._datasetIndex = me.index;\n point._index = index; // Desired view properties\n\n point._model = {\n x: x,\n // value not used in dataset scale, but we want a consistent API between scales\n y: y,\n skip: custom.skip || isNaN(x) || isNaN(y),\n // Appearance\n radius: options.radius,\n pointStyle: options.pointStyle,\n rotation: options.rotation,\n backgroundColor: options.backgroundColor,\n borderColor: options.borderColor,\n borderWidth: options.borderWidth,\n tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\n // Tooltip\n hitRadius: options.hitRadius\n };\n },\n\n /**\n * @private\n */\n _resolvePointOptions: function _resolvePointOptions(element, index) {\n var me = this;\n var chart = me.chart;\n var dataset = chart.data.datasets[me.index];\n var custom = element.custom || {};\n var options = chart.options.elements.point;\n var values = {};\n var i, ilen, key; // Scriptable options\n\n var context = {\n chart: chart,\n dataIndex: index,\n dataset: dataset,\n datasetIndex: me.index\n };\n var ELEMENT_OPTIONS = {\n backgroundColor: 'pointBackgroundColor',\n borderColor: 'pointBorderColor',\n borderWidth: 'pointBorderWidth',\n hitRadius: 'pointHitRadius',\n hoverBackgroundColor: 'pointHoverBackgroundColor',\n hoverBorderColor: 'pointHoverBorderColor',\n hoverBorderWidth: 'pointHoverBorderWidth',\n hoverRadius: 'pointHoverRadius',\n pointStyle: 'pointStyle',\n radius: 'pointRadius',\n rotation: 'pointRotation'\n };\n var keys = Object.keys(ELEMENT_OPTIONS);\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve$6([custom[key], dataset[ELEMENT_OPTIONS[key]], dataset[key], options[key]], context, index);\n }\n\n return values;\n },\n\n /**\n * @private\n */\n _resolveLineOptions: function _resolveLineOptions(element) {\n var me = this;\n var chart = me.chart;\n var dataset = chart.data.datasets[me.index];\n var custom = element.custom || {};\n var options = chart.options.elements.line;\n var values = {};\n var i, ilen, key;\n var keys = ['backgroundColor', 'borderWidth', 'borderColor', 'borderCapStyle', 'borderDash', 'borderDashOffset', 'borderJoinStyle', 'fill'];\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n values[key] = resolve$6([custom[key], dataset[key], options[key]]);\n }\n\n values.tension = valueOrDefault$6(dataset.lineTension, options.tension);\n return values;\n },\n updateBezierControlPoints: function updateBezierControlPoints() {\n var me = this;\n var meta = me.getMeta();\n var area = me.chart.chartArea;\n var points = meta.data || [];\n var i, ilen, model, controlPoints;\n\n function capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n }\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n model = points[i]._model;\n controlPoints = helpers$1.splineCurve(helpers$1.previousItem(points, i, true)._model, model, helpers$1.nextItem(points, i, true)._model, model.tension); // Prevent the bezier going outside of the bounds of the graph\n\n model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\n model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\n model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\n model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\n }\n },\n setHoverStyle: function setHoverStyle(point) {\n var model = point._model;\n var options = point._options;\n var getHoverColor = helpers$1.getHoverColor;\n point.$previousStyle = {\n backgroundColor: model.backgroundColor,\n borderColor: model.borderColor,\n borderWidth: model.borderWidth,\n radius: model.radius\n };\n model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\n model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\n model.radius = valueOrDefault$6(options.hoverRadius, options.radius);\n }\n });\n\n core_defaults._set('scatter', {\n hover: {\n mode: 'single'\n },\n scales: {\n xAxes: [{\n id: 'x-axis-1',\n // need an ID so datasets can reference the scale\n type: 'linear',\n // scatter should not use a category axis\n position: 'bottom'\n }],\n yAxes: [{\n id: 'y-axis-1',\n type: 'linear',\n position: 'left'\n }]\n },\n showLines: false,\n tooltips: {\n callbacks: {\n title: function title() {\n return ''; // doesn't make sense for scatter since data are formatted as a point\n },\n label: function label(item) {\n return '(' + item.xLabel + ', ' + item.yLabel + ')';\n }\n }\n }\n }); // Scatter charts use line controllers\n\n\n var controller_scatter = controller_line; // NOTE export a map in which the key represents the controller type, not\n // the class, and so must be CamelCase in order to be correctly retrieved\n // by the controller in core.controller.js (`controllers[meta.type]`).\n\n var controllers = {\n bar: controller_bar,\n bubble: controller_bubble,\n doughnut: controller_doughnut,\n horizontalBar: controller_horizontalBar,\n line: controller_line,\n polarArea: controller_polarArea,\n pie: controller_pie,\n radar: controller_radar,\n scatter: controller_scatter\n };\n /**\n * Helper function to get relative position for an event\n * @param {Event|IEvent} event - The event to get the position for\n * @param {Chart} chart - The chart\n * @returns {object} the event position\n */\n\n function getRelativePosition(e, chart) {\n if (e.native) {\n return {\n x: e.x,\n y: e.y\n };\n }\n\n return helpers$1.getRelativePosition(e, chart);\n }\n /**\n * Helper function to traverse all of the visible elements in the chart\n * @param {Chart} chart - the chart\n * @param {function} handler - the callback to execute for each visible item\n */\n\n\n function parseVisibleItems(chart, handler) {\n var datasets = chart.data.datasets;\n var meta, i, j, ilen, jlen;\n\n for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n if (!chart.isDatasetVisible(i)) {\n continue;\n }\n\n meta = chart.getDatasetMeta(i);\n\n for (j = 0, jlen = meta.data.length; j < jlen; ++j) {\n var element = meta.data[j];\n\n if (!element._view.skip) {\n handler(element);\n }\n }\n }\n }\n /**\n * Helper function to get the items that intersect the event position\n * @param {ChartElement[]} items - elements to filter\n * @param {object} position - the point to be nearest to\n * @return {ChartElement[]} the nearest items\n */\n\n\n function getIntersectItems(chart, position) {\n var elements = [];\n parseVisibleItems(chart, function (element) {\n if (element.inRange(position.x, position.y)) {\n elements.push(element);\n }\n });\n return elements;\n }\n /**\n * Helper function to get the items nearest to the event position considering all visible items in teh chart\n * @param {Chart} chart - the chart to look at elements from\n * @param {object} position - the point to be nearest to\n * @param {boolean} intersect - if true, only consider items that intersect the position\n * @param {function} distanceMetric - function to provide the distance between points\n * @return {ChartElement[]} the nearest items\n */\n\n\n function getNearestItems(chart, position, intersect, distanceMetric) {\n var minDistance = Number.POSITIVE_INFINITY;\n var nearestItems = [];\n parseVisibleItems(chart, function (element) {\n if (intersect && !element.inRange(position.x, position.y)) {\n return;\n }\n\n var center = element.getCenterPoint();\n var distance = distanceMetric(position, center);\n\n if (distance < minDistance) {\n nearestItems = [element];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n nearestItems.push(element);\n }\n });\n return nearestItems;\n }\n /**\n * Get a distance metric function for two points based on the\n * axis mode setting\n * @param {string} axis - the axis mode. x|y|xy\n */\n\n\n function getDistanceMetricForAxis(axis) {\n var useX = axis.indexOf('x') !== -1;\n var useY = axis.indexOf('y') !== -1;\n return function (pt1, pt2) {\n var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n }\n\n function indexMode(chart, e, options) {\n var position = getRelativePosition(e, chart); // Default axis for index mode is 'x' to match old behaviour\n\n options.axis = options.axis || 'x';\n var distanceMetric = getDistanceMetricForAxis(options.axis);\n var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n var elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.data.datasets.forEach(function (dataset, datasetIndex) {\n if (chart.isDatasetVisible(datasetIndex)) {\n var meta = chart.getDatasetMeta(datasetIndex);\n var element = meta.data[items[0]._index]; // don't count items that are skipped (null data)\n\n if (element && !element._view.skip) {\n elements.push(element);\n }\n }\n });\n return elements;\n }\n /**\n * @interface IInteractionOptions\n */\n\n /**\n * If true, only consider items that intersect the point\n * @name IInterfaceOptions#boolean\n * @type Boolean\n */\n\n /**\n * Contains interaction related functions\n * @namespace Chart.Interaction\n */\n\n\n var core_interaction = {\n // Helper function for different modes\n modes: {\n single: function single(chart, e) {\n var position = getRelativePosition(e, chart);\n var elements = [];\n parseVisibleItems(chart, function (element) {\n if (element.inRange(position.x, position.y)) {\n elements.push(element);\n return elements;\n }\n });\n return elements.slice(0, 1);\n },\n\n /**\n * @function Chart.Interaction.modes.label\n * @deprecated since version 2.4.0\n * @todo remove at version 3\n * @private\n */\n label: indexMode,\n\n /**\n * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n * @function Chart.Interaction.modes.index\n * @since v2.4.0\n * @param {Chart} chart - the chart we are returning items from\n * @param {Event} e - the event we are find things at\n * @param {IInteractionOptions} options - options to use during interaction\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n */\n index: indexMode,\n\n /**\n * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n * If the options.intersect is false, we find the nearest item and return the items in that dataset\n * @function Chart.Interaction.modes.dataset\n * @param {Chart} chart - the chart we are returning items from\n * @param {Event} e - the event we are find things at\n * @param {IInteractionOptions} options - options to use during interaction\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n */\n dataset: function dataset(chart, e, options) {\n var position = getRelativePosition(e, chart);\n options.axis = options.axis || 'xy';\n var distanceMetric = getDistanceMetricForAxis(options.axis);\n var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\n if (items.length > 0) {\n items = chart.getDatasetMeta(items[0]._datasetIndex).data;\n }\n\n return items;\n },\n\n /**\n * @function Chart.Interaction.modes.x-axis\n * @deprecated since version 2.4.0. Use index mode and intersect == true\n * @todo remove at version 3\n * @private\n */\n 'x-axis': function xAxis(chart, e) {\n return indexMode(chart, e, {\n intersect: false\n });\n },\n\n /**\n * Point mode returns all elements that hit test based on the event position\n * of the event\n * @function Chart.Interaction.modes.intersect\n * @param {Chart} chart - the chart we are returning items from\n * @param {Event} e - the event we are find things at\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n */\n point: function point(chart, e) {\n var position = getRelativePosition(e, chart);\n return getIntersectItems(chart, position);\n },\n\n /**\n * nearest mode returns the element closest to the point\n * @function Chart.Interaction.modes.intersect\n * @param {Chart} chart - the chart we are returning items from\n * @param {Event} e - the event we are find things at\n * @param {IInteractionOptions} options - options to use\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n */\n nearest: function nearest(chart, e, options) {\n var position = getRelativePosition(e, chart);\n options.axis = options.axis || 'xy';\n var distanceMetric = getDistanceMetricForAxis(options.axis);\n return getNearestItems(chart, position, options.intersect, distanceMetric);\n },\n\n /**\n * x mode returns the elements that hit-test at the current x coordinate\n * @function Chart.Interaction.modes.x\n * @param {Chart} chart - the chart we are returning items from\n * @param {Event} e - the event we are find things at\n * @param {IInteractionOptions} options - options to use\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n */\n x: function x(chart, e, options) {\n var position = getRelativePosition(e, chart);\n var items = [];\n var intersectsItem = false;\n parseVisibleItems(chart, function (element) {\n if (element.inXRange(position.x)) {\n items.push(element);\n }\n\n if (element.inRange(position.x, position.y)) {\n intersectsItem = true;\n }\n }); // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n\n if (options.intersect && !intersectsItem) {\n items = [];\n }\n\n return items;\n },\n\n /**\n * y mode returns the elements that hit-test at the current y coordinate\n * @function Chart.Interaction.modes.y\n * @param {Chart} chart - the chart we are returning items from\n * @param {Event} e - the event we are find things at\n * @param {IInteractionOptions} options - options to use\n * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n */\n y: function y(chart, e, options) {\n var position = getRelativePosition(e, chart);\n var items = [];\n var intersectsItem = false;\n parseVisibleItems(chart, function (element) {\n if (element.inYRange(position.y)) {\n items.push(element);\n }\n\n if (element.inRange(position.x, position.y)) {\n intersectsItem = true;\n }\n }); // If we want to trigger on an intersect and we don't have any items\n // that intersect the position, return nothing\n\n if (options.intersect && !intersectsItem) {\n items = [];\n }\n\n return items;\n }\n }\n };\n\n function filterByPosition(array, position) {\n return helpers$1.where(array, function (v) {\n return v.position === position;\n });\n }\n\n function sortByWeight(array, reverse) {\n array.forEach(function (v, i) {\n v._tmpIndex_ = i;\n return v;\n });\n array.sort(function (a, b) {\n var v0 = reverse ? b : a;\n var v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0._tmpIndex_ - v1._tmpIndex_ : v0.weight - v1.weight;\n });\n array.forEach(function (v) {\n delete v._tmpIndex_;\n });\n }\n\n function findMaxPadding(boxes) {\n var top = 0;\n var left = 0;\n var bottom = 0;\n var right = 0;\n helpers$1.each(boxes, function (box) {\n if (box.getPadding) {\n var boxPadding = box.getPadding();\n top = Math.max(top, boxPadding.top);\n left = Math.max(left, boxPadding.left);\n bottom = Math.max(bottom, boxPadding.bottom);\n right = Math.max(right, boxPadding.right);\n }\n });\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right\n };\n }\n\n function addSizeByPosition(boxes, size) {\n helpers$1.each(boxes, function (box) {\n size[box.position] += box.isHorizontal() ? box.height : box.width;\n });\n }\n\n core_defaults._set('global', {\n layout: {\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n }\n });\n /**\n * @interface ILayoutItem\n * @prop {string} position - The position of the item in the chart layout. Possible values are\n * 'left', 'top', 'right', 'bottom', and 'chartArea'\n * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\n * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n * @prop {function} update - Takes two parameters: width and height. Returns size of item\n * @prop {function} getPadding - Returns an object with padding on the edges\n * @prop {number} width - Width of item. Must be valid after update()\n * @prop {number} height - Height of item. Must be valid after update()\n * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n */\n // The layout service is very self explanatory. It's responsible for the layout within a chart.\n // Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n // It is this service's responsibility of carrying out that layout.\n\n\n var core_layouts = {\n defaults: {},\n\n /**\n * Register a box to a chart.\n * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n * @param {Chart} chart - the chart to use\n * @param {ILayoutItem} item - the item to add to be layed out\n */\n addBox: function addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n } // initialize item with default values\n\n\n item.fullWidth = item.fullWidth || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n chart.boxes.push(item);\n },\n\n /**\n * Remove a layoutItem from a chart\n * @param {Chart} chart - the chart to remove the box from\n * @param {ILayoutItem} layoutItem - the item to remove from the layout\n */\n removeBox: function removeBox(chart, layoutItem) {\n var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n\n /**\n * Sets (or updates) options on the given `item`.\n * @param {Chart} chart - the chart in which the item lives (or will be added to)\n * @param {ILayoutItem} item - the item to configure with the given options\n * @param {object} options - the new item options.\n */\n configure: function configure(chart, item, options) {\n var props = ['fullWidth', 'position', 'weight'];\n var ilen = props.length;\n var i = 0;\n var prop;\n\n for (; i < ilen; ++i) {\n prop = props[i];\n\n if (options.hasOwnProperty(prop)) {\n item[prop] = options[prop];\n }\n }\n },\n\n /**\n * Fits boxes of the given chart into the given size by having each box measure itself\n * then running a fitting algorithm\n * @param {Chart} chart - the chart\n * @param {number} width - the width to fit into\n * @param {number} height - the height to fit into\n */\n update: function update(chart, width, height) {\n if (!chart) {\n return;\n }\n\n var layoutOptions = chart.options.layout || {};\n var padding = helpers$1.options.toPadding(layoutOptions.padding);\n var leftPadding = padding.left;\n var rightPadding = padding.right;\n var topPadding = padding.top;\n var bottomPadding = padding.bottom;\n var leftBoxes = filterByPosition(chart.boxes, 'left');\n var rightBoxes = filterByPosition(chart.boxes, 'right');\n var topBoxes = filterByPosition(chart.boxes, 'top');\n var bottomBoxes = filterByPosition(chart.boxes, 'bottom');\n var chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea'); // Sort boxes by weight. A higher weight is further away from the chart area\n\n sortByWeight(leftBoxes, true);\n sortByWeight(rightBoxes, false);\n sortByWeight(topBoxes, true);\n sortByWeight(bottomBoxes, false);\n var verticalBoxes = leftBoxes.concat(rightBoxes);\n var horizontalBoxes = topBoxes.concat(bottomBoxes);\n var outerBoxes = verticalBoxes.concat(horizontalBoxes); // Essentially we now have any number of boxes on each of the 4 sides.\n // Our canvas looks like the following.\n // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n // B1 is the bottom axis\n // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n // an error will be thrown.\n //\n // |----------------------------------------------------|\n // | T1 (Full Width) |\n // |----------------------------------------------------|\n // | | | T2 | |\n // | |----|-------------------------------------|----|\n // | | | C1 | | C2 | |\n // | | |----| |----| |\n // | | | | |\n // | L1 | L2 | ChartArea (C0) | R1 |\n // | | | | |\n // | | |----| |----| |\n // | | | C3 | | C4 | |\n // | |----|-------------------------------------|----|\n // | | | B1 | |\n // |----------------------------------------------------|\n // | B2 (Full Width) |\n // |----------------------------------------------------|\n //\n // What we do to find the best sizing, we do the following\n // 1. Determine the minimum size of the chart area.\n // 2. Split the remaining width equally between each vertical axis\n // 3. Split the remaining height equally between each horizontal axis\n // 4. Give each layout the maximum size it can be. The layout will return it's minimum size\n // 5. Adjust the sizes of each axis based on it's minimum reported size.\n // 6. Refit each axis\n // 7. Position each axis in the final location\n // 8. Tell the chart the final location of the chart area\n // 9. Tell any axes that overlay the chart area the positions of the chart area\n // Step 1\n\n var chartWidth = width - leftPadding - rightPadding;\n var chartHeight = height - topPadding - bottomPadding;\n var chartAreaWidth = chartWidth / 2; // min 50%\n // Step 2\n\n var verticalBoxWidth = (width - chartAreaWidth) / verticalBoxes.length; // Step 3\n // TODO re-limit horizontal axis height (this limit has affected only padding calculation since PR 1837)\n // var horizontalBoxHeight = (height - chartAreaHeight) / horizontalBoxes.length;\n // Step 4\n\n var maxChartAreaWidth = chartWidth;\n var maxChartAreaHeight = chartHeight;\n var outerBoxSizes = {\n top: topPadding,\n left: leftPadding,\n bottom: bottomPadding,\n right: rightPadding\n };\n var minBoxSizes = [];\n var maxPadding;\n\n function getMinimumBoxSize(box) {\n var minSize;\n var isHorizontal = box.isHorizontal();\n\n if (isHorizontal) {\n minSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2);\n maxChartAreaHeight -= minSize.height;\n } else {\n minSize = box.update(verticalBoxWidth, maxChartAreaHeight);\n maxChartAreaWidth -= minSize.width;\n }\n\n minBoxSizes.push({\n horizontal: isHorizontal,\n width: minSize.width,\n box: box\n });\n }\n\n helpers$1.each(outerBoxes, getMinimumBoxSize); // If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)\n\n maxPadding = findMaxPadding(outerBoxes); // At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could\n // be if the axes are drawn at their minimum sizes.\n // Steps 5 & 6\n // Function to fit a box\n\n function fitBox(box) {\n var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function (minBox) {\n return minBox.box === box;\n });\n\n if (minBoxSize) {\n if (minBoxSize.horizontal) {\n var scaleMargin = {\n left: Math.max(outerBoxSizes.left, maxPadding.left),\n right: Math.max(outerBoxSizes.right, maxPadding.right),\n top: 0,\n bottom: 0\n }; // Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends\n // on the margin. Sometimes they need to increase in size slightly\n\n box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);\n } else {\n box.update(minBoxSize.width, maxChartAreaHeight);\n }\n }\n } // Update, and calculate the left and right margins for the horizontal boxes\n\n\n helpers$1.each(verticalBoxes, fitBox);\n addSizeByPosition(verticalBoxes, outerBoxSizes); // Set the Left and Right margins for the horizontal boxes\n\n helpers$1.each(horizontalBoxes, fitBox);\n addSizeByPosition(horizontalBoxes, outerBoxSizes);\n\n function finalFitVerticalBox(box) {\n var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function (minSize) {\n return minSize.box === box;\n });\n var scaleMargin = {\n left: 0,\n right: 0,\n top: outerBoxSizes.top,\n bottom: outerBoxSizes.bottom\n };\n\n if (minBoxSize) {\n box.update(minBoxSize.width, maxChartAreaHeight, scaleMargin);\n }\n } // Let the left layout know the final margin\n\n\n helpers$1.each(verticalBoxes, finalFitVerticalBox); // Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)\n\n outerBoxSizes = {\n top: topPadding,\n left: leftPadding,\n bottom: bottomPadding,\n right: rightPadding\n };\n addSizeByPosition(outerBoxes, outerBoxSizes); // We may be adding some padding to account for rotated x axis labels\n\n var leftPaddingAddition = Math.max(maxPadding.left - outerBoxSizes.left, 0);\n outerBoxSizes.left += leftPaddingAddition;\n outerBoxSizes.right += Math.max(maxPadding.right - outerBoxSizes.right, 0);\n var topPaddingAddition = Math.max(maxPadding.top - outerBoxSizes.top, 0);\n outerBoxSizes.top += topPaddingAddition;\n outerBoxSizes.bottom += Math.max(maxPadding.bottom - outerBoxSizes.bottom, 0); // Figure out if our chart area changed. This would occur if the dataset layout label rotation\n // changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do\n // without calling `fit` again\n\n var newMaxChartAreaHeight = height - outerBoxSizes.top - outerBoxSizes.bottom;\n var newMaxChartAreaWidth = width - outerBoxSizes.left - outerBoxSizes.right;\n\n if (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {\n helpers$1.each(verticalBoxes, function (box) {\n box.height = newMaxChartAreaHeight;\n });\n helpers$1.each(horizontalBoxes, function (box) {\n if (!box.fullWidth) {\n box.width = newMaxChartAreaWidth;\n }\n });\n maxChartAreaHeight = newMaxChartAreaHeight;\n maxChartAreaWidth = newMaxChartAreaWidth;\n } // Step 7 - Position the boxes\n\n\n var left = leftPadding + leftPaddingAddition;\n var top = topPadding + topPaddingAddition;\n\n function placeBox(box) {\n if (box.isHorizontal()) {\n box.left = box.fullWidth ? leftPadding : outerBoxSizes.left;\n box.right = box.fullWidth ? width - rightPadding : outerBoxSizes.left + maxChartAreaWidth;\n box.top = top;\n box.bottom = top + box.height; // Move to next point\n\n top = box.bottom;\n } else {\n box.left = left;\n box.right = left + box.width;\n box.top = outerBoxSizes.top;\n box.bottom = outerBoxSizes.top + maxChartAreaHeight; // Move to next point\n\n left = box.right;\n }\n }\n\n helpers$1.each(leftBoxes.concat(topBoxes), placeBox); // Account for chart width and height\n\n left += maxChartAreaWidth;\n top += maxChartAreaHeight;\n helpers$1.each(rightBoxes, placeBox);\n helpers$1.each(bottomBoxes, placeBox); // Step 8\n\n chart.chartArea = {\n left: outerBoxSizes.left,\n top: outerBoxSizes.top,\n right: outerBoxSizes.left + maxChartAreaWidth,\n bottom: outerBoxSizes.top + maxChartAreaHeight\n }; // Step 9\n\n helpers$1.each(chartAreaBoxes, function (box) {\n box.left = chart.chartArea.left;\n box.top = chart.chartArea.top;\n box.right = chart.chartArea.right;\n box.bottom = chart.chartArea.bottom;\n box.update(maxChartAreaWidth, maxChartAreaHeight);\n });\n }\n };\n /**\n * Platform fallback implementation (minimal).\n * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n */\n\n var platform_basic = {\n acquireContext: function acquireContext(item) {\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n }\n\n return item && item.getContext('2d') || null;\n }\n };\n var platform_dom = \"/*\\n * DOM element rendering detection\\n * https://davidwalsh.name/detect-node-insertion\\n */\\n@keyframes chartjs-render-animation {\\n\\tfrom { opacity: 0.99; }\\n\\tto { opacity: 1; }\\n}\\n\\n.chartjs-render-monitor {\\n\\tanimation: chartjs-render-animation 0.001s;\\n}\\n\\n/*\\n * DOM element resizing detection\\n * https://github.com/marcj/css-element-queries\\n */\\n.chartjs-size-monitor,\\n.chartjs-size-monitor-expand,\\n.chartjs-size-monitor-shrink {\\n\\tposition: absolute;\\n\\tdirection: ltr;\\n\\tleft: 0;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\toverflow: hidden;\\n\\tpointer-events: none;\\n\\tvisibility: hidden;\\n\\tz-index: -1;\\n}\\n\\n.chartjs-size-monitor-expand > div {\\n\\tposition: absolute;\\n\\twidth: 1000000px;\\n\\theight: 1000000px;\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n\\n.chartjs-size-monitor-shrink > div {\\n\\tposition: absolute;\\n\\twidth: 200%;\\n\\theight: 200%;\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n\";\n var platform_dom$1 =\n /*#__PURE__*/\n Object.freeze({\n default: platform_dom\n });\n\n function getCjsExportFromNamespace(n) {\n return n && n.default || n;\n }\n\n var stylesheet = getCjsExportFromNamespace(platform_dom$1);\n var EXPANDO_KEY = '$chartjs';\n var CSS_PREFIX = 'chartjs-';\n var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\n var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\n var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\n var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n /**\n * DOM event types -> Chart.js event types.\n * Note: only events with different types are mapped.\n * @see https://developer.mozilla.org/en-US/docs/Web/Events\n */\n\n var EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n };\n /**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns {number} Size in pixels or undefined if unknown.\n */\n\n function readUsedSize(element, property) {\n var value = helpers$1.getStyle(element, property);\n var matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? Number(matches[1]) : undefined;\n }\n /**\n * Initializes the canvas style and render size without modifying the canvas display size,\n * since responsiveness is handled by the controller.resize() method. The config is used\n * to determine the aspect ratio to apply in case no explicit height has been specified.\n */\n\n\n function initCanvas(canvas, config) {\n var style = canvas.style; // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n // returns null or '' if no explicit value has been set to the canvas attribute.\n\n var renderHeight = canvas.getAttribute('height');\n var renderWidth = canvas.getAttribute('width'); // Chart.js modifies some canvas values that we want to restore on destroy\n\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n }; // Force canvas to display as block to avoid extra space caused by inline\n // elements, which would interfere with the responsive resize process.\n // https://github.com/chartjs/Chart.js/issues/2538\n\n style.display = style.display || 'block';\n\n if (renderWidth === null || renderWidth === '') {\n var displayWidth = readUsedSize(canvas, 'width');\n\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (renderHeight === null || renderHeight === '') {\n if (canvas.style.height === '') {\n // If no explicit render height and style height, let's apply the aspect ratio,\n // which one can be specified by the user but also by charts as default option\n // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n canvas.height = canvas.width / (config.options.aspectRatio || 2);\n } else {\n var displayHeight = readUsedSize(canvas, 'height');\n\n if (displayWidth !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n }\n /**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\n\n\n var supportsEventListenerOptions = function () {\n var supports = false;\n\n try {\n var options = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line getter-return\n get: function get() {\n supports = true;\n }\n });\n window.addEventListener('e', null, options);\n } catch (e) {// continue regardless of error\n }\n\n return supports;\n }(); // Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n // https://github.com/chartjs/Chart.js/issues/4287\n\n\n var eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n } : false;\n\n function addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n\n function removeListener(node, type, listener) {\n node.removeEventListener(type, listener, eventListenerOptions);\n }\n\n function createEvent(type, chart, x, y, nativeEvent) {\n return {\n type: type,\n chart: chart,\n native: nativeEvent || null,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n }\n\n function fromNativeEvent(event, chart) {\n var type = EVENT_TYPES[event.type] || event.type;\n var pos = helpers$1.getRelativePosition(event, chart);\n return createEvent(type, chart, pos.x, pos.y, event);\n }\n\n function throttled(fn, thisArg) {\n var ticking = false;\n var args = [];\n return function () {\n args = Array.prototype.slice.call(arguments);\n thisArg = thisArg || this;\n\n if (!ticking) {\n ticking = true;\n helpers$1.requestAnimFrame.call(window, function () {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n }\n\n function createDiv(cls) {\n var el = document.createElement('div');\n el.className = cls || '';\n return el;\n } // Implementation based on https://github.com/marcj/css-element-queries\n\n\n function createResizer(handler) {\n var maxSize = 1000000; // NOTE(SB) Don't use innerHTML because it could be considered unsafe.\n // https://github.com/chartjs/Chart.js/issues/5902\n\n var resizer = createDiv(CSS_SIZE_MONITOR);\n var expand = createDiv(CSS_SIZE_MONITOR + '-expand');\n var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\n expand.appendChild(createDiv());\n shrink.appendChild(createDiv());\n resizer.appendChild(expand);\n resizer.appendChild(shrink);\n\n resizer._reset = function () {\n expand.scrollLeft = maxSize;\n expand.scrollTop = maxSize;\n shrink.scrollLeft = maxSize;\n shrink.scrollTop = maxSize;\n };\n\n var onScroll = function onScroll() {\n resizer._reset();\n\n handler();\n };\n\n addListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n return resizer;\n } // https://davidwalsh.name/detect-node-insertion\n\n\n function watchForRender(node, handler) {\n var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n var proxy = expando.renderProxy = function (e) {\n if (e.animationName === CSS_RENDER_ANIMATION) {\n handler();\n }\n };\n\n helpers$1.each(ANIMATION_START_EVENTS, function (type) {\n addListener(node, type, proxy);\n }); // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n // is removed then added back immediately (same animation frame?). Accessing the\n // `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n // https://github.com/chartjs/Chart.js/issues/4737\n\n expando.reflow = !!node.offsetParent;\n node.classList.add(CSS_RENDER_MONITOR);\n }\n\n function unwatchForRender(node) {\n var expando = node[EXPANDO_KEY] || {};\n var proxy = expando.renderProxy;\n\n if (proxy) {\n helpers$1.each(ANIMATION_START_EVENTS, function (type) {\n removeListener(node, type, proxy);\n });\n delete expando.renderProxy;\n }\n\n node.classList.remove(CSS_RENDER_MONITOR);\n }\n\n function addResizeListener(node, listener, chart) {\n var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {}); // Let's keep track of this added resizer and thus avoid DOM query when removing it.\n\n var resizer = expando.resizer = createResizer(throttled(function () {\n if (expando.resizer) {\n var container = chart.options.maintainAspectRatio && node.parentNode;\n var w = container ? container.clientWidth : 0;\n listener(createEvent('resize', chart));\n\n if (container && container.clientWidth < w && chart.canvas) {\n // If the container size shrank during chart resize, let's assume\n // scrollbar appeared. So we resize again with the scrollbar visible -\n // effectively making chart smaller and the scrollbar hidden again.\n // Because we are inside `throttled`, and currently `ticking`, scroll\n // events are ignored during this whole 2 resize process.\n // If we assumed wrong and something else happened, we are resizing\n // twice in a frame (potential performance issue)\n listener(createEvent('resize', chart));\n }\n }\n })); // The resizer needs to be attached to the node parent, so we first need to be\n // sure that `node` is attached to the DOM before injecting the resizer element.\n\n watchForRender(node, function () {\n if (expando.resizer) {\n var container = node.parentNode;\n\n if (container && container !== resizer.parentNode) {\n container.insertBefore(resizer, container.firstChild);\n } // The container size might have changed, let's reset the resizer state.\n\n\n resizer._reset();\n }\n });\n }\n\n function removeResizeListener(node) {\n var expando = node[EXPANDO_KEY] || {};\n var resizer = expando.resizer;\n delete expando.resizer;\n unwatchForRender(node);\n\n if (resizer && resizer.parentNode) {\n resizer.parentNode.removeChild(resizer);\n }\n }\n\n function injectCSS(platform, css) {\n // https://stackoverflow.com/q/3922139\n var style = platform._style || document.createElement('style');\n\n if (!platform._style) {\n platform._style = style;\n css = '/* Chart.js */\\n' + css;\n style.setAttribute('type', 'text/css');\n document.getElementsByTagName('head')[0].appendChild(style);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n\n var platform_dom$2 = {\n /**\n * When `true`, prevents the automatic injection of the stylesheet required to\n * correctly detect when the chart is added to the DOM and then resized. This\n * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\n * to be manually imported to make this library compatible with any CSP.\n * See https://github.com/chartjs/Chart.js/issues/5208\n */\n disableCSSInjection: false,\n\n /**\n * This property holds whether this platform is enabled for the current environment.\n * Currently used by platform.js to select the proper implementation.\n * @private\n */\n _enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n\n /**\n * @private\n */\n _ensureLoaded: function _ensureLoaded() {\n if (this._loaded) {\n return;\n }\n\n this._loaded = true; // https://github.com/chartjs/Chart.js/issues/5208\n\n if (!this.disableCSSInjection) {\n injectCSS(this, stylesheet);\n }\n },\n acquireContext: function acquireContext(item, config) {\n if (typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item.length) {\n // Support for array based queries (such as jQuery)\n item = item[0];\n }\n\n if (item && item.canvas) {\n // Support for any object associated to a canvas (including a context2d)\n item = item.canvas;\n } // To prevent canvas fingerprinting, some add-ons undefine the getContext\n // method, for example: https://github.com/kkapsner/CanvasBlocker\n // https://github.com/chartjs/Chart.js/issues/2807\n\n\n var context = item && item.getContext && item.getContext('2d'); // Load platform resources on first chart creation, to make possible to change\n // platform options after importing the library (e.g. `disableCSSInjection`).\n\n this._ensureLoaded(); // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n // inside an iframe or when running in a protected environment. We could guess the\n // types from their toString() value but let's keep things flexible and assume it's\n // a sufficient condition if the item has a context2D which has item as `canvas`.\n // https://github.com/chartjs/Chart.js/issues/3887\n // https://github.com/chartjs/Chart.js/issues/4102\n // https://github.com/chartjs/Chart.js/issues/4152\n\n\n if (context && context.canvas === item) {\n initCanvas(item, config);\n return context;\n }\n\n return null;\n },\n releaseContext: function releaseContext(context) {\n var canvas = context.canvas;\n\n if (!canvas[EXPANDO_KEY]) {\n return;\n }\n\n var initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach(function (prop) {\n var value = initial[prop];\n\n if (helpers$1.isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n helpers$1.each(initial.style || {}, function (value, key) {\n canvas.style[key] = value;\n }); // The canvas render size might have been changed (and thus the state stack discarded),\n // we can't use save() and restore() to restore the initial state. So make sure that at\n // least the canvas context is reset to the default state by setting the canvas width.\n // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n // eslint-disable-next-line no-self-assign\n\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n },\n addEventListener: function addEventListener(chart, type, listener) {\n var canvas = chart.canvas;\n\n if (type === 'resize') {\n // Note: the resize event is not supported on all browsers.\n addResizeListener(canvas, listener, chart);\n return;\n }\n\n var expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n var proxies = expando.proxies || (expando.proxies = {});\n\n var proxy = proxies[chart.id + '_' + type] = function (event) {\n listener(fromNativeEvent(event, chart));\n };\n\n addListener(canvas, type, proxy);\n },\n removeEventListener: function removeEventListener(chart, type, listener) {\n var canvas = chart.canvas;\n\n if (type === 'resize') {\n // Note: the resize event is not supported on all browsers.\n removeResizeListener(canvas);\n return;\n }\n\n var expando = listener[EXPANDO_KEY] || {};\n var proxies = expando.proxies || {};\n var proxy = proxies[chart.id + '_' + type];\n\n if (!proxy) {\n return;\n }\n\n removeListener(canvas, type, proxy);\n }\n }; // DEPRECATIONS\n\n /**\n * Provided for backward compatibility, use EventTarget.addEventListener instead.\n * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n * @function Chart.helpers.addEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\n\n helpers$1.addEvent = addListener;\n /**\n * Provided for backward compatibility, use EventTarget.removeEventListener instead.\n * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\n * @function Chart.helpers.removeEvent\n * @deprecated since version 2.7.0\n * @todo remove at version 3\n * @private\n */\n\n helpers$1.removeEvent = removeListener; // @TODO Make possible to select another platform at build time.\n\n var implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\n /**\n * @namespace Chart.platform\n * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\n * @since 2.4.0\n */\n\n var platform = helpers$1.extend({\n /**\n * @since 2.7.0\n */\n initialize: function initialize() {},\n\n /**\n * Called at chart construction time, returns a context2d instance implementing\n * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n * @param {*} item - The native item from which to acquire context (platform specific)\n * @param {object} options - The chart options\n * @returns {CanvasRenderingContext2D} context2d instance\n */\n acquireContext: function acquireContext() {},\n\n /**\n * Called at chart destruction time, releases any resources associated to the context\n * previously returned by the acquireContext() method.\n * @param {CanvasRenderingContext2D} context - The context2d instance\n * @returns {boolean} true if the method succeeded, else false\n */\n releaseContext: function releaseContext() {},\n\n /**\n * Registers the specified listener on the given chart.\n * @param {Chart} chart - Chart from which to listen for event\n * @param {string} type - The ({@link IEvent}) type to listen for\n * @param {function} listener - Receives a notification (an object that implements\n * the {@link IEvent} interface) when an event of the specified type occurs.\n */\n addEventListener: function addEventListener() {},\n\n /**\n * Removes the specified listener previously registered with addEventListener.\n * @param {Chart} chart - Chart from which to remove the listener\n * @param {string} type - The ({@link IEvent}) type to remove\n * @param {function} listener - The listener function to remove from the event target.\n */\n removeEventListener: function removeEventListener() {}\n }, implementation);\n\n core_defaults._set('global', {\n plugins: {}\n });\n /**\n * The plugin service singleton\n * @namespace Chart.plugins\n * @since 2.1.0\n */\n\n\n var core_plugins = {\n /**\n * Globally registered plugins.\n * @private\n */\n _plugins: [],\n\n /**\n * This identifier is used to invalidate the descriptors cache attached to each chart\n * when a global plugin is registered or unregistered. In this case, the cache ID is\n * incremented and descriptors are regenerated during following API calls.\n * @private\n */\n _cacheId: 0,\n\n /**\n * Registers the given plugin(s) if not already registered.\n * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\n */\n register: function register(plugins) {\n var p = this._plugins;\n [].concat(plugins).forEach(function (plugin) {\n if (p.indexOf(plugin) === -1) {\n p.push(plugin);\n }\n });\n this._cacheId++;\n },\n\n /**\n * Unregisters the given plugin(s) only if registered.\n * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\n */\n unregister: function unregister(plugins) {\n var p = this._plugins;\n [].concat(plugins).forEach(function (plugin) {\n var idx = p.indexOf(plugin);\n\n if (idx !== -1) {\n p.splice(idx, 1);\n }\n });\n this._cacheId++;\n },\n\n /**\n * Remove all registered plugins.\n * @since 2.1.5\n */\n clear: function clear() {\n this._plugins = [];\n this._cacheId++;\n },\n\n /**\n * Returns the number of registered plugins?\n * @returns {number}\n * @since 2.1.5\n */\n count: function count() {\n return this._plugins.length;\n },\n\n /**\n * Returns all registered plugin instances.\n * @returns {IPlugin[]} array of plugin objects.\n * @since 2.1.5\n */\n getAll: function getAll() {\n return this._plugins;\n },\n\n /**\n * Calls enabled plugins for `chart` on the specified hook and with the given args.\n * This method immediately returns as soon as a plugin explicitly returns false. The\n * returned value can be used, for instance, to interrupt the current action.\n * @param {Chart} chart - The chart instance for which plugins should be called.\n * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n * @param {Array} [args] - Extra arguments to apply to the hook call.\n * @returns {boolean} false if any of the plugins return false, else returns true.\n */\n notify: function notify(chart, hook, args) {\n var descriptors = this.descriptors(chart);\n var ilen = descriptors.length;\n var i, descriptor, plugin, params, method;\n\n for (i = 0; i < ilen; ++i) {\n descriptor = descriptors[i];\n plugin = descriptor.plugin;\n method = plugin[hook];\n\n if (typeof method === 'function') {\n params = [chart].concat(args || []);\n params.push(descriptor.options);\n\n if (method.apply(plugin, params) === false) {\n return false;\n }\n }\n }\n\n return true;\n },\n\n /**\n * Returns descriptors of enabled plugins for the given chart.\n * @returns {object[]} [{ plugin, options }]\n * @private\n */\n descriptors: function descriptors(chart) {\n var cache = chart.$plugins || (chart.$plugins = {});\n\n if (cache.id === this._cacheId) {\n return cache.descriptors;\n }\n\n var plugins = [];\n var descriptors = [];\n var config = chart && chart.config || {};\n var options = config.options && config.options.plugins || {};\n\n this._plugins.concat(config.plugins || []).forEach(function (plugin) {\n var idx = plugins.indexOf(plugin);\n\n if (idx !== -1) {\n return;\n }\n\n var id = plugin.id;\n var opts = options[id];\n\n if (opts === false) {\n return;\n }\n\n if (opts === true) {\n opts = helpers$1.clone(core_defaults.global.plugins[id]);\n }\n\n plugins.push(plugin);\n descriptors.push({\n plugin: plugin,\n options: opts || {}\n });\n });\n\n cache.descriptors = descriptors;\n cache.id = this._cacheId;\n return descriptors;\n },\n\n /**\n * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\n * but in some cases, this reference can be changed by the user when updating options.\n * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n * @private\n */\n _invalidate: function _invalidate(chart) {\n delete chart.$plugins;\n }\n };\n var core_scaleService = {\n // Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n // use the new chart options to grab the correct scale\n constructors: {},\n // Use a registration function so that we can move to an ES6 map when we no longer need to support\n // old browsers\n // Scale config defaults\n defaults: {},\n registerScaleType: function registerScaleType(type, scaleConstructor, scaleDefaults) {\n this.constructors[type] = scaleConstructor;\n this.defaults[type] = helpers$1.clone(scaleDefaults);\n },\n getScaleConstructor: function getScaleConstructor(type) {\n return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n },\n getScaleDefaults: function getScaleDefaults(type) {\n // Return the scale defaults merged with the global settings so that we always use the latest ones\n return this.defaults.hasOwnProperty(type) ? helpers$1.merge({}, [core_defaults.scale, this.defaults[type]]) : {};\n },\n updateScaleDefaults: function updateScaleDefaults(type, additions) {\n var me = this;\n\n if (me.defaults.hasOwnProperty(type)) {\n me.defaults[type] = helpers$1.extend(me.defaults[type], additions);\n }\n },\n addScalesToLayout: function addScalesToLayout(chart) {\n // Adds each scale to the chart.boxes array to be sized accordingly\n helpers$1.each(chart.scales, function (scale) {\n // Set ILayoutItem parameters for backwards compatibility\n scale.fullWidth = scale.options.fullWidth;\n scale.position = scale.options.position;\n scale.weight = scale.options.weight;\n core_layouts.addBox(chart, scale);\n });\n }\n };\n var valueOrDefault$7 = helpers$1.valueOrDefault;\n\n core_defaults._set('global', {\n tooltips: {\n enabled: true,\n custom: null,\n mode: 'nearest',\n position: 'average',\n intersect: true,\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleFontStyle: 'bold',\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleFontColor: '#fff',\n titleAlign: 'left',\n bodySpacing: 2,\n bodyFontColor: '#fff',\n bodyAlign: 'left',\n footerFontStyle: 'bold',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFontColor: '#fff',\n footerAlign: 'left',\n yPadding: 6,\n xPadding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n multiKeyBackground: '#fff',\n displayColors: true,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n callbacks: {\n // Args are: (tooltipItems, data)\n beforeTitle: helpers$1.noop,\n title: function title(tooltipItems, data) {\n var title = '';\n var labels = data.labels;\n var labelCount = labels ? labels.length : 0;\n\n if (tooltipItems.length > 0) {\n var item = tooltipItems[0];\n\n if (item.label) {\n title = item.label;\n } else if (item.xLabel) {\n title = item.xLabel;\n } else if (labelCount > 0 && item.index < labelCount) {\n title = labels[item.index];\n }\n }\n\n return title;\n },\n afterTitle: helpers$1.noop,\n // Args are: (tooltipItems, data)\n beforeBody: helpers$1.noop,\n // Args are: (tooltipItem, data)\n beforeLabel: helpers$1.noop,\n label: function label(tooltipItem, data) {\n var label = data.datasets[tooltipItem.datasetIndex].label || '';\n\n if (label) {\n label += ': ';\n }\n\n if (!helpers$1.isNullOrUndef(tooltipItem.value)) {\n label += tooltipItem.value;\n } else {\n label += tooltipItem.yLabel;\n }\n\n return label;\n },\n labelColor: function labelColor(tooltipItem, chart) {\n var meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\n var activeElement = meta.data[tooltipItem.index];\n var view = activeElement._view;\n return {\n borderColor: view.borderColor,\n backgroundColor: view.backgroundColor\n };\n },\n labelTextColor: function labelTextColor() {\n return this._options.bodyFontColor;\n },\n afterLabel: helpers$1.noop,\n // Args are: (tooltipItems, data)\n afterBody: helpers$1.noop,\n // Args are: (tooltipItems, data)\n beforeFooter: helpers$1.noop,\n footer: helpers$1.noop,\n afterFooter: helpers$1.noop\n }\n }\n });\n\n var positioners = {\n /**\n * Average mode places the tooltip at the average position of the elements shown\n * @function Chart.Tooltip.positioners.average\n * @param elements {ChartElement[]} the elements being displayed in the tooltip\n * @returns {object} tooltip position\n */\n average: function average(elements) {\n if (!elements.length) {\n return false;\n }\n\n var i, len;\n var x = 0;\n var y = 0;\n var count = 0;\n\n for (i = 0, len = elements.length; i < len; ++i) {\n var el = elements[i];\n\n if (el && el.hasValue()) {\n var pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n\n return {\n x: x / count,\n y: y / count\n };\n },\n\n /**\n * Gets the tooltip position nearest of the item nearest to the event position\n * @function Chart.Tooltip.positioners.nearest\n * @param elements {Chart.Element[]} the tooltip elements\n * @param eventPosition {object} the position of the event in canvas coordinates\n * @returns {object} the tooltip position\n */\n nearest: function nearest(elements, eventPosition) {\n var x = eventPosition.x;\n var y = eventPosition.y;\n var minDistance = Number.POSITIVE_INFINITY;\n var i, len, nearestElement;\n\n for (i = 0, len = elements.length; i < len; ++i) {\n var el = elements[i];\n\n if (el && el.hasValue()) {\n var center = el.getCenterPoint();\n var d = helpers$1.distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n var tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x: x,\n y: y\n };\n }\n }; // Helper to push or concat based on if the 2nd parameter is an array or not\n\n function pushOrConcat(base, toPush) {\n if (toPush) {\n if (helpers$1.isArray(toPush)) {\n // base = base.concat(toPush);\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n }\n /**\n * Returns array of strings split by newline\n * @param {string} value - The value to split by newline.\n * @returns {string[]} value if newline present - Returned from String split() method\n * @function\n */\n\n\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n\n return str;\n }\n /**\n * Private helper to create a tooltip item model\n * @param element - the chart element (point, arc, bar) to create the tooltip item for\n * @return new tooltip item\n */\n\n\n function createTooltipItem(element) {\n var xScale = element._xScale;\n var yScale = element._yScale || element._scale; // handle radar || polarArea charts\n\n var index = element._index;\n var datasetIndex = element._datasetIndex;\n\n var controller = element._chart.getDatasetMeta(datasetIndex).controller;\n\n var indexScale = controller._getIndexScale();\n\n var valueScale = controller._getValueScale();\n\n return {\n xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n label: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\n value: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\n index: index,\n datasetIndex: datasetIndex,\n x: element._model.x,\n y: element._model.y\n };\n }\n /**\n * Helper to get the reset model for the tooltip\n * @param tooltipOpts {object} the tooltip options\n */\n\n\n function getBaseModel(tooltipOpts) {\n var globalDefaults = core_defaults.global;\n return {\n // Positioning\n xPadding: tooltipOpts.xPadding,\n yPadding: tooltipOpts.yPadding,\n xAlign: tooltipOpts.xAlign,\n yAlign: tooltipOpts.yAlign,\n // Body\n bodyFontColor: tooltipOpts.bodyFontColor,\n _bodyFontFamily: valueOrDefault$7(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n _bodyFontStyle: valueOrDefault$7(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n _bodyAlign: tooltipOpts.bodyAlign,\n bodyFontSize: valueOrDefault$7(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n bodySpacing: tooltipOpts.bodySpacing,\n // Title\n titleFontColor: tooltipOpts.titleFontColor,\n _titleFontFamily: valueOrDefault$7(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n _titleFontStyle: valueOrDefault$7(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n titleFontSize: valueOrDefault$7(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n _titleAlign: tooltipOpts.titleAlign,\n titleSpacing: tooltipOpts.titleSpacing,\n titleMarginBottom: tooltipOpts.titleMarginBottom,\n // Footer\n footerFontColor: tooltipOpts.footerFontColor,\n _footerFontFamily: valueOrDefault$7(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n _footerFontStyle: valueOrDefault$7(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n footerFontSize: valueOrDefault$7(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n _footerAlign: tooltipOpts.footerAlign,\n footerSpacing: tooltipOpts.footerSpacing,\n footerMarginTop: tooltipOpts.footerMarginTop,\n // Appearance\n caretSize: tooltipOpts.caretSize,\n cornerRadius: tooltipOpts.cornerRadius,\n backgroundColor: tooltipOpts.backgroundColor,\n opacity: 0,\n legendColorBackground: tooltipOpts.multiKeyBackground,\n displayColors: tooltipOpts.displayColors,\n borderColor: tooltipOpts.borderColor,\n borderWidth: tooltipOpts.borderWidth\n };\n }\n /**\n * Get the size of the tooltip\n */\n\n\n function getTooltipSize(tooltip, model) {\n var ctx = tooltip._chart.ctx;\n var height = model.yPadding * 2; // Tooltip Padding\n\n var width = 0; // Count of all lines in the body\n\n var body = model.body;\n var combinedBodyLength = body.reduce(function (count, bodyItem) {\n return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n }, 0);\n combinedBodyLength += model.beforeBody.length + model.afterBody.length;\n var titleLineCount = model.title.length;\n var footerLineCount = model.footer.length;\n var titleFontSize = model.titleFontSize;\n var bodyFontSize = model.bodyFontSize;\n var footerFontSize = model.footerFontSize;\n height += titleLineCount * titleFontSize; // Title Lines\n\n height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\n\n height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\n\n height += combinedBodyLength * bodyFontSize; // Body Lines\n\n height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\n\n height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\n\n height += footerLineCount * footerFontSize; // Footer Lines\n\n height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\n // Title width\n\n var widthPadding = 0;\n\n var maxLineWidth = function maxLineWidth(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n\n ctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\n helpers$1.each(model.title, maxLineWidth); // Body width\n\n ctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\n helpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth); // Body lines may include some extra width due to the color box\n\n widthPadding = model.displayColors ? bodyFontSize + 2 : 0;\n helpers$1.each(body, function (bodyItem) {\n helpers$1.each(bodyItem.before, maxLineWidth);\n helpers$1.each(bodyItem.lines, maxLineWidth);\n helpers$1.each(bodyItem.after, maxLineWidth);\n }); // Reset back to 0\n\n widthPadding = 0; // Footer width\n\n ctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\n helpers$1.each(model.footer, maxLineWidth); // Add padding\n\n width += 2 * model.xPadding;\n return {\n width: width,\n height: height\n };\n }\n /**\n * Helper to get the alignment of a tooltip given the size\n */\n\n\n function determineAlignment(tooltip, size) {\n var model = tooltip._model;\n var chart = tooltip._chart;\n var chartArea = tooltip._chart.chartArea;\n var xAlign = 'center';\n var yAlign = 'center';\n\n if (model.y < size.height) {\n yAlign = 'top';\n } else if (model.y > chart.height - size.height) {\n yAlign = 'bottom';\n }\n\n var lf, rf; // functions to determine left, right alignment\n\n var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n\n var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n\n var midX = (chartArea.left + chartArea.right) / 2;\n var midY = (chartArea.top + chartArea.bottom) / 2;\n\n if (yAlign === 'center') {\n lf = function lf(x) {\n return x <= midX;\n };\n\n rf = function rf(x) {\n return x > midX;\n };\n } else {\n lf = function lf(x) {\n return x <= size.width / 2;\n };\n\n rf = function rf(x) {\n return x >= chart.width - size.width / 2;\n };\n }\n\n olf = function olf(x) {\n return x + size.width + model.caretSize + model.caretPadding > chart.width;\n };\n\n orf = function orf(x) {\n return x - size.width - model.caretSize - model.caretPadding < 0;\n };\n\n yf = function yf(y) {\n return y <= midY ? 'top' : 'bottom';\n };\n\n if (lf(model.x)) {\n xAlign = 'left'; // Is tooltip too wide and goes over the right side of the chart.?\n\n if (olf(model.x)) {\n xAlign = 'center';\n yAlign = yf(model.y);\n }\n } else if (rf(model.x)) {\n xAlign = 'right'; // Is tooltip too wide and goes outside left edge of canvas?\n\n if (orf(model.x)) {\n xAlign = 'center';\n yAlign = yf(model.y);\n }\n }\n\n var opts = tooltip._options;\n return {\n xAlign: opts.xAlign ? opts.xAlign : xAlign,\n yAlign: opts.yAlign ? opts.yAlign : yAlign\n };\n }\n /**\n * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n */\n\n\n function getBackgroundPoint(vm, size, alignment, chart) {\n // Background Position\n var x = vm.x;\n var y = vm.y;\n var caretSize = vm.caretSize;\n var caretPadding = vm.caretPadding;\n var cornerRadius = vm.cornerRadius;\n var xAlign = alignment.xAlign;\n var yAlign = alignment.yAlign;\n var paddingAndSize = caretSize + caretPadding;\n var radiusAndPadding = cornerRadius + caretPadding;\n\n if (xAlign === 'right') {\n x -= size.width;\n } else if (xAlign === 'center') {\n x -= size.width / 2;\n\n if (x + size.width > chart.width) {\n x = chart.width - size.width;\n }\n\n if (x < 0) {\n x = 0;\n }\n }\n\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= size.height + paddingAndSize;\n } else {\n y -= size.height / 2;\n }\n\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= radiusAndPadding;\n } else if (xAlign === 'right') {\n x += radiusAndPadding;\n }\n\n return {\n x: x,\n y: y\n };\n }\n\n function getAlignedX(vm, align) {\n return align === 'center' ? vm.x + vm.width / 2 : align === 'right' ? vm.x + vm.width - vm.xPadding : vm.x + vm.xPadding;\n }\n /**\n * Helper to build before and after body lines\n */\n\n\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n }\n\n var exports$3 = core_element.extend({\n initialize: function initialize() {\n this._model = getBaseModel(this._options);\n this._lastActive = [];\n },\n // Get the title\n // Args are: (tooltipItem, data)\n getTitle: function getTitle() {\n var me = this;\n var opts = me._options;\n var callbacks = opts.callbacks;\n var beforeTitle = callbacks.beforeTitle.apply(me, arguments);\n var title = callbacks.title.apply(me, arguments);\n var afterTitle = callbacks.afterTitle.apply(me, arguments);\n var lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n },\n // Args are: (tooltipItem, data)\n getBeforeBody: function getBeforeBody() {\n return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\n },\n // Args are: (tooltipItem, data)\n getBody: function getBody(tooltipItems, data) {\n var me = this;\n var callbacks = me._options.callbacks;\n var bodyItems = [];\n helpers$1.each(tooltipItems, function (tooltipItem) {\n var bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n pushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\n pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n pushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n },\n // Args are: (tooltipItem, data)\n getAfterBody: function getAfterBody() {\n return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\n },\n // Get the footer and beforeFooter and afterFooter lines\n // Args are: (tooltipItem, data)\n getFooter: function getFooter() {\n var me = this;\n var callbacks = me._options.callbacks;\n var beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n var footer = callbacks.footer.apply(me, arguments);\n var afterFooter = callbacks.afterFooter.apply(me, arguments);\n var lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n },\n update: function update(changed) {\n var me = this;\n var opts = me._options; // Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\n // that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\n // which breaks any animations.\n\n var existingModel = me._model;\n var model = me._model = getBaseModel(opts);\n var active = me._active;\n var data = me._data; // In the case where active.length === 0 we need to keep these at existing values for good animations\n\n var alignment = {\n xAlign: existingModel.xAlign,\n yAlign: existingModel.yAlign\n };\n var backgroundPoint = {\n x: existingModel.x,\n y: existingModel.y\n };\n var tooltipSize = {\n width: existingModel.width,\n height: existingModel.height\n };\n var tooltipPosition = {\n x: existingModel.caretX,\n y: existingModel.caretY\n };\n var i, len;\n\n if (active.length) {\n model.opacity = 1;\n var labelColors = [];\n var labelTextColors = [];\n tooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\n var tooltipItems = [];\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(active[i]));\n } // If the user provided a filter function, use it to modify the tooltip items\n\n\n if (opts.filter) {\n tooltipItems = tooltipItems.filter(function (a) {\n return opts.filter(a, data);\n });\n } // If the user provided a sorting function, use it to modify the tooltip items\n\n\n if (opts.itemSort) {\n tooltipItems = tooltipItems.sort(function (a, b) {\n return opts.itemSort(a, b, data);\n });\n } // Determine colors for boxes\n\n\n helpers$1.each(tooltipItems, function (tooltipItem) {\n labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\n labelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\n }); // Build the Text Lines\n\n model.title = me.getTitle(tooltipItems, data);\n model.beforeBody = me.getBeforeBody(tooltipItems, data);\n model.body = me.getBody(tooltipItems, data);\n model.afterBody = me.getAfterBody(tooltipItems, data);\n model.footer = me.getFooter(tooltipItems, data); // Initial positioning and colors\n\n model.x = tooltipPosition.x;\n model.y = tooltipPosition.y;\n model.caretPadding = opts.caretPadding;\n model.labelColors = labelColors;\n model.labelTextColors = labelTextColors; // data points\n\n model.dataPoints = tooltipItems; // We need to determine alignment of the tooltip\n\n tooltipSize = getTooltipSize(this, model);\n alignment = determineAlignment(this, tooltipSize); // Final Size and Position\n\n backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\n } else {\n model.opacity = 0;\n }\n\n model.xAlign = alignment.xAlign;\n model.yAlign = alignment.yAlign;\n model.x = backgroundPoint.x;\n model.y = backgroundPoint.y;\n model.width = tooltipSize.width;\n model.height = tooltipSize.height; // Point where the caret on the tooltip points to\n\n model.caretX = tooltipPosition.x;\n model.caretY = tooltipPosition.y;\n me._model = model;\n\n if (changed && opts.custom) {\n opts.custom.call(me, model);\n }\n\n return me;\n },\n drawCaret: function drawCaret(tooltipPoint, size) {\n var ctx = this._chart.ctx;\n var vm = this._view;\n var caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n },\n getCaretPosition: function getCaretPosition(tooltipPoint, size, vm) {\n var x1, x2, x3, y1, y2, y3;\n var caretSize = vm.caretSize;\n var cornerRadius = vm.cornerRadius;\n var xAlign = vm.xAlign;\n var yAlign = vm.yAlign;\n var ptX = tooltipPoint.x;\n var ptY = tooltipPoint.y;\n var width = size.width;\n var height = size.height;\n\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n x3 = x1;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n x3 = x1;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n } else {\n if (xAlign === 'left') {\n x2 = ptX + cornerRadius + caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - cornerRadius - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n x2 = vm.caretX;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n y3 = y1;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n y3 = y1; // invert drawing order\n\n var tmp = x3;\n x3 = x1;\n x1 = tmp;\n }\n }\n\n return {\n x1: x1,\n x2: x2,\n x3: x3,\n y1: y1,\n y2: y2,\n y3: y3\n };\n },\n drawTitle: function drawTitle(pt, vm, ctx) {\n var title = vm.title;\n\n if (title.length) {\n pt.x = getAlignedX(vm, vm._titleAlign);\n ctx.textAlign = vm._titleAlign;\n ctx.textBaseline = 'top';\n var titleFontSize = vm.titleFontSize;\n var titleSpacing = vm.titleSpacing;\n ctx.fillStyle = vm.titleFontColor;\n ctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n var i, len;\n\n for (i = 0, len = title.length; i < len; ++i) {\n ctx.fillText(title[i], pt.x, pt.y);\n pt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n if (i + 1 === title.length) {\n pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n }\n }\n }\n },\n drawBody: function drawBody(pt, vm, ctx) {\n var bodyFontSize = vm.bodyFontSize;\n var bodySpacing = vm.bodySpacing;\n var bodyAlign = vm._bodyAlign;\n var body = vm.body;\n var drawColorBoxes = vm.displayColors;\n var labelColors = vm.labelColors;\n var xLinePadding = 0;\n var colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\n var textColor;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'top';\n ctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n pt.x = getAlignedX(vm, bodyAlign); // Before Body\n\n var fillLineOfText = function fillLineOfText(line) {\n ctx.fillText(line, pt.x + xLinePadding, pt.y);\n pt.y += bodyFontSize + bodySpacing;\n }; // Before body lines\n\n\n ctx.fillStyle = vm.bodyFontColor;\n helpers$1.each(vm.beforeBody, fillLineOfText);\n xLinePadding = drawColorBoxes && bodyAlign !== 'right' ? bodyAlign === 'center' ? bodyFontSize / 2 + 1 : bodyFontSize + 2 : 0; // Draw body lines now\n\n helpers$1.each(body, function (bodyItem, i) {\n textColor = vm.labelTextColors[i];\n ctx.fillStyle = textColor;\n helpers$1.each(bodyItem.before, fillLineOfText);\n helpers$1.each(bodyItem.lines, function (line) {\n // Draw Legend-like boxes if needed\n if (drawColorBoxes) {\n // Fill a white rect so that colours merge nicely if the opacity is < 1\n ctx.fillStyle = vm.legendColorBackground;\n ctx.fillRect(colorX, pt.y, bodyFontSize, bodyFontSize); // Border\n\n ctx.lineWidth = 1;\n ctx.strokeStyle = labelColors[i].borderColor;\n ctx.strokeRect(colorX, pt.y, bodyFontSize, bodyFontSize); // Inner square\n\n ctx.fillStyle = labelColors[i].backgroundColor;\n ctx.fillRect(colorX + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n ctx.fillStyle = textColor;\n }\n\n fillLineOfText(line);\n });\n helpers$1.each(bodyItem.after, fillLineOfText);\n }); // Reset back to 0 for after body\n\n xLinePadding = 0; // After body lines\n\n helpers$1.each(vm.afterBody, fillLineOfText);\n pt.y -= bodySpacing; // Remove last body spacing\n },\n drawFooter: function drawFooter(pt, vm, ctx) {\n var footer = vm.footer;\n\n if (footer.length) {\n pt.x = getAlignedX(vm, vm._footerAlign);\n pt.y += vm.footerMarginTop;\n ctx.textAlign = vm._footerAlign;\n ctx.textBaseline = 'top';\n ctx.fillStyle = vm.footerFontColor;\n ctx.font = helpers$1.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n helpers$1.each(footer, function (line) {\n ctx.fillText(line, pt.x, pt.y);\n pt.y += vm.footerFontSize + vm.footerSpacing;\n });\n }\n },\n drawBackground: function drawBackground(pt, vm, ctx, tooltipSize) {\n ctx.fillStyle = vm.backgroundColor;\n ctx.strokeStyle = vm.borderColor;\n ctx.lineWidth = vm.borderWidth;\n var xAlign = vm.xAlign;\n var yAlign = vm.yAlign;\n var x = pt.x;\n var y = pt.y;\n var width = tooltipSize.width;\n var height = tooltipSize.height;\n var radius = vm.cornerRadius;\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n\n if (yAlign === 'top') {\n this.drawCaret(pt, tooltipSize);\n }\n\n ctx.lineTo(x + width - radius, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, tooltipSize);\n }\n\n ctx.lineTo(x + width, y + height - radius);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n\n if (yAlign === 'bottom') {\n this.drawCaret(pt, tooltipSize);\n }\n\n ctx.lineTo(x + radius, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, tooltipSize);\n }\n\n ctx.lineTo(x, y + radius);\n ctx.quadraticCurveTo(x, y, x + radius, y);\n ctx.closePath();\n ctx.fill();\n\n if (vm.borderWidth > 0) {\n ctx.stroke();\n }\n },\n draw: function draw() {\n var ctx = this._chart.ctx;\n var vm = this._view;\n\n if (vm.opacity === 0) {\n return;\n }\n\n var tooltipSize = {\n width: vm.width,\n height: vm.height\n };\n var pt = {\n x: vm.x,\n y: vm.y\n }; // IE11/Edge does not like very small opacities, so snap to 0\n\n var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity; // Truthy/falsey value for empty tooltip\n\n var hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\n\n if (this._options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity; // Draw Background\n\n this.drawBackground(pt, vm, ctx, tooltipSize); // Draw Title, Body, and Footer\n\n pt.y += vm.yPadding; // Titles\n\n this.drawTitle(pt, vm, ctx); // Body\n\n this.drawBody(pt, vm, ctx); // Footer\n\n this.drawFooter(pt, vm, ctx);\n ctx.restore();\n }\n },\n\n /**\n * Handle an event\n * @private\n * @param {IEvent} event - The event to handle\n * @returns {boolean} true if the tooltip changed\n */\n handleEvent: function handleEvent(e) {\n var me = this;\n var options = me._options;\n var changed = false;\n me._lastActive = me._lastActive || []; // Find Active Elements for tooltips\n\n if (e.type === 'mouseout') {\n me._active = [];\n } else {\n me._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\n } // Remember Last Actives\n\n\n changed = !helpers$1.arrayEquals(me._active, me._lastActive); // Only handle target event on tooltip change\n\n if (changed) {\n me._lastActive = me._active;\n\n if (options.enabled || options.custom) {\n me._eventPosition = {\n x: e.x,\n y: e.y\n };\n me.update(true);\n me.pivot();\n }\n }\n\n return changed;\n }\n });\n /**\n * @namespace Chart.Tooltip.positioners\n */\n\n var positioners_1 = positioners;\n var core_tooltip = exports$3;\n core_tooltip.positioners = positioners_1;\n var valueOrDefault$8 = helpers$1.valueOrDefault;\n\n core_defaults._set('global', {\n elements: {},\n events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],\n hover: {\n onHover: null,\n mode: 'nearest',\n intersect: true,\n animationDuration: 400\n },\n onClick: null,\n maintainAspectRatio: true,\n responsive: true,\n responsiveAnimationDuration: 0\n });\n /**\n * Recursively merge the given config objects representing the `scales` option\n * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\n * returns a deep copy of the result, thus doesn't alter inputs.\n */\n\n\n function mergeScaleConfig()\n /* config objects ... */\n {\n return helpers$1.merge({}, [].slice.call(arguments), {\n merger: function merger(key, target, source, options) {\n if (key === 'xAxes' || key === 'yAxes') {\n var slen = source[key].length;\n var i, type, scale;\n\n if (!target[key]) {\n target[key] = [];\n }\n\n for (i = 0; i < slen; ++i) {\n scale = source[key][i];\n type = valueOrDefault$8(scale.type, key === 'xAxes' ? 'category' : 'linear');\n\n if (i >= target[key].length) {\n target[key].push({});\n }\n\n if (!target[key][i].type || scale.type && scale.type !== target[key][i].type) {\n // new/untyped scale or type changed: let's apply the new defaults\n // then merge source scale to correctly overwrite the defaults.\n helpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\n } else {\n // scales type are the same\n helpers$1.merge(target[key][i], scale);\n }\n }\n } else {\n helpers$1._merger(key, target, source, options);\n }\n }\n });\n }\n /**\n * Recursively merge the given config objects as the root options by handling\n * default scale options for the `scales` and `scale` properties, then returns\n * a deep copy of the result, thus doesn't alter inputs.\n */\n\n\n function mergeConfig()\n /* config objects ... */\n {\n return helpers$1.merge({}, [].slice.call(arguments), {\n merger: function merger(key, target, source, options) {\n var tval = target[key] || {};\n var sval = source[key];\n\n if (key === 'scales') {\n // scale config merging is complex. Add our own function here for that\n target[key] = mergeScaleConfig(tval, sval);\n } else if (key === 'scale') {\n // used in polar area & radar charts since there is only one scale\n target[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\n } else {\n helpers$1._merger(key, target, source, options);\n }\n }\n });\n }\n\n function initConfig(config) {\n config = config || {}; // Do NOT use mergeConfig for the data object because this method merges arrays\n // and so would change references to labels and datasets, preventing data updates.\n\n var data = config.data = config.data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n config.options = mergeConfig(core_defaults.global, core_defaults[config.type], config.options || {});\n return config;\n }\n\n function updateConfig(chart) {\n var newOptions = chart.options;\n helpers$1.each(chart.scales, function (scale) {\n core_layouts.removeBox(chart, scale);\n });\n newOptions = mergeConfig(core_defaults.global, core_defaults[chart.config.type], newOptions);\n chart.options = chart.config.options = newOptions;\n chart.ensureScalesHaveIDs();\n chart.buildOrUpdateScales(); // Tooltip\n\n chart.tooltip._options = newOptions.tooltips;\n chart.tooltip.initialize();\n }\n\n function positionIsHorizontal(position) {\n return position === 'top' || position === 'bottom';\n }\n\n var Chart = function Chart(item, config) {\n this.construct(item, config);\n return this;\n };\n\n helpers$1.extend(Chart.prototype,\n /** @lends Chart */\n {\n /**\n * @private\n */\n construct: function construct(item, config) {\n var me = this;\n config = initConfig(config);\n var context = platform.acquireContext(item, config);\n var canvas = context && context.canvas;\n var height = canvas && canvas.height;\n var width = canvas && canvas.width;\n me.id = helpers$1.uid();\n me.ctx = context;\n me.canvas = canvas;\n me.config = config;\n me.width = width;\n me.height = height;\n me.aspectRatio = height ? width / height : null;\n me.options = config.options;\n me._bufferedRender = false;\n /**\n * Provided for backward compatibility, Chart and Chart.Controller have been merged,\n * the \"instance\" still need to be defined since it might be called from plugins.\n * @prop Chart#chart\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\n\n me.chart = me;\n me.controller = me; // chart.chart.controller #inception\n // Add the chart instance to the global namespace\n\n Chart.instances[me.id] = me; // Define alias to the config data: `chart.data === chart.config.data`\n\n Object.defineProperty(me, 'data', {\n get: function get() {\n return me.config.data;\n },\n set: function set(value) {\n me.config.data = value;\n }\n });\n\n if (!context || !canvas) {\n // The given item is not a compatible context2d element, let's return before finalizing\n // the chart initialization but after setting basic chart / controller properties that\n // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n // https://github.com/chartjs/Chart.js/issues/2807\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n me.initialize();\n me.update();\n },\n\n /**\n * @private\n */\n initialize: function initialize() {\n var me = this; // Before init plugin notification\n\n core_plugins.notify(me, 'beforeInit');\n helpers$1.retinaScale(me, me.options.devicePixelRatio);\n me.bindEvents();\n\n if (me.options.responsive) {\n // Initial resize before chart draws (must be silent to preserve initial animations).\n me.resize(true);\n } // Make sure scales have IDs and are built before we build any controllers.\n\n\n me.ensureScalesHaveIDs();\n me.buildOrUpdateScales();\n me.initToolTip(); // After init plugin notification\n\n core_plugins.notify(me, 'afterInit');\n return me;\n },\n clear: function clear() {\n helpers$1.canvas.clear(this);\n return this;\n },\n stop: function stop() {\n // Stops any current animation loop occurring\n core_animations.cancelAnimation(this);\n return this;\n },\n resize: function resize(silent) {\n var me = this;\n var options = me.options;\n var canvas = me.canvas;\n var aspectRatio = options.maintainAspectRatio && me.aspectRatio || null; // the canvas render width and height will be casted to integers so make sure that\n // the canvas display style uses the same integer values to avoid blurring effect.\n // Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\n\n var newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\n var newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\n\n if (me.width === newWidth && me.height === newHeight) {\n return;\n }\n\n canvas.width = me.width = newWidth;\n canvas.height = me.height = newHeight;\n canvas.style.width = newWidth + 'px';\n canvas.style.height = newHeight + 'px';\n helpers$1.retinaScale(me, options.devicePixelRatio);\n\n if (!silent) {\n // Notify any plugins about the resize\n var newSize = {\n width: newWidth,\n height: newHeight\n };\n core_plugins.notify(me, 'resize', [newSize]); // Notify of resize\n\n if (options.onResize) {\n options.onResize(me, newSize);\n }\n\n me.stop();\n me.update({\n duration: options.responsiveAnimationDuration\n });\n }\n },\n ensureScalesHaveIDs: function ensureScalesHaveIDs() {\n var options = this.options;\n var scalesOptions = options.scales || {};\n var scaleOptions = options.scale;\n helpers$1.each(scalesOptions.xAxes, function (xAxisOptions, index) {\n xAxisOptions.id = xAxisOptions.id || 'x-axis-' + index;\n });\n helpers$1.each(scalesOptions.yAxes, function (yAxisOptions, index) {\n yAxisOptions.id = yAxisOptions.id || 'y-axis-' + index;\n });\n\n if (scaleOptions) {\n scaleOptions.id = scaleOptions.id || 'scale';\n }\n },\n\n /**\n * Builds a map of scale ID to scale object for future lookup.\n */\n buildOrUpdateScales: function buildOrUpdateScales() {\n var me = this;\n var options = me.options;\n var scales = me.scales || {};\n var items = [];\n var updated = Object.keys(scales).reduce(function (obj, id) {\n obj[id] = false;\n return obj;\n }, {});\n\n if (options.scales) {\n items = items.concat((options.scales.xAxes || []).map(function (xAxisOptions) {\n return {\n options: xAxisOptions,\n dtype: 'category',\n dposition: 'bottom'\n };\n }), (options.scales.yAxes || []).map(function (yAxisOptions) {\n return {\n options: yAxisOptions,\n dtype: 'linear',\n dposition: 'left'\n };\n }));\n }\n\n if (options.scale) {\n items.push({\n options: options.scale,\n dtype: 'radialLinear',\n isDefault: true,\n dposition: 'chartArea'\n });\n }\n\n helpers$1.each(items, function (item) {\n var scaleOptions = item.options;\n var id = scaleOptions.id;\n var scaleType = valueOrDefault$8(scaleOptions.type, item.dtype);\n\n if (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n var scale = null;\n\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n scale.options = scaleOptions;\n scale.ctx = me.ctx;\n scale.chart = me;\n } else {\n var scaleClass = core_scaleService.getScaleConstructor(scaleType);\n\n if (!scaleClass) {\n return;\n }\n\n scale = new scaleClass({\n id: id,\n type: scaleType,\n options: scaleOptions,\n ctx: me.ctx,\n chart: me\n });\n scales[scale.id] = scale;\n }\n\n scale.mergeTicksOptions(); // TODO(SB): I think we should be able to remove this custom case (options.scale)\n // and consider it as a regular scale part of the \"scales\"\" map only! This would\n // make the logic easier and remove some useless? custom code.\n\n if (item.isDefault) {\n me.scale = scale;\n }\n }); // clear up discarded scales\n\n helpers$1.each(updated, function (hasUpdated, id) {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n me.scales = scales;\n core_scaleService.addScalesToLayout(this);\n },\n buildOrUpdateControllers: function buildOrUpdateControllers() {\n var me = this;\n var newControllers = [];\n helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {\n var meta = me.getDatasetMeta(datasetIndex);\n var type = dataset.type || me.config.type;\n\n if (meta.type && meta.type !== type) {\n me.destroyDatasetMeta(datasetIndex);\n meta = me.getDatasetMeta(datasetIndex);\n }\n\n meta.type = type;\n\n if (meta.controller) {\n meta.controller.updateIndex(datasetIndex);\n meta.controller.linkScales();\n } else {\n var ControllerClass = controllers[meta.type];\n\n if (ControllerClass === undefined) {\n throw new Error('\"' + meta.type + '\" is not a chart type.');\n }\n\n meta.controller = new ControllerClass(me, datasetIndex);\n newControllers.push(meta.controller);\n }\n }, me);\n return newControllers;\n },\n\n /**\n * Reset the elements of all datasets\n * @private\n */\n resetElements: function resetElements() {\n var me = this;\n helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {\n me.getDatasetMeta(datasetIndex).controller.reset();\n }, me);\n },\n\n /**\n * Resets the chart back to it's state before the initial animation\n */\n reset: function reset() {\n this.resetElements();\n this.tooltip.initialize();\n },\n update: function update(config) {\n var me = this;\n\n if (!config || typeof config !== 'object') {\n // backwards compatibility\n config = {\n duration: config,\n lazy: arguments[1]\n };\n }\n\n updateConfig(me); // plugins options references might have change, let's invalidate the cache\n // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n\n core_plugins._invalidate(me);\n\n if (core_plugins.notify(me, 'beforeUpdate') === false) {\n return;\n } // In case the entire data object changed\n\n\n me.tooltip._data = me.data; // Make sure dataset controllers are updated and new controllers are reset\n\n var newControllers = me.buildOrUpdateControllers(); // Make sure all dataset controllers have correct meta data counts\n\n helpers$1.each(me.data.datasets, function (dataset, datasetIndex) {\n me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();\n }, me);\n me.updateLayout(); // Can only reset the new controllers after the scales have been updated\n\n if (me.options.animation && me.options.animation.duration) {\n helpers$1.each(newControllers, function (controller) {\n controller.reset();\n });\n }\n\n me.updateDatasets(); // Need to reset tooltip in case it is displayed with elements that are removed\n // after update.\n\n me.tooltip.initialize(); // Last active contains items that were previously in the tooltip.\n // When we reset the tooltip, we need to clear it\n\n me.lastActive = []; // Do this before render so that any plugins that need final scale updates can use it\n\n core_plugins.notify(me, 'afterUpdate');\n\n if (me._bufferedRender) {\n me._bufferedRequest = {\n duration: config.duration,\n easing: config.easing,\n lazy: config.lazy\n };\n } else {\n me.render(config);\n }\n },\n\n /**\n * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n * hook, in which case, plugins will not be called on `afterLayout`.\n * @private\n */\n updateLayout: function updateLayout() {\n var me = this;\n\n if (core_plugins.notify(me, 'beforeLayout') === false) {\n return;\n }\n\n core_layouts.update(this, this.width, this.height);\n /**\n * Provided for backward compatibility, use `afterLayout` instead.\n * @method IPlugin#afterScaleUpdate\n * @deprecated since version 2.5.0\n * @todo remove at version 3\n * @private\n */\n\n core_plugins.notify(me, 'afterScaleUpdate');\n core_plugins.notify(me, 'afterLayout');\n },\n\n /**\n * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n * @private\n */\n updateDatasets: function updateDatasets() {\n var me = this;\n\n if (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\n return;\n }\n\n for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n me.updateDataset(i);\n }\n\n core_plugins.notify(me, 'afterDatasetsUpdate');\n },\n\n /**\n * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n * @private\n */\n updateDataset: function updateDataset(index) {\n var me = this;\n var meta = me.getDatasetMeta(index);\n var args = {\n meta: meta,\n index: index\n };\n\n if (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\n return;\n }\n\n meta.controller.update();\n core_plugins.notify(me, 'afterDatasetUpdate', [args]);\n },\n render: function render(config) {\n var me = this;\n\n if (!config || typeof config !== 'object') {\n // backwards compatibility\n config = {\n duration: config,\n lazy: arguments[1]\n };\n }\n\n var animationOptions = me.options.animation;\n var duration = valueOrDefault$8(config.duration, animationOptions && animationOptions.duration);\n var lazy = config.lazy;\n\n if (core_plugins.notify(me, 'beforeRender') === false) {\n return;\n }\n\n var onComplete = function onComplete(animation) {\n core_plugins.notify(me, 'afterRender');\n helpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\n };\n\n if (animationOptions && duration) {\n var animation = new core_animation({\n numSteps: duration / 16.66,\n // 60 fps\n easing: config.easing || animationOptions.easing,\n render: function render(chart, animationObject) {\n var easingFunction = helpers$1.easing.effects[animationObject.easing];\n var currentStep = animationObject.currentStep;\n var stepDecimal = currentStep / animationObject.numSteps;\n chart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\n },\n onAnimationProgress: animationOptions.onProgress,\n onAnimationComplete: onComplete\n });\n core_animations.addAnimation(me, animation, duration, lazy);\n } else {\n me.draw(); // See https://github.com/chartjs/Chart.js/issues/3781\n\n onComplete(new core_animation({\n numSteps: 0,\n chart: me\n }));\n }\n\n return me;\n },\n draw: function draw(easingValue) {\n var me = this;\n me.clear();\n\n if (helpers$1.isNullOrUndef(easingValue)) {\n easingValue = 1;\n }\n\n me.transition(easingValue);\n\n if (me.width <= 0 || me.height <= 0) {\n return;\n }\n\n if (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\n return;\n } // Draw all the scales\n\n\n helpers$1.each(me.boxes, function (box) {\n box.draw(me.chartArea);\n }, me);\n me.drawDatasets(easingValue);\n\n me._drawTooltip(easingValue);\n\n core_plugins.notify(me, 'afterDraw', [easingValue]);\n },\n\n /**\n * @private\n */\n transition: function transition(easingValue) {\n var me = this;\n\n for (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\n if (me.isDatasetVisible(i)) {\n me.getDatasetMeta(i).controller.transition(easingValue);\n }\n }\n\n me.tooltip.transition(easingValue);\n },\n\n /**\n * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n * @private\n */\n drawDatasets: function drawDatasets(easingValue) {\n var me = this;\n\n if (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\n return;\n } // Draw datasets reversed to support proper line stacking\n\n\n for (var i = (me.data.datasets || []).length - 1; i >= 0; --i) {\n if (me.isDatasetVisible(i)) {\n me.drawDataset(i, easingValue);\n }\n }\n\n core_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\n },\n\n /**\n * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n * @private\n */\n drawDataset: function drawDataset(index, easingValue) {\n var me = this;\n var meta = me.getDatasetMeta(index);\n var args = {\n meta: meta,\n index: index,\n easingValue: easingValue\n };\n\n if (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\n return;\n }\n\n meta.controller.draw(easingValue);\n core_plugins.notify(me, 'afterDatasetDraw', [args]);\n },\n\n /**\n * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\n * hook, in which case, plugins will not be called on `afterTooltipDraw`.\n * @private\n */\n _drawTooltip: function _drawTooltip(easingValue) {\n var me = this;\n var tooltip = me.tooltip;\n var args = {\n tooltip: tooltip,\n easingValue: easingValue\n };\n\n if (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\n return;\n }\n\n tooltip.draw();\n core_plugins.notify(me, 'afterTooltipDraw', [args]);\n },\n\n /**\n * Get the single element that was clicked on\n * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\n */\n getElementAtEvent: function getElementAtEvent(e) {\n return core_interaction.modes.single(this, e);\n },\n getElementsAtEvent: function getElementsAtEvent(e) {\n return core_interaction.modes.label(this, e, {\n intersect: true\n });\n },\n getElementsAtXAxis: function getElementsAtXAxis(e) {\n return core_interaction.modes['x-axis'](this, e, {\n intersect: true\n });\n },\n getElementsAtEventForMode: function getElementsAtEventForMode(e, mode, options) {\n var method = core_interaction.modes[mode];\n\n if (typeof method === 'function') {\n return method(this, e, options);\n }\n\n return [];\n },\n getDatasetAtEvent: function getDatasetAtEvent(e) {\n return core_interaction.modes.dataset(this, e, {\n intersect: true\n });\n },\n getDatasetMeta: function getDatasetMeta(datasetIndex) {\n var me = this;\n var dataset = me.data.datasets[datasetIndex];\n\n if (!dataset._meta) {\n dataset._meta = {};\n }\n\n var meta = dataset._meta[me.id];\n\n if (!meta) {\n meta = dataset._meta[me.id] = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n // See isDatasetVisible() comment\n xAxisID: null,\n yAxisID: null\n };\n }\n\n return meta;\n },\n getVisibleDatasetCount: function getVisibleDatasetCount() {\n var count = 0;\n\n for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n if (this.isDatasetVisible(i)) {\n count++;\n }\n }\n\n return count;\n },\n isDatasetVisible: function isDatasetVisible(datasetIndex) {\n var meta = this.getDatasetMeta(datasetIndex); // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n },\n generateLegend: function generateLegend() {\n return this.options.legendCallback(this);\n },\n\n /**\n * @private\n */\n destroyDatasetMeta: function destroyDatasetMeta(datasetIndex) {\n var id = this.id;\n var dataset = this.data.datasets[datasetIndex];\n var meta = dataset._meta && dataset._meta[id];\n\n if (meta) {\n meta.controller.destroy();\n delete dataset._meta[id];\n }\n },\n destroy: function destroy() {\n var me = this;\n var canvas = me.canvas;\n var i, ilen;\n me.stop(); // dataset controllers need to cleanup associated data\n\n for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n me.destroyDatasetMeta(i);\n }\n\n if (canvas) {\n me.unbindEvents();\n helpers$1.canvas.clear(me);\n platform.releaseContext(me.ctx);\n me.canvas = null;\n me.ctx = null;\n }\n\n core_plugins.notify(me, 'destroy');\n delete Chart.instances[me.id];\n },\n toBase64Image: function toBase64Image() {\n return this.canvas.toDataURL.apply(this.canvas, arguments);\n },\n initToolTip: function initToolTip() {\n var me = this;\n me.tooltip = new core_tooltip({\n _chart: me,\n _chartInstance: me,\n // deprecated, backward compatibility\n _data: me.data,\n _options: me.options.tooltips\n }, me);\n },\n\n /**\n * @private\n */\n bindEvents: function bindEvents() {\n var me = this;\n var listeners = me._listeners = {};\n\n var listener = function listener() {\n me.eventHandler.apply(me, arguments);\n };\n\n helpers$1.each(me.options.events, function (type) {\n platform.addEventListener(me, type, listener);\n listeners[type] = listener;\n }); // Elements used to detect size change should not be injected for non responsive charts.\n // See https://github.com/chartjs/Chart.js/issues/2210\n\n if (me.options.responsive) {\n listener = function listener() {\n me.resize();\n };\n\n platform.addEventListener(me, 'resize', listener);\n listeners.resize = listener;\n }\n },\n\n /**\n * @private\n */\n unbindEvents: function unbindEvents() {\n var me = this;\n var listeners = me._listeners;\n\n if (!listeners) {\n return;\n }\n\n delete me._listeners;\n helpers$1.each(listeners, function (listener, type) {\n platform.removeEventListener(me, type, listener);\n });\n },\n updateHoverStyle: function updateHoverStyle(elements, mode, enabled) {\n var method = enabled ? 'setHoverStyle' : 'removeHoverStyle';\n var element, i, ilen;\n\n for (i = 0, ilen = elements.length; i < ilen; ++i) {\n element = elements[i];\n\n if (element) {\n this.getDatasetMeta(element._datasetIndex).controller[method](element);\n }\n }\n },\n\n /**\n * @private\n */\n eventHandler: function eventHandler(e) {\n var me = this;\n var tooltip = me.tooltip;\n\n if (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\n return;\n } // Buffer any update calls so that renders do not occur\n\n\n me._bufferedRender = true;\n me._bufferedRequest = null;\n var changed = me.handleEvent(e); // for smooth tooltip animations issue #4989\n // the tooltip should be the source of change\n // Animation check workaround:\n // tooltip._start will be null when tooltip isn't animating\n\n if (tooltip) {\n changed = tooltip._start ? tooltip.handleEvent(e) : changed | tooltip.handleEvent(e);\n }\n\n core_plugins.notify(me, 'afterEvent', [e]);\n var bufferedRequest = me._bufferedRequest;\n\n if (bufferedRequest) {\n // If we have an update that was triggered, we need to do a normal render\n me.render(bufferedRequest);\n } else if (changed && !me.animating) {\n // If entering, leaving, or changing elements, animate the change via pivot\n me.stop(); // We only need to render at this point. Updating will cause scales to be\n // recomputed generating flicker & using more memory than necessary.\n\n me.render({\n duration: me.options.hover.animationDuration,\n lazy: true\n });\n }\n\n me._bufferedRender = false;\n me._bufferedRequest = null;\n return me;\n },\n\n /**\n * Handle an event\n * @private\n * @param {IEvent} event the event to handle\n * @return {boolean} true if the chart needs to re-render\n */\n handleEvent: function handleEvent(e) {\n var me = this;\n var options = me.options || {};\n var hoverOptions = options.hover;\n var changed = false;\n me.lastActive = me.lastActive || []; // Find Active Elements for hover and tooltips\n\n if (e.type === 'mouseout') {\n me.active = [];\n } else {\n me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\n } // Invoke onHover hook\n // Need to call with native event here to not break backwards compatibility\n\n\n helpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\n\n if (e.type === 'mouseup' || e.type === 'click') {\n if (options.onClick) {\n // Use e.native here for backwards compatibility\n options.onClick.call(me, e.native, me.active);\n }\n } // Remove styling for last active (even if it may still be active)\n\n\n if (me.lastActive.length) {\n me.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n } // Built in hover styling\n\n\n if (me.active.length && hoverOptions.mode) {\n me.updateHoverStyle(me.active, hoverOptions.mode, true);\n }\n\n changed = !helpers$1.arrayEquals(me.active, me.lastActive); // Remember Last Actives\n\n me.lastActive = me.active;\n return changed;\n }\n });\n /**\n * NOTE(SB) We actually don't use this container anymore but we need to keep it\n * for backward compatibility. Though, it can still be useful for plugins that\n * would need to work on multiple charts?!\n */\n\n Chart.instances = {};\n var core_controller = Chart; // DEPRECATIONS\n\n /**\n * Provided for backward compatibility, use Chart instead.\n * @class Chart.Controller\n * @deprecated since version 2.6\n * @todo remove at version 3\n * @private\n */\n\n Chart.Controller = Chart;\n /**\n * Provided for backward compatibility, not available anymore.\n * @namespace Chart\n * @deprecated since version 2.8\n * @todo remove at version 3\n * @private\n */\n\n Chart.types = {};\n /**\n * Provided for backward compatibility, not available anymore.\n * @namespace Chart.helpers.configMerge\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\n\n helpers$1.configMerge = mergeConfig;\n /**\n * Provided for backward compatibility, not available anymore.\n * @namespace Chart.helpers.scaleMerge\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\n\n helpers$1.scaleMerge = mergeScaleConfig;\n\n var core_helpers = function core_helpers() {\n // -- Basic js utility methods\n helpers$1.where = function (collection, filterCallback) {\n if (helpers$1.isArray(collection) && Array.prototype.filter) {\n return collection.filter(filterCallback);\n }\n\n var filtered = [];\n helpers$1.each(collection, function (item) {\n if (filterCallback(item)) {\n filtered.push(item);\n }\n });\n return filtered;\n };\n\n helpers$1.findIndex = Array.prototype.findIndex ? function (array, callback, scope) {\n return array.findIndex(callback, scope);\n } : function (array, callback, scope) {\n scope = scope === undefined ? array : scope;\n\n for (var i = 0, ilen = array.length; i < ilen; ++i) {\n if (callback.call(scope, array[i], i, array)) {\n return i;\n }\n }\n\n return -1;\n };\n\n helpers$1.findNextWhere = function (arrayToSearch, filterCallback, startIndex) {\n // Default to start of the array\n if (helpers$1.isNullOrUndef(startIndex)) {\n startIndex = -1;\n }\n\n for (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n var currentItem = arrayToSearch[i];\n\n if (filterCallback(currentItem)) {\n return currentItem;\n }\n }\n };\n\n helpers$1.findPreviousWhere = function (arrayToSearch, filterCallback, startIndex) {\n // Default to end of the array\n if (helpers$1.isNullOrUndef(startIndex)) {\n startIndex = arrayToSearch.length;\n }\n\n for (var i = startIndex - 1; i >= 0; i--) {\n var currentItem = arrayToSearch[i];\n\n if (filterCallback(currentItem)) {\n return currentItem;\n }\n }\n }; // -- Math methods\n\n\n helpers$1.isNumber = function (n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n };\n\n helpers$1.almostEquals = function (x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n };\n\n helpers$1.almostWhole = function (x, epsilon) {\n var rounded = Math.round(x);\n return rounded - epsilon < x && rounded + epsilon > x;\n };\n\n helpers$1.max = function (array) {\n return array.reduce(function (max, value) {\n if (!isNaN(value)) {\n return Math.max(max, value);\n }\n\n return max;\n }, Number.NEGATIVE_INFINITY);\n };\n\n helpers$1.min = function (array) {\n return array.reduce(function (min, value) {\n if (!isNaN(value)) {\n return Math.min(min, value);\n }\n\n return min;\n }, Number.POSITIVE_INFINITY);\n };\n\n helpers$1.sign = Math.sign ? function (x) {\n return Math.sign(x);\n } : function (x) {\n x = +x; // convert to a number\n\n if (x === 0 || isNaN(x)) {\n return x;\n }\n\n return x > 0 ? 1 : -1;\n };\n helpers$1.log10 = Math.log10 ? function (x) {\n return Math.log10(x);\n } : function (x) {\n var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\n // Check for whole powers of 10,\n // which due to floating point rounding error should be corrected.\n\n var powerOf10 = Math.round(exponent);\n var isPowerOf10 = x === Math.pow(10, powerOf10);\n return isPowerOf10 ? powerOf10 : exponent;\n };\n\n helpers$1.toRadians = function (degrees) {\n return degrees * (Math.PI / 180);\n };\n\n helpers$1.toDegrees = function (radians) {\n return radians * (180 / Math.PI);\n };\n /**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param {number} x - A number.\n * @returns {number} The number of decimal places.\n * @private\n */\n\n\n helpers$1._decimalPlaces = function (x) {\n if (!helpers$1.isFinite(x)) {\n return;\n }\n\n var e = 1;\n var p = 0;\n\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n\n return p;\n }; // Gets the angle from vertical upright to the point about a centre.\n\n\n helpers$1.getAngleFromPoint = function (centrePoint, anglePoint) {\n var distanceFromXCenter = anglePoint.x - centrePoint.x;\n var distanceFromYCenter = anglePoint.y - centrePoint.y;\n var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < -0.5 * Math.PI) {\n angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n\n return {\n angle: angle,\n distance: radialDistanceFromCenter\n };\n };\n\n helpers$1.distanceBetweenPoints = function (pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n };\n /**\n * Provided for backward compatibility, not available anymore\n * @function Chart.helpers.aliasPixel\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n */\n\n\n helpers$1.aliasPixel = function (pixelWidth) {\n return pixelWidth % 2 === 0 ? 0 : 0.5;\n };\n /**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param {Chart} chart - The chart instance.\n * @param {number} pixel - A pixel value.\n * @param {number} width - The width of the element.\n * @returns {number} The aligned pixel value.\n * @private\n */\n\n\n helpers$1._alignPixel = function (chart, pixel, width) {\n var devicePixelRatio = chart.currentDevicePixelRatio;\n var halfWidth = width / 2;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n };\n\n helpers$1.splineCurve = function (firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n var previous = firstPoint.skip ? middlePoint : firstPoint;\n var current = middlePoint;\n var next = afterPoint.skip ? middlePoint : afterPoint;\n var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n var s01 = d01 / (d01 + d12);\n var s12 = d12 / (d01 + d12); // If all points are the same, s01 & s02 will be inf\n\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n var fa = t * s01; // scaling factor for triangle Ta\n\n var fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n };\n\n helpers$1.EPSILON = Number.EPSILON || 1e-14;\n\n helpers$1.splineCurveMonotone = function (points) {\n // This function calculates Bézier control points in a similar way than |splineCurve|,\n // but preserves monotonicity of the provided data and ensures no local extremums are added\n // between the dataset discrete points due to the interpolation.\n // See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n var pointsWithTangents = (points || []).map(function (point) {\n return {\n model: point._model,\n deltaK: 0,\n mK: 0\n };\n }); // Calculate slopes (deltaK) and initialize tangents (mK)\n\n var pointsLen = pointsWithTangents.length;\n var i, pointBefore, pointCurrent, pointAfter;\n\n for (i = 0; i < pointsLen; ++i) {\n pointCurrent = pointsWithTangents[i];\n\n if (pointCurrent.model.skip) {\n continue;\n }\n\n pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\n if (pointAfter && !pointAfter.model.skip) {\n var slopeDeltaX = pointAfter.model.x - pointCurrent.model.x; // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n\n pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\n }\n\n if (!pointBefore || pointBefore.model.skip) {\n pointCurrent.mK = pointCurrent.deltaK;\n } else if (!pointAfter || pointAfter.model.skip) {\n pointCurrent.mK = pointBefore.deltaK;\n } else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n pointCurrent.mK = 0;\n } else {\n pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n }\n } // Adjust tangents to ensure monotonic properties\n\n\n var alphaK, betaK, tauK, squaredMagnitude;\n\n for (i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointsWithTangents[i];\n pointAfter = pointsWithTangents[i + 1];\n\n if (pointCurrent.model.skip || pointAfter.model.skip) {\n continue;\n }\n\n if (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n pointCurrent.mK = pointAfter.mK = 0;\n continue;\n }\n\n alphaK = pointCurrent.mK / pointCurrent.deltaK;\n betaK = pointAfter.mK / pointCurrent.deltaK;\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n pointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n } // Compute control points\n\n\n var deltaX;\n\n for (i = 0; i < pointsLen; ++i) {\n pointCurrent = pointsWithTangents[i];\n\n if (pointCurrent.model.skip) {\n continue;\n }\n\n pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n\n if (pointBefore && !pointBefore.model.skip) {\n deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n }\n\n if (pointAfter && !pointAfter.model.skip) {\n deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n }\n }\n };\n\n helpers$1.nextItem = function (collection, index, loop) {\n if (loop) {\n return index >= collection.length - 1 ? collection[0] : collection[index + 1];\n }\n\n return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n };\n\n helpers$1.previousItem = function (collection, index, loop) {\n if (loop) {\n return index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n }\n\n return index <= 0 ? collection[0] : collection[index - 1];\n }; // Implementation of the nice number algorithm used in determining where axis labels will go\n\n\n helpers$1.niceNum = function (range, round) {\n var exponent = Math.floor(helpers$1.log10(range));\n var fraction = range / Math.pow(10, exponent);\n var niceFraction;\n\n if (round) {\n if (fraction < 1.5) {\n niceFraction = 1;\n } else if (fraction < 3) {\n niceFraction = 2;\n } else if (fraction < 7) {\n niceFraction = 5;\n } else {\n niceFraction = 10;\n }\n } else if (fraction <= 1.0) {\n niceFraction = 1;\n } else if (fraction <= 2) {\n niceFraction = 2;\n } else if (fraction <= 5) {\n niceFraction = 5;\n } else {\n niceFraction = 10;\n }\n\n return niceFraction * Math.pow(10, exponent);\n }; // Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n\n\n helpers$1.requestAnimFrame = function () {\n if (typeof window === 'undefined') {\n return function (callback) {\n callback();\n };\n }\n\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n return window.setTimeout(callback, 1000 / 60);\n };\n }(); // -- DOM methods\n\n\n helpers$1.getRelativePosition = function (evt, chart) {\n var mouseX, mouseY;\n var e = evt.originalEvent || evt;\n var canvas = evt.target || evt.srcElement;\n var boundingRect = canvas.getBoundingClientRect();\n var touches = e.touches;\n\n if (touches && touches.length > 0) {\n mouseX = touches[0].clientX;\n mouseY = touches[0].clientY;\n } else {\n mouseX = e.clientX;\n mouseY = e.clientY;\n } // Scale mouse coordinates into canvas coordinates\n // by following the pattern laid out by 'jerryj' in the comments of\n // https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n\n\n var paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\n var paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\n var paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\n var paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\n var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom; // We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n // the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n\n mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / width * canvas.width / chart.currentDevicePixelRatio);\n mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / height * canvas.height / chart.currentDevicePixelRatio);\n return {\n x: mouseX,\n y: mouseY\n };\n }; // Private helper function to convert max-width/max-height values that may be percentages into a number\n\n\n function parseMaxStyle(styleValue, node, parentProperty) {\n var valueInPixels;\n\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n }\n /**\n * Returns if the given value contains an effective constraint.\n * @private\n */\n\n\n function isConstrainedValue(value) {\n return value !== undefined && value !== null && value !== 'none';\n }\n /**\n * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\n * @param {HTMLElement} domNode - the node to check the constraint on\n * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\n * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\n * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\n */\n\n\n function getConstraintDimension(domNode, maxStyle, percentageProperty) {\n var view = document.defaultView;\n\n var parentNode = helpers$1._getParentNode(domNode);\n\n var constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n var hasCNode = isConstrainedValue(constrainedNode);\n var hasCContainer = isConstrainedValue(constrainedContainer);\n var infinity = Number.POSITIVE_INFINITY;\n\n if (hasCNode || hasCContainer) {\n return Math.min(hasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity, hasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n }\n\n return 'none';\n } // returns Number or undefined if no constraint\n\n\n helpers$1.getConstraintWidth = function (domNode) {\n return getConstraintDimension(domNode, 'max-width', 'clientWidth');\n }; // returns Number or undefined if no constraint\n\n\n helpers$1.getConstraintHeight = function (domNode) {\n return getConstraintDimension(domNode, 'max-height', 'clientHeight');\n };\n /**\n * @private\n \t */\n\n\n helpers$1._calculatePadding = function (container, padding, parentDimension) {\n padding = helpers$1.getStyle(container, padding);\n return padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\n };\n /**\n * @private\n */\n\n\n helpers$1._getParentNode = function (domNode) {\n var parent = domNode.parentNode;\n\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n\n return parent;\n };\n\n helpers$1.getMaximumWidth = function (domNode) {\n var container = helpers$1._getParentNode(domNode);\n\n if (!container) {\n return domNode.clientWidth;\n }\n\n var clientWidth = container.clientWidth;\n\n var paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\n\n var paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\n\n var w = clientWidth - paddingLeft - paddingRight;\n var cw = helpers$1.getConstraintWidth(domNode);\n return isNaN(cw) ? w : Math.min(w, cw);\n };\n\n helpers$1.getMaximumHeight = function (domNode) {\n var container = helpers$1._getParentNode(domNode);\n\n if (!container) {\n return domNode.clientHeight;\n }\n\n var clientHeight = container.clientHeight;\n\n var paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\n\n var paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\n\n var h = clientHeight - paddingTop - paddingBottom;\n var ch = helpers$1.getConstraintHeight(domNode);\n return isNaN(ch) ? h : Math.min(h, ch);\n };\n\n helpers$1.getStyle = function (el, property) {\n return el.currentStyle ? el.currentStyle[property] : document.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n };\n\n helpers$1.retinaScale = function (chart, forceRatio) {\n var pixelRatio = chart.currentDevicePixelRatio = forceRatio || typeof window !== 'undefined' && window.devicePixelRatio || 1;\n\n if (pixelRatio === 1) {\n return;\n }\n\n var canvas = chart.canvas;\n var height = chart.height;\n var width = chart.width;\n canvas.height = height * pixelRatio;\n canvas.width = width * pixelRatio;\n chart.ctx.scale(pixelRatio, pixelRatio); // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n\n if (!canvas.style.height && !canvas.style.width) {\n canvas.style.height = height + 'px';\n canvas.style.width = width + 'px';\n }\n }; // -- Canvas methods\n\n\n helpers$1.fontString = function (pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n };\n\n helpers$1.longestText = function (ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n var data = cache.data = cache.data || {};\n var gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.font = font;\n var longest = 0;\n helpers$1.each(arrayOfThings, function (thing) {\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\n longest = helpers$1.measureText(ctx, data, gc, longest, thing);\n } else if (helpers$1.isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n helpers$1.each(thing, function (nestedThing) {\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\n longest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\n }\n });\n }\n });\n var gcLen = gc.length / 2;\n\n if (gcLen > arrayOfThings.length) {\n for (var i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n\n gc.splice(0, gcLen);\n }\n\n return longest;\n };\n\n helpers$1.measureText = function (ctx, data, gc, longest, string) {\n var textWidth = data[string];\n\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n\n if (textWidth > longest) {\n longest = textWidth;\n }\n\n return longest;\n };\n\n helpers$1.numberOfLabelLines = function (arrayOfThings) {\n var numberOfLines = 1;\n helpers$1.each(arrayOfThings, function (thing) {\n if (helpers$1.isArray(thing)) {\n if (thing.length > numberOfLines) {\n numberOfLines = thing.length;\n }\n }\n });\n return numberOfLines;\n };\n\n helpers$1.color = !chartjsColor ? function (value) {\n console.error('Color.js not found!');\n return value;\n } : function (value) {\n /* global CanvasGradient */\n if (value instanceof CanvasGradient) {\n value = core_defaults.global.defaultColor;\n }\n\n return chartjsColor(value);\n };\n\n helpers$1.getHoverColor = function (colorValue) {\n /* global CanvasPattern */\n return colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient ? colorValue : helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n };\n };\n\n function abstract() {\n throw new Error('This method is not implemented: either no adapter can ' + 'be found or an incomplete integration was provided.');\n }\n /**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */\n\n /**\n * Currently supported unit string values.\n * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\n * @memberof Chart._adapters._date\n * @name Unit\n */\n\n /**\n * @class\n */\n\n\n function DateAdapter(options) {\n this.options = options || {};\n }\n\n helpers$1.extend(DateAdapter.prototype,\n /** @lends DateAdapter */\n {\n /**\n * Returns a map of time formats for the supported formatting units defined\n * in Unit as well as 'datetime' representing a detailed date/time string.\n * @returns {{string: string}}\n */\n formats: abstract,\n\n /**\n * Parses the given `value` and return the associated timestamp.\n * @param {any} value - the value to parse (usually comes from the data)\n * @param {string} [format] - the expected data format\n * @returns {(number|null)}\n * @function\n */\n parse: abstract,\n\n /**\n * Returns the formatted date in the specified `format` for a given `timestamp`.\n * @param {number} timestamp - the timestamp to format\n * @param {string} format - the date/time token\n * @return {string}\n * @function\n */\n format: abstract,\n\n /**\n * Adds the specified `amount` of `unit` to the given `timestamp`.\n * @param {number} timestamp - the input timestamp\n * @param {number} amount - the amount to add\n * @param {Unit} unit - the unit as string\n * @return {number}\n * @function\n */\n add: abstract,\n\n /**\n * Returns the number of `unit` between the given timestamps.\n * @param {number} max - the input timestamp (reference)\n * @param {number} min - the timestamp to substract\n * @param {Unit} unit - the unit as string\n * @return {number}\n * @function\n */\n diff: abstract,\n\n /**\n * Returns start of `unit` for the given `timestamp`.\n * @param {number} timestamp - the input timestamp\n * @param {Unit} unit - the unit as string\n * @param {number} [weekday] - the ISO day of the week with 1 being Monday\n * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n * @function\n */\n startOf: abstract,\n\n /**\n * Returns end of `unit` for the given `timestamp`.\n * @param {number} timestamp - the input timestamp\n * @param {Unit} unit - the unit as string\n * @function\n */\n endOf: abstract,\n // DEPRECATIONS\n\n /**\n * Provided for backward compatibility for scale.getValueForPixel(),\n * this method should be overridden only by the moment adapter.\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\n _create: function _create(value) {\n return value;\n }\n });\n\n DateAdapter.override = function (members) {\n helpers$1.extend(DateAdapter.prototype, members);\n };\n\n var _date = DateAdapter;\n var core_adapters = {\n _date: _date\n };\n /**\n * Namespace to hold static tick generation functions\n * @namespace Chart.Ticks\n */\n\n var core_ticks = {\n /**\n * Namespace to hold formatters for different types of ticks\n * @namespace Chart.Ticks.formatters\n */\n formatters: {\n /**\n * Formatter for value labels\n * @method Chart.Ticks.formatters.values\n * @param value the value to display\n * @return {string|string[]} the label to display\n */\n values: function values(value) {\n return helpers$1.isArray(value) ? value : '' + value;\n },\n\n /**\n * Formatter for linear numeric ticks\n * @method Chart.Ticks.formatters.linear\n * @param tickValue {number} the value to be formatted\n * @param index {number} the position of the tickValue parameter in the ticks array\n * @param ticks {number[]} the list of ticks being converted\n * @return {string} string representation of the tickValue parameter\n */\n linear: function linear(tickValue, index, ticks) {\n // If we have lots of ticks, don't use the ones\n var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0]; // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n\n if (Math.abs(delta) > 1) {\n if (tickValue !== Math.floor(tickValue)) {\n // not an integer\n delta = tickValue - Math.floor(tickValue);\n }\n }\n\n var logDelta = helpers$1.log10(Math.abs(delta));\n var tickString = '';\n\n if (tickValue !== 0) {\n var maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\n\n if (maxTick < 1e-4) {\n // all ticks are small numbers; use scientific notation\n var logTick = helpers$1.log10(Math.abs(tickValue));\n tickString = tickValue.toExponential(Math.floor(logTick) - Math.floor(logDelta));\n } else {\n var numDecimal = -1 * Math.floor(logDelta);\n numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n\n tickString = tickValue.toFixed(numDecimal);\n }\n } else {\n tickString = '0'; // never show decimal places for 0\n }\n\n return tickString;\n },\n logarithmic: function logarithmic(tickValue, index, ticks) {\n var remain = tickValue / Math.pow(10, Math.floor(helpers$1.log10(tickValue)));\n\n if (tickValue === 0) {\n return '0';\n } else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\n return tickValue.toExponential();\n }\n\n return '';\n }\n }\n };\n var valueOrDefault$9 = helpers$1.valueOrDefault;\n var valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\n\n core_defaults._set('scale', {\n display: true,\n position: 'left',\n offset: false,\n // grid line settings\n gridLines: {\n display: true,\n color: 'rgba(0, 0, 0, 0.1)',\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickMarkLength: 10,\n zeroLineWidth: 1,\n zeroLineColor: 'rgba(0,0,0,0.25)',\n zeroLineBorderDash: [],\n zeroLineBorderDashOffset: 0.0,\n offsetGridLines: false,\n borderDash: [],\n borderDashOffset: 0.0\n },\n // scale label\n scaleLabel: {\n // display property\n display: false,\n // actual label\n labelString: '',\n // top/bottom padding\n padding: {\n top: 4,\n bottom: 4\n }\n },\n // label settings\n ticks: {\n beginAtZero: false,\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n padding: 0,\n reverse: false,\n display: true,\n autoSkip: true,\n autoSkipPadding: 0,\n labelOffset: 0,\n // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n callback: core_ticks.formatters.values,\n minor: {},\n major: {}\n }\n });\n\n function labelsFromTicks(ticks) {\n var labels = [];\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n labels.push(ticks[i].label);\n }\n\n return labels;\n }\n\n function getPixelForGridLine(scale, index, offsetGridLines) {\n var lineValue = scale.getPixelForTick(index);\n\n if (offsetGridLines) {\n if (scale.getTicks().length === 1) {\n lineValue -= scale.isHorizontal() ? Math.max(lineValue - scale.left, scale.right - lineValue) : Math.max(lineValue - scale.top, scale.bottom - lineValue);\n } else if (index === 0) {\n lineValue -= (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n lineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2;\n }\n }\n\n return lineValue;\n }\n\n function computeTextSize(context, tick, font) {\n return helpers$1.isArray(tick) ? helpers$1.longestText(context, font, tick) : context.measureText(tick).width;\n }\n\n var core_scale = core_element.extend({\n /**\n * Get the padding needed for the scale\n * @method getPadding\n * @private\n * @returns {Padding} the necessary padding\n */\n getPadding: function getPadding() {\n var me = this;\n return {\n left: me.paddingLeft || 0,\n top: me.paddingTop || 0,\n right: me.paddingRight || 0,\n bottom: me.paddingBottom || 0\n };\n },\n\n /**\n * Returns the scale tick objects ({label, major})\n * @since 2.7\n */\n getTicks: function getTicks() {\n return this._ticks;\n },\n // These methods are ordered by lifecyle. Utilities then follow.\n // Any function defined here is inherited by all scale types.\n // Any function can be extended by the scale type\n mergeTicksOptions: function mergeTicksOptions() {\n var ticks = this.options.ticks;\n\n if (ticks.minor === false) {\n ticks.minor = {\n display: false\n };\n }\n\n if (ticks.major === false) {\n ticks.major = {\n display: false\n };\n }\n\n for (var key in ticks) {\n if (key !== 'major' && key !== 'minor') {\n if (typeof ticks.minor[key] === 'undefined') {\n ticks.minor[key] = ticks[key];\n }\n\n if (typeof ticks.major[key] === 'undefined') {\n ticks.major[key] = ticks[key];\n }\n }\n }\n },\n beforeUpdate: function beforeUpdate() {\n helpers$1.callback(this.options.beforeUpdate, [this]);\n },\n update: function update(maxWidth, maxHeight, margins) {\n var me = this;\n var i, ilen, labels, label, ticks, tick; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\n me.beforeUpdate(); // Absorb the master measurements\n\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me.margins = helpers$1.extend({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n me._maxLabelLines = 0;\n me.longestLabelWidth = 0;\n me.longestTextCache = me.longestTextCache || {}; // Dimensions\n\n me.beforeSetDimensions();\n me.setDimensions();\n me.afterSetDimensions(); // Data min/max\n\n me.beforeDataLimits();\n me.determineDataLimits();\n me.afterDataLimits(); // Ticks - `this.ticks` is now DEPRECATED!\n // Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\n // and must not be accessed directly from outside this class. `this.ticks` being\n // around for long time and not marked as private, we can't change its structure\n // without unexpected breaking changes. If you need to access the scale ticks,\n // use scale.getTicks() instead.\n\n me.beforeBuildTicks(); // New implementations should return an array of objects but for BACKWARD COMPAT,\n // we still support no return (`this.ticks` internally set by calling this method).\n\n ticks = me.buildTicks() || []; // Allow modification of ticks in callback.\n\n ticks = me.afterBuildTicks(ticks) || ticks;\n me.beforeTickToLabelConversion(); // New implementations should return the formatted tick labels but for BACKWARD\n // COMPAT, we still support no return (`this.ticks` internally changed by calling\n // this method and supposed to contain only string values).\n\n labels = me.convertTicksToLabels(ticks) || me.ticks;\n me.afterTickToLabelConversion();\n me.ticks = labels; // BACKWARD COMPATIBILITY\n // IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!\n // BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n label = labels[i];\n tick = ticks[i];\n\n if (!tick) {\n ticks.push(tick = {\n label: label,\n major: false\n });\n } else {\n tick.label = label;\n }\n }\n\n me._ticks = ticks; // Tick Rotation\n\n me.beforeCalculateTickRotation();\n me.calculateTickRotation();\n me.afterCalculateTickRotation(); // Fit\n\n me.beforeFit();\n me.fit();\n me.afterFit(); //\n\n me.afterUpdate();\n return me.minSize;\n },\n afterUpdate: function afterUpdate() {\n helpers$1.callback(this.options.afterUpdate, [this]);\n },\n //\n beforeSetDimensions: function beforeSetDimensions() {\n helpers$1.callback(this.options.beforeSetDimensions, [this]);\n },\n setDimensions: function setDimensions() {\n var me = this; // Set the unconstrained dimension before label rotation\n\n if (me.isHorizontal()) {\n // Reset position before calculating rotation\n me.width = me.maxWidth;\n me.left = 0;\n me.right = me.width;\n } else {\n me.height = me.maxHeight; // Reset position before calculating rotation\n\n me.top = 0;\n me.bottom = me.height;\n } // Reset padding\n\n\n me.paddingLeft = 0;\n me.paddingTop = 0;\n me.paddingRight = 0;\n me.paddingBottom = 0;\n },\n afterSetDimensions: function afterSetDimensions() {\n helpers$1.callback(this.options.afterSetDimensions, [this]);\n },\n // Data limits\n beforeDataLimits: function beforeDataLimits() {\n helpers$1.callback(this.options.beforeDataLimits, [this]);\n },\n determineDataLimits: helpers$1.noop,\n afterDataLimits: function afterDataLimits() {\n helpers$1.callback(this.options.afterDataLimits, [this]);\n },\n //\n beforeBuildTicks: function beforeBuildTicks() {\n helpers$1.callback(this.options.beforeBuildTicks, [this]);\n },\n buildTicks: helpers$1.noop,\n afterBuildTicks: function afterBuildTicks(ticks) {\n var me = this; // ticks is empty for old axis implementations here\n\n if (helpers$1.isArray(ticks) && ticks.length) {\n return helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\n } // Support old implementations (that modified `this.ticks` directly in buildTicks)\n\n\n me.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\n return ticks;\n },\n beforeTickToLabelConversion: function beforeTickToLabelConversion() {\n helpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\n },\n convertTicksToLabels: function convertTicksToLabels() {\n var me = this; // Convert ticks to strings\n\n var tickOpts = me.options.ticks;\n me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\n },\n afterTickToLabelConversion: function afterTickToLabelConversion() {\n helpers$1.callback(this.options.afterTickToLabelConversion, [this]);\n },\n //\n beforeCalculateTickRotation: function beforeCalculateTickRotation() {\n helpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\n },\n calculateTickRotation: function calculateTickRotation() {\n var me = this;\n var context = me.ctx;\n var tickOpts = me.options.ticks;\n var labels = labelsFromTicks(me._ticks); // Get the width of each grid by calculating the difference\n // between x offsets between 0 and 1.\n\n var tickFont = helpers$1.options._parseFont(tickOpts);\n\n context.font = tickFont.string;\n var labelRotation = tickOpts.minRotation || 0;\n\n if (labels.length && me.options.display && me.isHorizontal()) {\n var originalLabelWidth = helpers$1.longestText(context, tickFont.string, labels, me.longestTextCache);\n var labelWidth = originalLabelWidth;\n var cosRotation, sinRotation; // Allow 3 pixels x2 padding either side for label readability\n\n var tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6; // Max label rotation can be set or default to 90 - also act as a loop counter\n\n while (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {\n var angleRadians = helpers$1.toRadians(labelRotation);\n cosRotation = Math.cos(angleRadians);\n sinRotation = Math.sin(angleRadians);\n\n if (sinRotation * originalLabelWidth > me.maxHeight) {\n // go back one step\n labelRotation--;\n break;\n }\n\n labelRotation++;\n labelWidth = cosRotation * originalLabelWidth;\n }\n }\n\n me.labelRotation = labelRotation;\n },\n afterCalculateTickRotation: function afterCalculateTickRotation() {\n helpers$1.callback(this.options.afterCalculateTickRotation, [this]);\n },\n //\n beforeFit: function beforeFit() {\n helpers$1.callback(this.options.beforeFit, [this]);\n },\n fit: function fit() {\n var me = this; // Reset\n\n var minSize = me.minSize = {\n width: 0,\n height: 0\n };\n var labels = labelsFromTicks(me._ticks);\n var opts = me.options;\n var tickOpts = opts.ticks;\n var scaleLabelOpts = opts.scaleLabel;\n var gridLineOpts = opts.gridLines;\n\n var display = me._isVisible();\n\n var position = opts.position;\n var isHorizontal = me.isHorizontal();\n var parseFont = helpers$1.options._parseFont;\n var tickFont = parseFont(tickOpts);\n var tickMarkLength = opts.gridLines.tickMarkLength; // Width\n\n if (isHorizontal) {\n // subtract the margins to line up with the chartArea if we are a full width scale\n minSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;\n } else {\n minSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n } // height\n\n\n if (isHorizontal) {\n minSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n } else {\n minSize.height = me.maxHeight; // fill all the height\n } // Are we showing a title for the scale?\n\n\n if (scaleLabelOpts.display && display) {\n var scaleLabelFont = parseFont(scaleLabelOpts);\n var scaleLabelPadding = helpers$1.options.toPadding(scaleLabelOpts.padding);\n var deltaHeight = scaleLabelFont.lineHeight + scaleLabelPadding.height;\n\n if (isHorizontal) {\n minSize.height += deltaHeight;\n } else {\n minSize.width += deltaHeight;\n }\n } // Don't bother fitting the ticks if we are not showing the labels\n\n\n if (tickOpts.display && display) {\n var largestTextWidth = helpers$1.longestText(me.ctx, tickFont.string, labels, me.longestTextCache);\n var tallestLabelHeightInLines = helpers$1.numberOfLabelLines(labels);\n var lineSpace = tickFont.size * 0.5;\n var tickPadding = me.options.ticks.padding; // Store max number of lines and widest label for _autoSkip\n\n me._maxLabelLines = tallestLabelHeightInLines;\n me.longestLabelWidth = largestTextWidth;\n\n if (isHorizontal) {\n var angleRadians = helpers$1.toRadians(me.labelRotation);\n var cosRotation = Math.cos(angleRadians);\n var sinRotation = Math.sin(angleRadians); // TODO - improve this calculation\n\n var labelHeight = sinRotation * largestTextWidth + tickFont.lineHeight * tallestLabelHeightInLines + lineSpace; // padding\n\n minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n me.ctx.font = tickFont.string;\n var firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.string);\n var lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.string);\n var offsetLeft = me.getPixelForTick(0) - me.left;\n var offsetRight = me.right - me.getPixelForTick(labels.length - 1);\n var paddingLeft, paddingRight; // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n // which means that the right padding is dominated by the font height\n\n if (me.labelRotation !== 0) {\n paddingLeft = position === 'bottom' ? cosRotation * firstLabelWidth : cosRotation * lineSpace;\n paddingRight = position === 'bottom' ? cosRotation * lineSpace : cosRotation * lastLabelWidth;\n } else {\n paddingLeft = firstLabelWidth / 2;\n paddingRight = lastLabelWidth / 2;\n }\n\n me.paddingLeft = Math.max(paddingLeft - offsetLeft, 0) + 3; // add 3 px to move away from canvas edges\n\n me.paddingRight = Math.max(paddingRight - offsetRight, 0) + 3;\n } else {\n // A vertical axis is more constrained by the width. Labels are the\n // dominant factor here, so get that length first and account for padding\n if (tickOpts.mirror) {\n largestTextWidth = 0;\n } else {\n // use lineSpace for consistency with horizontal axis\n // tickPadding is not implemented for horizontal\n largestTextWidth += tickPadding + lineSpace;\n }\n\n minSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth);\n me.paddingTop = tickFont.size / 2;\n me.paddingBottom = tickFont.size / 2;\n }\n }\n\n me.handleMargins();\n me.width = minSize.width;\n me.height = minSize.height;\n },\n\n /**\n * Handle margins and padding interactions\n * @private\n */\n handleMargins: function handleMargins() {\n var me = this;\n\n if (me.margins) {\n me.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n me.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);\n me.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n me.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);\n }\n },\n afterFit: function afterFit() {\n helpers$1.callback(this.options.afterFit, [this]);\n },\n // Shared Methods\n isHorizontal: function isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n },\n isFullWidth: function isFullWidth() {\n return this.options.fullWidth;\n },\n // Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\n getRightValue: function getRightValue(rawValue) {\n // Null and undefined values first\n if (helpers$1.isNullOrUndef(rawValue)) {\n return NaN;\n } // isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\n\n\n if ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\n return NaN;\n } // If it is in fact an object, dive in one more level\n\n\n if (rawValue) {\n if (this.isHorizontal()) {\n if (rawValue.x !== undefined) {\n return this.getRightValue(rawValue.x);\n }\n } else if (rawValue.y !== undefined) {\n return this.getRightValue(rawValue.y);\n }\n } // Value is good, return it\n\n\n return rawValue;\n },\n\n /**\n * Used to get the value to display in the tooltip for the data at the given index\n * @param index\n * @param datasetIndex\n */\n getLabelForIndex: helpers$1.noop,\n\n /**\n * Returns the location of the given data point. Value can either be an index or a numerical value\n * The coordinate (0, 0) is at the upper-left corner of the canvas\n * @param value\n * @param index\n * @param datasetIndex\n */\n getPixelForValue: helpers$1.noop,\n\n /**\n * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n * The coordinate (0, 0) is at the upper-left corner of the canvas\n * @param pixel\n */\n getValueForPixel: helpers$1.noop,\n\n /**\n * Returns the location of the tick at the given index\n * The coordinate (0, 0) is at the upper-left corner of the canvas\n */\n getPixelForTick: function getPixelForTick(index) {\n var me = this;\n var offset = me.options.offset;\n\n if (me.isHorizontal()) {\n var innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n var tickWidth = innerWidth / Math.max(me._ticks.length - (offset ? 0 : 1), 1);\n var pixel = tickWidth * index + me.paddingLeft;\n\n if (offset) {\n pixel += tickWidth / 2;\n }\n\n var finalVal = me.left + pixel;\n finalVal += me.isFullWidth() ? me.margins.left : 0;\n return finalVal;\n }\n\n var innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n return me.top + index * (innerHeight / (me._ticks.length - 1));\n },\n\n /**\n * Utility for getting the pixel location of a percentage of scale\n * The coordinate (0, 0) is at the upper-left corner of the canvas\n */\n getPixelForDecimal: function getPixelForDecimal(decimal) {\n var me = this;\n\n if (me.isHorizontal()) {\n var innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n var valueOffset = innerWidth * decimal + me.paddingLeft;\n var finalVal = me.left + valueOffset;\n finalVal += me.isFullWidth() ? me.margins.left : 0;\n return finalVal;\n }\n\n return me.top + decimal * me.height;\n },\n\n /**\n * Returns the pixel for the minimum chart value\n * The coordinate (0, 0) is at the upper-left corner of the canvas\n */\n getBasePixel: function getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n },\n getBaseValue: function getBaseValue() {\n var me = this;\n var min = me.min;\n var max = me.max;\n return me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n },\n\n /**\n * Returns a subset of ticks to be plotted to avoid overlapping labels.\n * @private\n */\n _autoSkip: function _autoSkip(ticks) {\n var me = this;\n var isHorizontal = me.isHorizontal();\n var optionTicks = me.options.ticks.minor;\n var tickCount = ticks.length;\n var skipRatio = false;\n var maxTicks = optionTicks.maxTicksLimit; // Total space needed to display all ticks. First and last ticks are\n // drawn as their center at end of axis, so tickCount-1\n\n var ticksLength = me._tickSize() * (tickCount - 1); // Axis length\n\n var axisLength = isHorizontal ? me.width - (me.paddingLeft + me.paddingRight) : me.height - (me.paddingTop + me.PaddingBottom);\n var result = [];\n var i, tick;\n\n if (ticksLength > axisLength) {\n skipRatio = 1 + Math.floor(ticksLength / axisLength);\n } // if they defined a max number of optionTicks,\n // increase skipRatio until that number is met\n\n\n if (tickCount > maxTicks) {\n skipRatio = Math.max(skipRatio, 1 + Math.floor(tickCount / maxTicks));\n }\n\n for (i = 0; i < tickCount; i++) {\n tick = ticks[i];\n\n if (skipRatio > 1 && i % skipRatio > 0) {\n // leave tick in place but make sure it's not displayed (#4635)\n delete tick.label;\n }\n\n result.push(tick);\n }\n\n return result;\n },\n\n /**\n * @private\n */\n _tickSize: function _tickSize() {\n var me = this;\n var isHorizontal = me.isHorizontal();\n var optionTicks = me.options.ticks.minor; // Calculate space needed by label in axis direction.\n\n var rot = helpers$1.toRadians(me.labelRotation);\n var cos = Math.abs(Math.cos(rot));\n var sin = Math.abs(Math.sin(rot));\n var padding = optionTicks.autoSkipPadding || 0;\n var w = me.longestLabelWidth + padding || 0;\n\n var tickFont = helpers$1.options._parseFont(optionTicks);\n\n var h = me._maxLabelLines * tickFont.lineHeight + padding || 0; // Calculate space needed for 1 tick in axis direction.\n\n return isHorizontal ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n },\n\n /**\n * @private\n */\n _isVisible: function _isVisible() {\n var me = this;\n var chart = me.chart;\n var display = me.options.display;\n var i, ilen, meta;\n\n if (display !== 'auto') {\n return !!display;\n } // When 'auto', the scale is visible if at least one associated dataset is visible.\n\n\n for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n\n if (meta.xAxisID === me.id || meta.yAxisID === me.id) {\n return true;\n }\n }\n }\n\n return false;\n },\n\n /**\n * Actually draw the scale on the canvas\n * @param {object} chartArea - the area of the chart to draw full grid lines on\n */\n draw: function draw(chartArea) {\n var me = this;\n var options = me.options;\n\n if (!me._isVisible()) {\n return;\n }\n\n var chart = me.chart;\n var context = me.ctx;\n var globalDefaults = core_defaults.global;\n var defaultFontColor = globalDefaults.defaultFontColor;\n var optionTicks = options.ticks.minor;\n var optionMajorTicks = options.ticks.major || optionTicks;\n var gridLines = options.gridLines;\n var scaleLabel = options.scaleLabel;\n var position = options.position;\n var isRotated = me.labelRotation !== 0;\n var isMirrored = optionTicks.mirror;\n var isHorizontal = me.isHorizontal();\n var parseFont = helpers$1.options._parseFont;\n var ticks = optionTicks.display && optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks();\n var tickFontColor = valueOrDefault$9(optionTicks.fontColor, defaultFontColor);\n var tickFont = parseFont(optionTicks);\n var lineHeight = tickFont.lineHeight;\n var majorTickFontColor = valueOrDefault$9(optionMajorTicks.fontColor, defaultFontColor);\n var majorTickFont = parseFont(optionMajorTicks);\n var tickPadding = optionTicks.padding;\n var labelOffset = optionTicks.labelOffset;\n var tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;\n var scaleLabelFontColor = valueOrDefault$9(scaleLabel.fontColor, defaultFontColor);\n var scaleLabelFont = parseFont(scaleLabel);\n var scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\n var labelRotationRadians = helpers$1.toRadians(me.labelRotation);\n var itemsToDraw = [];\n var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\n var alignPixel = helpers$1._alignPixel;\n var borderValue, tickStart, tickEnd;\n\n if (position === 'top') {\n borderValue = alignPixel(chart, me.bottom, axisWidth);\n tickStart = me.bottom - tl;\n tickEnd = borderValue - axisWidth / 2;\n } else if (position === 'bottom') {\n borderValue = alignPixel(chart, me.top, axisWidth);\n tickStart = borderValue + axisWidth / 2;\n tickEnd = me.top + tl;\n } else if (position === 'left') {\n borderValue = alignPixel(chart, me.right, axisWidth);\n tickStart = me.right - tl;\n tickEnd = borderValue - axisWidth / 2;\n } else {\n borderValue = alignPixel(chart, me.left, axisWidth);\n tickStart = borderValue + axisWidth / 2;\n tickEnd = me.left + tl;\n }\n\n var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error.\n\n helpers$1.each(ticks, function (tick, index) {\n // autoskipper skipped this tick (#4635)\n if (helpers$1.isNullOrUndef(tick.label)) {\n return;\n }\n\n var label = tick.label;\n var lineWidth, lineColor, borderDash, borderDashOffset;\n\n if (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) {\n // Draw the first index specially\n lineWidth = gridLines.zeroLineWidth;\n lineColor = gridLines.zeroLineColor;\n borderDash = gridLines.zeroLineBorderDash || [];\n borderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\n } else {\n lineWidth = valueAtIndexOrDefault(gridLines.lineWidth, index);\n lineColor = valueAtIndexOrDefault(gridLines.color, index);\n borderDash = gridLines.borderDash || [];\n borderDashOffset = gridLines.borderDashOffset || 0.0;\n } // Common properties\n\n\n var tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY, textOffset, textAlign;\n var labelCount = helpers$1.isArray(label) ? label.length : 1;\n var lineValue = getPixelForGridLine(me, index, gridLines.offsetGridLines);\n\n if (isHorizontal) {\n var labelYOffset = tl + tickPadding;\n\n if (lineValue < me.left - epsilon) {\n lineColor = 'rgba(0,0,0,0)';\n }\n\n tx1 = tx2 = x1 = x2 = alignPixel(chart, lineValue, lineWidth);\n ty1 = tickStart;\n ty2 = tickEnd;\n labelX = me.getPixelForTick(index) + labelOffset; // x values for optionTicks (need to consider offsetLabel option)\n\n if (position === 'top') {\n y1 = alignPixel(chart, chartArea.top, axisWidth) + axisWidth / 2;\n y2 = chartArea.bottom;\n textOffset = ((!isRotated ? 0.5 : 1) - labelCount) * lineHeight;\n textAlign = !isRotated ? 'center' : 'left';\n labelY = me.bottom - labelYOffset;\n } else {\n y1 = chartArea.top;\n y2 = alignPixel(chart, chartArea.bottom, axisWidth) - axisWidth / 2;\n textOffset = (!isRotated ? 0.5 : 0) * lineHeight;\n textAlign = !isRotated ? 'center' : 'right';\n labelY = me.top + labelYOffset;\n }\n } else {\n var labelXOffset = (isMirrored ? 0 : tl) + tickPadding;\n\n if (lineValue < me.top - epsilon) {\n lineColor = 'rgba(0,0,0,0)';\n }\n\n tx1 = tickStart;\n tx2 = tickEnd;\n ty1 = ty2 = y1 = y2 = alignPixel(chart, lineValue, lineWidth);\n labelY = me.getPixelForTick(index) + labelOffset;\n textOffset = (1 - labelCount) * lineHeight / 2;\n\n if (position === 'left') {\n x1 = alignPixel(chart, chartArea.left, axisWidth) + axisWidth / 2;\n x2 = chartArea.right;\n textAlign = isMirrored ? 'left' : 'right';\n labelX = me.right - labelXOffset;\n } else {\n x1 = chartArea.left;\n x2 = alignPixel(chart, chartArea.right, axisWidth) - axisWidth / 2;\n textAlign = isMirrored ? 'right' : 'left';\n labelX = me.left + labelXOffset;\n }\n }\n\n itemsToDraw.push({\n tx1: tx1,\n ty1: ty1,\n tx2: tx2,\n ty2: ty2,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n labelX: labelX,\n labelY: labelY,\n glWidth: lineWidth,\n glColor: lineColor,\n glBorderDash: borderDash,\n glBorderDashOffset: borderDashOffset,\n rotation: -1 * labelRotationRadians,\n label: label,\n major: tick.major,\n textOffset: textOffset,\n textAlign: textAlign\n });\n }); // Draw all of the tick labels, tick marks, and grid lines at the correct places\n\n helpers$1.each(itemsToDraw, function (itemToDraw) {\n var glWidth = itemToDraw.glWidth;\n var glColor = itemToDraw.glColor;\n\n if (gridLines.display && glWidth && glColor) {\n context.save();\n context.lineWidth = glWidth;\n context.strokeStyle = glColor;\n\n if (context.setLineDash) {\n context.setLineDash(itemToDraw.glBorderDash);\n context.lineDashOffset = itemToDraw.glBorderDashOffset;\n }\n\n context.beginPath();\n\n if (gridLines.drawTicks) {\n context.moveTo(itemToDraw.tx1, itemToDraw.ty1);\n context.lineTo(itemToDraw.tx2, itemToDraw.ty2);\n }\n\n if (gridLines.drawOnChartArea) {\n context.moveTo(itemToDraw.x1, itemToDraw.y1);\n context.lineTo(itemToDraw.x2, itemToDraw.y2);\n }\n\n context.stroke();\n context.restore();\n }\n\n if (optionTicks.display) {\n // Make sure we draw text in the correct color and font\n context.save();\n context.translate(itemToDraw.labelX, itemToDraw.labelY);\n context.rotate(itemToDraw.rotation);\n context.font = itemToDraw.major ? majorTickFont.string : tickFont.string;\n context.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor;\n context.textBaseline = 'middle';\n context.textAlign = itemToDraw.textAlign;\n var label = itemToDraw.label;\n var y = itemToDraw.textOffset;\n\n if (helpers$1.isArray(label)) {\n for (var i = 0; i < label.length; ++i) {\n // We just make sure the multiline element is a string here..\n context.fillText('' + label[i], 0, y);\n y += lineHeight;\n }\n } else {\n context.fillText(label, 0, y);\n }\n\n context.restore();\n }\n });\n\n if (scaleLabel.display) {\n // Draw the scale label\n var scaleLabelX;\n var scaleLabelY;\n var rotation = 0;\n var halfLineHeight = scaleLabelFont.lineHeight / 2;\n\n if (isHorizontal) {\n scaleLabelX = me.left + (me.right - me.left) / 2; // midpoint of the width\n\n scaleLabelY = position === 'bottom' ? me.bottom - halfLineHeight - scaleLabelPadding.bottom : me.top + halfLineHeight + scaleLabelPadding.top;\n } else {\n var isLeft = position === 'left';\n scaleLabelX = isLeft ? me.left + halfLineHeight + scaleLabelPadding.top : me.right - halfLineHeight - scaleLabelPadding.top;\n scaleLabelY = me.top + (me.bottom - me.top) / 2;\n rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n }\n\n context.save();\n context.translate(scaleLabelX, scaleLabelY);\n context.rotate(rotation);\n context.textAlign = 'center';\n context.textBaseline = 'middle';\n context.fillStyle = scaleLabelFontColor; // render in correct colour\n\n context.font = scaleLabelFont.string;\n context.fillText(scaleLabel.labelString, 0, 0);\n context.restore();\n }\n\n if (axisWidth) {\n // Draw the line at the edge of the axis\n var firstLineWidth = axisWidth;\n var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, ticks.length - 1, 0);\n var x1, x2, y1, y2;\n\n if (isHorizontal) {\n x1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\n x2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\n y2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n\n context.lineWidth = axisWidth;\n context.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n context.stroke();\n }\n }\n });\n var defaultConfig = {\n position: 'bottom'\n };\n var scale_category = core_scale.extend({\n /**\n * Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those\n * else fall back to data.labels\n * @private\n */\n getLabels: function getLabels() {\n var data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n },\n determineDataLimits: function determineDataLimits() {\n var me = this;\n var labels = me.getLabels();\n me.minIndex = 0;\n me.maxIndex = labels.length - 1;\n var findIndex;\n\n if (me.options.ticks.min !== undefined) {\n // user specified min value\n findIndex = labels.indexOf(me.options.ticks.min);\n me.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n }\n\n if (me.options.ticks.max !== undefined) {\n // user specified max value\n findIndex = labels.indexOf(me.options.ticks.max);\n me.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n }\n\n me.min = labels[me.minIndex];\n me.max = labels[me.maxIndex];\n },\n buildTicks: function buildTicks() {\n var me = this;\n var labels = me.getLabels(); // If we are viewing some subset of labels, slice the original array\n\n me.ticks = me.minIndex === 0 && me.maxIndex === labels.length - 1 ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n },\n getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n var me = this;\n var chart = me.chart;\n\n if (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\n return me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\n }\n\n return me.ticks[index - me.minIndex];\n },\n // Used to get data value locations. Value can either be an index or a numerical value\n getPixelForValue: function getPixelForValue(value, index) {\n var me = this;\n var offset = me.options.offset; // 1 is added because we need the length but we have the indexes\n\n var offsetAmt = Math.max(me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1), 1); // If value is a data object, then index is the index in the data array,\n // not the index of the scale. We need to change that.\n\n var valueCategory;\n\n if (value !== undefined && value !== null) {\n valueCategory = me.isHorizontal() ? value.x : value.y;\n }\n\n if (valueCategory !== undefined || value !== undefined && isNaN(index)) {\n var labels = me.getLabels();\n value = valueCategory || value;\n var idx = labels.indexOf(value);\n index = idx !== -1 ? idx : index;\n }\n\n if (me.isHorizontal()) {\n var valueWidth = me.width / offsetAmt;\n var widthOffset = valueWidth * (index - me.minIndex);\n\n if (offset) {\n widthOffset += valueWidth / 2;\n }\n\n return me.left + widthOffset;\n }\n\n var valueHeight = me.height / offsetAmt;\n var heightOffset = valueHeight * (index - me.minIndex);\n\n if (offset) {\n heightOffset += valueHeight / 2;\n }\n\n return me.top + heightOffset;\n },\n getPixelForTick: function getPixelForTick(index) {\n return this.getPixelForValue(this.ticks[index], index + this.minIndex, null);\n },\n getValueForPixel: function getValueForPixel(pixel) {\n var me = this;\n var offset = me.options.offset;\n var value;\n var offsetAmt = Math.max(me._ticks.length - (offset ? 0 : 1), 1);\n var horz = me.isHorizontal();\n var valueDimension = (horz ? me.width : me.height) / offsetAmt;\n pixel -= horz ? me.left : me.top;\n\n if (offset) {\n pixel -= valueDimension / 2;\n }\n\n if (pixel <= 0) {\n value = 0;\n } else {\n value = Math.round(pixel / valueDimension);\n }\n\n return value + me.minIndex;\n },\n getBasePixel: function getBasePixel() {\n return this.bottom;\n }\n }); // INTERNAL: static default options, registered in src/index.js\n\n var _defaults = defaultConfig;\n scale_category._defaults = _defaults;\n var noop = helpers$1.noop;\n var isNullOrUndef = helpers$1.isNullOrUndef;\n /**\n * Generate a set of linear ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {number[]} array of tick values\n */\n\n function generateTicks(generationOptions, dataRange) {\n var ticks = []; // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n // for details.\n\n var MIN_SPACING = 1e-14;\n var stepSize = generationOptions.stepSize;\n var unit = stepSize || 1;\n var maxNumSpaces = generationOptions.maxTicks - 1;\n var min = generationOptions.min;\n var max = generationOptions.max;\n var precision = generationOptions.precision;\n var rmin = dataRange.min;\n var rmax = dataRange.max;\n var spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\n var factor, niceMin, niceMax, numSpaces; // Beyond MIN_SPACING floating point numbers being to lose precision\n // such that we can't do the math necessary to generate ticks\n\n if (spacing < MIN_SPACING && isNullOrUndef(min) && isNullOrUndef(max)) {\n return [rmin, rmax];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n\n if (numSpaces > maxNumSpaces) {\n // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n spacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\n }\n\n if (stepSize || isNullOrUndef(precision)) {\n // If a precision is not specified, calculate factor based on spacing\n factor = Math.pow(10, helpers$1._decimalPlaces(spacing));\n } else {\n // If the user specified a precision, round to that number of decimal places\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing; // If min, max and stepSize is set and they make an evenly spaced scale use it.\n\n if (stepSize) {\n // If very close to our whole number, use it.\n if (!isNullOrUndef(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\n niceMin = min;\n }\n\n if (!isNullOrUndef(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\n niceMax = max;\n }\n }\n\n numSpaces = (niceMax - niceMin) / spacing; // If very close to our rounded value, use it.\n\n if (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n ticks.push(isNullOrUndef(min) ? niceMin : min);\n\n for (var j = 1; j < numSpaces; ++j) {\n ticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\n }\n\n ticks.push(isNullOrUndef(max) ? niceMax : max);\n return ticks;\n }\n\n var scale_linearbase = core_scale.extend({\n getRightValue: function getRightValue(value) {\n if (typeof value === 'string') {\n return +value;\n }\n\n return core_scale.prototype.getRightValue.call(this, value);\n },\n handleTickRangeOptions: function handleTickRangeOptions() {\n var me = this;\n var opts = me.options;\n var tickOpts = opts.ticks; // If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n // do nothing since that would make the chart weird. If the user really wants a weird chart\n // axis, they can manually override it\n\n if (tickOpts.beginAtZero) {\n var minSign = helpers$1.sign(me.min);\n var maxSign = helpers$1.sign(me.max);\n\n if (minSign < 0 && maxSign < 0) {\n // move the top up to 0\n me.max = 0;\n } else if (minSign > 0 && maxSign > 0) {\n // move the bottom down to 0\n me.min = 0;\n }\n }\n\n var setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n var setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n\n if (tickOpts.min !== undefined) {\n me.min = tickOpts.min;\n } else if (tickOpts.suggestedMin !== undefined) {\n if (me.min === null) {\n me.min = tickOpts.suggestedMin;\n } else {\n me.min = Math.min(me.min, tickOpts.suggestedMin);\n }\n }\n\n if (tickOpts.max !== undefined) {\n me.max = tickOpts.max;\n } else if (tickOpts.suggestedMax !== undefined) {\n if (me.max === null) {\n me.max = tickOpts.suggestedMax;\n } else {\n me.max = Math.max(me.max, tickOpts.suggestedMax);\n }\n }\n\n if (setMin !== setMax) {\n // We set the min or the max but not both.\n // So ensure that our range is good\n // Inverted or 0 length range can happen when\n // ticks.min is set, and no datasets are visible\n if (me.min >= me.max) {\n if (setMin) {\n me.max = me.min + 1;\n } else {\n me.min = me.max - 1;\n }\n }\n }\n\n if (me.min === me.max) {\n me.max++;\n\n if (!tickOpts.beginAtZero) {\n me.min--;\n }\n }\n },\n getTickLimit: function getTickLimit() {\n var me = this;\n var tickOpts = me.options.ticks;\n var stepSize = tickOpts.stepSize;\n var maxTicksLimit = tickOpts.maxTicksLimit;\n var maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\n } else {\n maxTicks = me._computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n },\n _computeTickLimit: function _computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n },\n handleDirectionalChanges: noop,\n buildTicks: function buildTicks() {\n var me = this;\n var opts = me.options;\n var tickOpts = opts.ticks; // Figure out what the max number of ticks we can support it is based on the size of\n // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n // the graph. Make sure we always have at least 2 ticks\n\n var maxTicks = me.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n var numericGeneratorOptions = {\n maxTicks: maxTicks,\n min: tickOpts.min,\n max: tickOpts.max,\n precision: tickOpts.precision,\n stepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n };\n var ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\n me.handleDirectionalChanges(); // At this point, we need to update our max and min given the tick values since we have expanded the\n // range of the scale\n\n me.max = helpers$1.max(ticks);\n me.min = helpers$1.min(ticks);\n\n if (tickOpts.reverse) {\n ticks.reverse();\n me.start = me.max;\n me.end = me.min;\n } else {\n me.start = me.min;\n me.end = me.max;\n }\n },\n convertTicksToLabels: function convertTicksToLabels() {\n var me = this;\n me.ticksAsNumbers = me.ticks.slice();\n me.zeroLineIndex = me.ticks.indexOf(0);\n core_scale.prototype.convertTicksToLabels.call(me);\n }\n });\n var defaultConfig$1 = {\n position: 'left',\n ticks: {\n callback: core_ticks.formatters.linear\n }\n };\n var scale_linear = scale_linearbase.extend({\n determineDataLimits: function determineDataLimits() {\n var me = this;\n var opts = me.options;\n var chart = me.chart;\n var data = chart.data;\n var datasets = data.datasets;\n var isHorizontal = me.isHorizontal();\n var DEFAULT_MIN = 0;\n var DEFAULT_MAX = 1;\n\n function IDMatches(meta) {\n return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n } // First Calculate the range\n\n\n me.min = null;\n me.max = null;\n var hasStacks = opts.stacked;\n\n if (hasStacks === undefined) {\n helpers$1.each(datasets, function (dataset, datasetIndex) {\n if (hasStacks) {\n return;\n }\n\n var meta = chart.getDatasetMeta(datasetIndex);\n\n if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {\n hasStacks = true;\n }\n });\n }\n\n if (opts.stacked || hasStacks) {\n var valuesPerStack = {};\n helpers$1.each(datasets, function (dataset, datasetIndex) {\n var meta = chart.getDatasetMeta(datasetIndex);\n var key = [meta.type, // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n opts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');\n\n if (valuesPerStack[key] === undefined) {\n valuesPerStack[key] = {\n positiveValues: [],\n negativeValues: []\n };\n } // Store these per type\n\n\n var positiveValues = valuesPerStack[key].positiveValues;\n var negativeValues = valuesPerStack[key].negativeValues;\n\n if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n helpers$1.each(dataset.data, function (rawValue, index) {\n var value = +me.getRightValue(rawValue);\n\n if (isNaN(value) || meta.data[index].hidden) {\n return;\n }\n\n positiveValues[index] = positiveValues[index] || 0;\n negativeValues[index] = negativeValues[index] || 0;\n\n if (opts.relativePoints) {\n positiveValues[index] = 100;\n } else if (value < 0) {\n negativeValues[index] += value;\n } else {\n positiveValues[index] += value;\n }\n });\n }\n });\n helpers$1.each(valuesPerStack, function (valuesForType) {\n var values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n var minVal = helpers$1.min(values);\n var maxVal = helpers$1.max(values);\n me.min = me.min === null ? minVal : Math.min(me.min, minVal);\n me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n });\n } else {\n helpers$1.each(datasets, function (dataset, datasetIndex) {\n var meta = chart.getDatasetMeta(datasetIndex);\n\n if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n helpers$1.each(dataset.data, function (rawValue, index) {\n var value = +me.getRightValue(rawValue);\n\n if (isNaN(value) || meta.data[index].hidden) {\n return;\n }\n\n if (me.min === null) {\n me.min = value;\n } else if (value < me.min) {\n me.min = value;\n }\n\n if (me.max === null) {\n me.max = value;\n } else if (value > me.max) {\n me.max = value;\n }\n });\n }\n });\n }\n\n me.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n me.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX; // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\n this.handleTickRangeOptions();\n },\n // Returns the maximum number of ticks based on the scale dimension\n _computeTickLimit: function _computeTickLimit() {\n var me = this;\n var tickFont;\n\n if (me.isHorizontal()) {\n return Math.ceil(me.width / 40);\n }\n\n tickFont = helpers$1.options._parseFont(me.options.ticks);\n return Math.ceil(me.height / tickFont.lineHeight);\n },\n // Called after the ticks are built. We need\n handleDirectionalChanges: function handleDirectionalChanges() {\n if (!this.isHorizontal()) {\n // We are in a vertical orientation. The top value is the highest. So reverse the array\n this.ticks.reverse();\n }\n },\n getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n },\n // Utils\n getPixelForValue: function getPixelForValue(value) {\n // This must be called after fit has been run so that\n // this.left, this.top, this.right, and this.bottom have been defined\n var me = this;\n var start = me.start;\n var rightValue = +me.getRightValue(value);\n var pixel;\n var range = me.end - start;\n\n if (me.isHorizontal()) {\n pixel = me.left + me.width / range * (rightValue - start);\n } else {\n pixel = me.bottom - me.height / range * (rightValue - start);\n }\n\n return pixel;\n },\n getValueForPixel: function getValueForPixel(pixel) {\n var me = this;\n var isHorizontal = me.isHorizontal();\n var innerDimension = isHorizontal ? me.width : me.height;\n var offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;\n return me.start + (me.end - me.start) * offset;\n },\n getPixelForTick: function getPixelForTick(index) {\n return this.getPixelForValue(this.ticksAsNumbers[index]);\n }\n }); // INTERNAL: static default options, registered in src/index.js\n\n var _defaults$1 = defaultConfig$1;\n scale_linear._defaults = _defaults$1;\n var valueOrDefault$a = helpers$1.valueOrDefault;\n /**\n * Generate a set of logarithmic ticks\n * @param generationOptions the options used to generate the ticks\n * @param dataRange the range of the data\n * @returns {number[]} array of tick values\n */\n\n function generateTicks$1(generationOptions, dataRange) {\n var ticks = [];\n var tickVal = valueOrDefault$a(generationOptions.min, Math.pow(10, Math.floor(helpers$1.log10(dataRange.min))));\n var endExp = Math.floor(helpers$1.log10(dataRange.max));\n var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n var exp, significand;\n\n if (tickVal === 0) {\n exp = Math.floor(helpers$1.log10(dataRange.minNotZero));\n significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n ticks.push(tickVal);\n tickVal = significand * Math.pow(10, exp);\n } else {\n exp = Math.floor(helpers$1.log10(tickVal));\n significand = Math.floor(tickVal / Math.pow(10, exp));\n }\n\n var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n do {\n ticks.push(tickVal);\n ++significand;\n\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || exp === endExp && significand < endSignificand);\n\n var lastTick = valueOrDefault$a(generationOptions.max, tickVal);\n ticks.push(lastTick);\n return ticks;\n }\n\n var defaultConfig$2 = {\n position: 'left',\n // label settings\n ticks: {\n callback: core_ticks.formatters.logarithmic\n }\n }; // TODO(v3): change this to positiveOrDefault\n\n function nonNegativeOrDefault(value, defaultValue) {\n return helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\n }\n\n var scale_logarithmic = core_scale.extend({\n determineDataLimits: function determineDataLimits() {\n var me = this;\n var opts = me.options;\n var chart = me.chart;\n var data = chart.data;\n var datasets = data.datasets;\n var isHorizontal = me.isHorizontal();\n\n function IDMatches(meta) {\n return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n } // Calculate Range\n\n\n me.min = null;\n me.max = null;\n me.minNotZero = null;\n var hasStacks = opts.stacked;\n\n if (hasStacks === undefined) {\n helpers$1.each(datasets, function (dataset, datasetIndex) {\n if (hasStacks) {\n return;\n }\n\n var meta = chart.getDatasetMeta(datasetIndex);\n\n if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && meta.stack !== undefined) {\n hasStacks = true;\n }\n });\n }\n\n if (opts.stacked || hasStacks) {\n var valuesPerStack = {};\n helpers$1.each(datasets, function (dataset, datasetIndex) {\n var meta = chart.getDatasetMeta(datasetIndex);\n var key = [meta.type, // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n opts.stacked === undefined && meta.stack === undefined ? datasetIndex : '', meta.stack].join('.');\n\n if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n if (valuesPerStack[key] === undefined) {\n valuesPerStack[key] = [];\n }\n\n helpers$1.each(dataset.data, function (rawValue, index) {\n var values = valuesPerStack[key];\n var value = +me.getRightValue(rawValue); // invalid, hidden and negative values are ignored\n\n if (isNaN(value) || meta.data[index].hidden || value < 0) {\n return;\n }\n\n values[index] = values[index] || 0;\n values[index] += value;\n });\n }\n });\n helpers$1.each(valuesPerStack, function (valuesForType) {\n if (valuesForType.length > 0) {\n var minVal = helpers$1.min(valuesForType);\n var maxVal = helpers$1.max(valuesForType);\n me.min = me.min === null ? minVal : Math.min(me.min, minVal);\n me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n }\n });\n } else {\n helpers$1.each(datasets, function (dataset, datasetIndex) {\n var meta = chart.getDatasetMeta(datasetIndex);\n\n if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n helpers$1.each(dataset.data, function (rawValue, index) {\n var value = +me.getRightValue(rawValue); // invalid, hidden and negative values are ignored\n\n if (isNaN(value) || meta.data[index].hidden || value < 0) {\n return;\n }\n\n if (me.min === null) {\n me.min = value;\n } else if (value < me.min) {\n me.min = value;\n }\n\n if (me.max === null) {\n me.max = value;\n } else if (value > me.max) {\n me.max = value;\n }\n\n if (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n me.minNotZero = value;\n }\n });\n }\n });\n } // Common base implementation to handle ticks.min, ticks.max\n\n\n this.handleTickRangeOptions();\n },\n handleTickRangeOptions: function handleTickRangeOptions() {\n var me = this;\n var tickOpts = me.options.ticks;\n var DEFAULT_MIN = 1;\n var DEFAULT_MAX = 10;\n me.min = nonNegativeOrDefault(tickOpts.min, me.min);\n me.max = nonNegativeOrDefault(tickOpts.max, me.max);\n\n if (me.min === me.max) {\n if (me.min !== 0 && me.min !== null) {\n me.min = Math.pow(10, Math.floor(helpers$1.log10(me.min)) - 1);\n me.max = Math.pow(10, Math.floor(helpers$1.log10(me.max)) + 1);\n } else {\n me.min = DEFAULT_MIN;\n me.max = DEFAULT_MAX;\n }\n }\n\n if (me.min === null) {\n me.min = Math.pow(10, Math.floor(helpers$1.log10(me.max)) - 1);\n }\n\n if (me.max === null) {\n me.max = me.min !== 0 ? Math.pow(10, Math.floor(helpers$1.log10(me.min)) + 1) : DEFAULT_MAX;\n }\n\n if (me.minNotZero === null) {\n if (me.min > 0) {\n me.minNotZero = me.min;\n } else if (me.max < 1) {\n me.minNotZero = Math.pow(10, Math.floor(helpers$1.log10(me.max)));\n } else {\n me.minNotZero = DEFAULT_MIN;\n }\n }\n },\n buildTicks: function buildTicks() {\n var me = this;\n var tickOpts = me.options.ticks;\n var reverse = !me.isHorizontal();\n var generationOptions = {\n min: nonNegativeOrDefault(tickOpts.min),\n max: nonNegativeOrDefault(tickOpts.max)\n };\n var ticks = me.ticks = generateTicks$1(generationOptions, me); // At this point, we need to update our max and min given the tick values since we have expanded the\n // range of the scale\n\n me.max = helpers$1.max(ticks);\n me.min = helpers$1.min(ticks);\n\n if (tickOpts.reverse) {\n reverse = !reverse;\n me.start = me.max;\n me.end = me.min;\n } else {\n me.start = me.min;\n me.end = me.max;\n }\n\n if (reverse) {\n ticks.reverse();\n }\n },\n convertTicksToLabels: function convertTicksToLabels() {\n this.tickValues = this.ticks.slice();\n core_scale.prototype.convertTicksToLabels.call(this);\n },\n // Get the correct tooltip label\n getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n },\n getPixelForTick: function getPixelForTick(index) {\n return this.getPixelForValue(this.tickValues[index]);\n },\n\n /**\n * Returns the value of the first tick.\n * @param {number} value - The minimum not zero value.\n * @return {number} The first tick value.\n * @private\n */\n _getFirstTickValue: function _getFirstTickValue(value) {\n var exp = Math.floor(helpers$1.log10(value));\n var significand = Math.floor(value / Math.pow(10, exp));\n return significand * Math.pow(10, exp);\n },\n getPixelForValue: function getPixelForValue(value) {\n var me = this;\n var tickOpts = me.options.ticks;\n var reverse = tickOpts.reverse;\n var log10 = helpers$1.log10;\n\n var firstTickValue = me._getFirstTickValue(me.minNotZero);\n\n var offset = 0;\n var innerDimension, pixel, start, end, sign;\n value = +me.getRightValue(value);\n\n if (reverse) {\n start = me.end;\n end = me.start;\n sign = -1;\n } else {\n start = me.start;\n end = me.end;\n sign = 1;\n }\n\n if (me.isHorizontal()) {\n innerDimension = me.width;\n pixel = reverse ? me.right : me.left;\n } else {\n innerDimension = me.height;\n sign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0)\n\n pixel = reverse ? me.top : me.bottom;\n }\n\n if (value !== start) {\n if (start === 0) {\n // include zero tick\n offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);\n innerDimension -= offset;\n start = firstTickValue;\n }\n\n if (value !== 0) {\n offset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start));\n }\n\n pixel += sign * offset;\n }\n\n return pixel;\n },\n getValueForPixel: function getValueForPixel(pixel) {\n var me = this;\n var tickOpts = me.options.ticks;\n var reverse = tickOpts.reverse;\n var log10 = helpers$1.log10;\n\n var firstTickValue = me._getFirstTickValue(me.minNotZero);\n\n var innerDimension, start, end, value;\n\n if (reverse) {\n start = me.end;\n end = me.start;\n } else {\n start = me.start;\n end = me.end;\n }\n\n if (me.isHorizontal()) {\n innerDimension = me.width;\n value = reverse ? me.right - pixel : pixel - me.left;\n } else {\n innerDimension = me.height;\n value = reverse ? pixel - me.top : me.bottom - pixel;\n }\n\n if (value !== start) {\n if (start === 0) {\n // include zero tick\n var offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);\n value -= offset;\n innerDimension -= offset;\n start = firstTickValue;\n }\n\n value *= log10(end) - log10(start);\n value /= innerDimension;\n value = Math.pow(10, log10(start) + value);\n }\n\n return value;\n }\n }); // INTERNAL: static default options, registered in src/index.js\n\n var _defaults$2 = defaultConfig$2;\n scale_logarithmic._defaults = _defaults$2;\n var valueOrDefault$b = helpers$1.valueOrDefault;\n var valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\n var resolve$7 = helpers$1.options.resolve;\n var defaultConfig$3 = {\n display: true,\n // Boolean - Whether to animate scaling the chart from the centre\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n color: 'rgba(0, 0, 0, 0.1)',\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n gridLines: {\n circular: false\n },\n // label settings\n ticks: {\n // Boolean - Show a backdrop to the scale label\n showLabelBackdrop: true,\n // String - The colour of the label backdrop\n backdropColor: 'rgba(255,255,255,0.75)',\n // Number - The backdrop padding above & below the label in pixels\n backdropPaddingY: 2,\n // Number - The backdrop padding to the side of the label in pixels\n backdropPaddingX: 2,\n callback: core_ticks.formatters.linear\n },\n pointLabels: {\n // Boolean - if true, show point labels\n display: true,\n // Number - Point label font size in pixels\n fontSize: 10,\n // Function - Used to convert point labels\n callback: function callback(label) {\n return label;\n }\n }\n };\n\n function getValueCount(scale) {\n var opts = scale.options;\n return opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;\n }\n\n function getTickBackdropHeight(opts) {\n var tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n return valueOrDefault$b(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\n }\n\n return 0;\n }\n\n function measureLabelSize(ctx, lineHeight, label) {\n if (helpers$1.isArray(label)) {\n return {\n w: helpers$1.longestText(ctx, ctx.font, label),\n h: label.length * lineHeight\n };\n }\n\n return {\n w: ctx.measureText(label).width,\n h: lineHeight\n };\n }\n\n function determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n\n return {\n start: pos,\n end: pos + size\n };\n }\n /**\n * Helper function to fit a radial linear scale with point labels\n */\n\n\n function fitWithPointLabels(scale) {\n // Right, this is really confusing and there is a lot of maths going on here\n // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n //\n // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n //\n // Solution:\n //\n // We assume the radius of the polygon is half the size of the canvas at first\n // at each index we check if the text overlaps.\n //\n // Where it does, we store that angle and that index.\n //\n // After finding the largest index and angle we calculate how much we need to remove\n // from the shape radius to move the point inwards by that x.\n //\n // We average the left and right distances to get the maximum shape radius that can fit in the box\n // along with labels.\n //\n // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n // on each side, removing that from the size, halving it and adding the left x protrusion width.\n //\n // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n // and position it in the most space efficient manner\n //\n // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n var plFont = helpers$1.options._parseFont(scale.options.pointLabels); // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n\n\n var furthestLimits = {\n l: 0,\n r: scale.width,\n t: 0,\n b: scale.height - scale.paddingTop\n };\n var furthestAngles = {};\n var i, textSize, pointPosition;\n scale.ctx.font = plFont.string;\n scale._pointLabelSizes = [];\n var valueCount = getValueCount(scale);\n\n for (i = 0; i < valueCount; i++) {\n pointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\n textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i] || '');\n scale._pointLabelSizes[i] = textSize; // Add quarter circle to make degree 0 mean top of circle\n\n var angleRadians = scale.getIndexAngle(i);\n var angle = helpers$1.toDegrees(angleRadians) % 360;\n var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n if (hLimits.start < furthestLimits.l) {\n furthestLimits.l = hLimits.start;\n furthestAngles.l = angleRadians;\n }\n\n if (hLimits.end > furthestLimits.r) {\n furthestLimits.r = hLimits.end;\n furthestAngles.r = angleRadians;\n }\n\n if (vLimits.start < furthestLimits.t) {\n furthestLimits.t = vLimits.start;\n furthestAngles.t = angleRadians;\n }\n\n if (vLimits.end > furthestLimits.b) {\n furthestLimits.b = vLimits.end;\n furthestAngles.b = angleRadians;\n }\n }\n\n scale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n }\n\n function getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n }\n\n function fillText(ctx, text, position, lineHeight) {\n var y = position.y + lineHeight / 2;\n var i, ilen;\n\n if (helpers$1.isArray(text)) {\n for (i = 0, ilen = text.length; i < ilen; ++i) {\n ctx.fillText(text[i], position.x, y);\n y += lineHeight;\n }\n } else {\n ctx.fillText(text, position.x, y);\n }\n }\n\n function adjustPointPositionForLabelHeight(angle, textSize, position) {\n if (angle === 90 || angle === 270) {\n position.y -= textSize.h / 2;\n } else if (angle > 270 || angle < 90) {\n position.y -= textSize.h;\n }\n }\n\n function drawPointLabels(scale) {\n var ctx = scale.ctx;\n var opts = scale.options;\n var angleLineOpts = opts.angleLines;\n var gridLineOpts = opts.gridLines;\n var pointLabelOpts = opts.pointLabels;\n var lineWidth = valueOrDefault$b(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\n var lineColor = valueOrDefault$b(angleLineOpts.color, gridLineOpts.color);\n var tickBackdropHeight = getTickBackdropHeight(opts);\n ctx.save();\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = lineColor;\n\n if (ctx.setLineDash) {\n ctx.setLineDash(resolve$7([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\n ctx.lineDashOffset = resolve$7([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\n }\n\n var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max); // Point Label Font\n\n var plFont = helpers$1.options._parseFont(pointLabelOpts);\n\n ctx.font = plFont.string;\n ctx.textBaseline = 'middle';\n\n for (var i = getValueCount(scale) - 1; i >= 0; i--) {\n if (angleLineOpts.display && lineWidth && lineColor) {\n var outerPosition = scale.getPointPosition(i, outerDistance);\n ctx.beginPath();\n ctx.moveTo(scale.xCenter, scale.yCenter);\n ctx.lineTo(outerPosition.x, outerPosition.y);\n ctx.stroke();\n }\n\n if (pointLabelOpts.display) {\n // Extra pixels out for some label spacing\n var extra = i === 0 ? tickBackdropHeight / 2 : 0;\n var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5); // Keep this in loop since we may support array properties here\n\n var pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\n ctx.fillStyle = pointLabelFontColor;\n var angleRadians = scale.getIndexAngle(i);\n var angle = helpers$1.toDegrees(angleRadians);\n ctx.textAlign = getTextAlignForAngle(angle);\n adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.lineHeight);\n }\n }\n\n ctx.restore();\n }\n\n function drawRadiusLine(scale, gridLineOpts, radius, index) {\n var ctx = scale.ctx;\n var circular = gridLineOpts.circular;\n var valueCount = getValueCount(scale);\n var lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\n var lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\n var pointPosition;\n\n if (!circular && !valueCount || !lineColor || !lineWidth) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = lineColor;\n ctx.lineWidth = lineWidth;\n\n if (ctx.setLineDash) {\n ctx.setLineDash(gridLineOpts.borderDash || []);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\n }\n\n ctx.beginPath();\n\n if (circular) {\n // Draw circular arcs between the points\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n } else {\n // Draw straight lines connecting each index\n pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (var i = 1; i < valueCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n\n function numberOrZero(param) {\n return helpers$1.isNumber(param) ? param : 0;\n }\n\n var scale_radialLinear = scale_linearbase.extend({\n setDimensions: function setDimensions() {\n var me = this; // Set the unconstrained dimension before label rotation\n\n me.width = me.maxWidth;\n me.height = me.maxHeight;\n me.paddingTop = getTickBackdropHeight(me.options) / 2;\n me.xCenter = Math.floor(me.width / 2);\n me.yCenter = Math.floor((me.height - me.paddingTop) / 2);\n me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\n },\n determineDataLimits: function determineDataLimits() {\n var me = this;\n var chart = me.chart;\n var min = Number.POSITIVE_INFINITY;\n var max = Number.NEGATIVE_INFINITY;\n helpers$1.each(chart.data.datasets, function (dataset, datasetIndex) {\n if (chart.isDatasetVisible(datasetIndex)) {\n var meta = chart.getDatasetMeta(datasetIndex);\n helpers$1.each(dataset.data, function (rawValue, index) {\n var value = +me.getRightValue(rawValue);\n\n if (isNaN(value) || meta.data[index].hidden) {\n return;\n }\n\n min = Math.min(value, min);\n max = Math.max(value, max);\n });\n }\n });\n me.min = min === Number.POSITIVE_INFINITY ? 0 : min;\n me.max = max === Number.NEGATIVE_INFINITY ? 0 : max; // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n\n me.handleTickRangeOptions();\n },\n // Returns the maximum number of ticks based on the scale dimension\n _computeTickLimit: function _computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n },\n convertTicksToLabels: function convertTicksToLabels() {\n var me = this;\n scale_linearbase.prototype.convertTicksToLabels.call(me); // Point labels\n\n me.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n },\n getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n },\n fit: function fit() {\n var me = this;\n var opts = me.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(me);\n } else {\n me.setCenterPoint(0, 0, 0, 0);\n }\n },\n\n /**\n * Set radius reductions and determine new radius and center point\n * @private\n */\n setReductions: function setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {\n var me = this;\n var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\n radiusReductionLeft = numberOrZero(radiusReductionLeft);\n radiusReductionRight = numberOrZero(radiusReductionRight);\n radiusReductionTop = numberOrZero(radiusReductionTop);\n radiusReductionBottom = numberOrZero(radiusReductionBottom);\n me.drawingArea = Math.min(Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n },\n setCenterPoint: function setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n var me = this;\n var maxRight = me.width - rightMovement - me.drawingArea;\n var maxLeft = leftMovement + me.drawingArea;\n var maxTop = topMovement + me.drawingArea;\n var maxBottom = me.height - me.paddingTop - bottomMovement - me.drawingArea;\n me.xCenter = Math.floor((maxLeft + maxRight) / 2 + me.left);\n me.yCenter = Math.floor((maxTop + maxBottom) / 2 + me.top + me.paddingTop);\n },\n getIndexAngle: function getIndexAngle(index) {\n var angleMultiplier = Math.PI * 2 / getValueCount(this);\n var startAngle = this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0;\n var startAngleRadians = startAngle * Math.PI * 2 / 360; // Start from the top instead of right, so remove a quarter of the circle\n\n return index * angleMultiplier + startAngleRadians;\n },\n getDistanceFromCenterForValue: function getDistanceFromCenterForValue(value) {\n var me = this;\n\n if (value === null) {\n return 0; // null always in center\n } // Take into account half font size + the yPadding of the top value\n\n\n var scalingFactor = me.drawingArea / (me.max - me.min);\n\n if (me.options.ticks.reverse) {\n return (me.max - value) * scalingFactor;\n }\n\n return (value - me.min) * scalingFactor;\n },\n getPointPosition: function getPointPosition(index, distanceFromCenter) {\n var me = this;\n var thisAngle = me.getIndexAngle(index) - Math.PI / 2;\n return {\n x: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\n y: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\n };\n },\n getPointPositionForValue: function getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n },\n getBasePosition: function getBasePosition() {\n var me = this;\n var min = me.min;\n var max = me.max;\n return me.getPointPositionForValue(0, me.beginAtZero ? 0 : min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0);\n },\n draw: function draw() {\n var me = this;\n var opts = me.options;\n var gridLineOpts = opts.gridLines;\n var tickOpts = opts.ticks;\n\n if (opts.display) {\n var ctx = me.ctx;\n var startAngle = this.getIndexAngle(0);\n\n var tickFont = helpers$1.options._parseFont(tickOpts);\n\n if (opts.angleLines.display || opts.pointLabels.display) {\n drawPointLabels(me);\n }\n\n helpers$1.each(me.ticks, function (label, index) {\n // Don't draw a centre value (if it is minimum)\n if (index > 0 || tickOpts.reverse) {\n var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]); // Draw circular lines around the scale\n\n if (gridLineOpts.display && index !== 0) {\n drawRadiusLine(me, gridLineOpts, yCenterOffset, index);\n }\n\n if (tickOpts.display) {\n var tickFontColor = valueOrDefault$b(tickOpts.fontColor, core_defaults.global.defaultFontColor);\n ctx.font = tickFont.string;\n ctx.save();\n ctx.translate(me.xCenter, me.yCenter);\n ctx.rotate(startAngle);\n\n if (tickOpts.showLabelBackdrop) {\n var labelWidth = ctx.measureText(label).width;\n ctx.fillStyle = tickOpts.backdropColor;\n ctx.fillRect(-labelWidth / 2 - tickOpts.backdropPaddingX, -yCenterOffset - tickFont.size / 2 - tickOpts.backdropPaddingY, labelWidth + tickOpts.backdropPaddingX * 2, tickFont.size + tickOpts.backdropPaddingY * 2);\n }\n\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillStyle = tickFontColor;\n ctx.fillText(label, 0, -yCenterOffset);\n ctx.restore();\n }\n }\n });\n }\n }\n }); // INTERNAL: static default options, registered in src/index.js\n\n var _defaults$3 = defaultConfig$3;\n scale_radialLinear._defaults = _defaults$3;\n var valueOrDefault$c = helpers$1.valueOrDefault; // Integer constants are from the ES6 spec.\n\n var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n var MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n var INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n },\n second: {\n common: true,\n size: 1000,\n steps: [1, 2, 5, 10, 15, 30]\n },\n minute: {\n common: true,\n size: 60000,\n steps: [1, 2, 5, 10, 15, 30]\n },\n hour: {\n common: true,\n size: 3600000,\n steps: [1, 2, 3, 6, 12]\n },\n day: {\n common: true,\n size: 86400000,\n steps: [1, 2, 5]\n },\n week: {\n common: false,\n size: 604800000,\n steps: [1, 2, 3, 4]\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: [1, 2, 3]\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: [1, 2, 3, 4]\n },\n year: {\n common: true,\n size: 3.154e10\n }\n };\n var UNITS = Object.keys(INTERVALS);\n\n function sorter(a, b) {\n return a - b;\n }\n\n function arrayUnique(items) {\n var hash = {};\n var out = [];\n var i, ilen, item;\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n\n if (!hash[item]) {\n hash[item] = true;\n out.push(item);\n }\n }\n\n return out;\n }\n /**\n * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n * extremity (left + width or top + height). Note that it would be more optimized to directly\n * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n *\n * @param {number[]} timestamps - timestamps sorted from lowest to highest.\n * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min\n * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\n * If 'series', timestamps will be positioned at the same distance from each other. In this\n * case, only timestamps that break the time linearity are registered, meaning that in the\n * best case, all timestamps are linear, the table contains only min and max.\n */\n\n\n function buildLookupTable(timestamps, min, max, distribution) {\n if (distribution === 'linear' || !timestamps.length) {\n return [{\n time: min,\n pos: 0\n }, {\n time: max,\n pos: 1\n }];\n }\n\n var table = [];\n var items = [min];\n var i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n\n if (curr > min && curr < max) {\n items.push(curr);\n }\n }\n\n items.push(max);\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i]; // only add points that breaks the scale linearity\n\n if (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n\n return table;\n } // @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\n\n\n function lookup(table, key, value) {\n var lo = 0;\n var hi = table.length - 1;\n var mid, i0, i1;\n\n while (lo >= 0 && lo <= hi) {\n mid = lo + hi >> 1;\n i0 = table[mid - 1] || null;\n i1 = table[mid];\n\n if (!i0) {\n // given value is outside table (before first item)\n return {\n lo: null,\n hi: i1\n };\n } else if (i1[key] < value) {\n lo = mid + 1;\n } else if (i0[key] > value) {\n hi = mid - 1;\n } else {\n return {\n lo: i0,\n hi: i1\n };\n }\n } // given value is outside table (after last item)\n\n\n return {\n lo: i1,\n hi: null\n };\n }\n /**\n * Linearly interpolates the given source `value` using the table items `skey` values and\n * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\n * returns the position for a timestamp equal to 42. If value is out of bounds, values at\n * index [0, 1] or [n - 1, n] are used for the interpolation.\n */\n\n\n function interpolate$1(table, skey, sval, tkey) {\n var range = lookup(table, skey, sval); // Note: the lookup table ALWAYS contains at least 2 items (min and max)\n\n var prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n var next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n var span = next[skey] - prev[skey];\n var ratio = span ? (sval - prev[skey]) / span : 0;\n var offset = (next[tkey] - prev[tkey]) * ratio;\n return prev[tkey] + offset;\n }\n\n function toTimestamp(scale, input) {\n var adapter = scale._adapter;\n var options = scale.options.time;\n var parser = options.parser;\n var format = parser || options.format;\n var value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n } // Only parse if its not a timestamp already\n\n\n if (!helpers$1.isFinite(value)) {\n value = typeof format === 'string' ? adapter.parse(value, format) : adapter.parse(value);\n }\n\n if (value !== null) {\n return +value;\n } // Labels are in an incompatible format and no `parser` has been provided.\n // The user might still use the deprecated `format` option for parsing.\n\n\n if (!parser && typeof format === 'function') {\n value = format(input); // `format` could return something else than a timestamp, if so, parse it\n\n if (!helpers$1.isFinite(value)) {\n value = adapter.parse(value);\n }\n }\n\n return value;\n }\n\n function parse(scale, input) {\n if (helpers$1.isNullOrUndef(input)) {\n return null;\n }\n\n var options = scale.options.time;\n var value = toTimestamp(scale, scale.getRightValue(input));\n\n if (value === null) {\n return value;\n }\n\n if (options.round) {\n value = +scale._adapter.startOf(value, options.round);\n }\n\n return value;\n }\n /**\n * Returns the number of unit to skip to be able to display up to `capacity` number of ticks\n * in `unit` for the given `min` / `max` range and respecting the interval steps constraints.\n */\n\n\n function determineStepSize(min, max, unit, capacity) {\n var range = max - min;\n var interval = INTERVALS[unit];\n var milliseconds = interval.size;\n var steps = interval.steps;\n var i, ilen, factor;\n\n if (!steps) {\n return Math.ceil(range / (capacity * milliseconds));\n }\n\n for (i = 0, ilen = steps.length; i < ilen; ++i) {\n factor = steps[i];\n\n if (Math.ceil(range / (milliseconds * factor)) <= capacity) {\n break;\n }\n }\n\n return factor;\n }\n /**\n * Figures out what unit results in an appropriate number of auto-generated ticks\n */\n\n\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n var ilen = UNITS.length;\n var i, interval, factor;\n\n for (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n interval = INTERVALS[UNITS[i]];\n factor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n }\n /**\n * Figures out what unit to format a set of ticks with\n */\n\n\n function determineUnitForFormatting(scale, ticks, minUnit, min, max) {\n var ilen = UNITS.length;\n var i, unit;\n\n for (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {\n unit = UNITS[i];\n\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n }\n\n function determineMajorUnit(unit) {\n for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n }\n /**\n * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n * `minor` unit, aligned on the `major` unit and using the given scale time `options`.\n * Important: this method can return ticks outside the min and max range, it's the\n * responsibility of the calling code to clamp values if needed.\n */\n\n\n function generate(scale, min, max, capacity) {\n var adapter = scale._adapter;\n var options = scale.options;\n var timeOpts = options.time;\n var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n var major = determineMajorUnit(minor);\n var stepSize = valueOrDefault$c(timeOpts.stepSize, timeOpts.unitStepSize);\n var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n var majorTicksEnabled = options.ticks.major.enabled;\n var interval = INTERVALS[minor];\n var first = min;\n var last = max;\n var ticks = [];\n var time;\n\n if (!stepSize) {\n stepSize = determineStepSize(min, max, minor, capacity);\n } // For 'week' unit, handle the first day of week option\n\n\n if (weekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n last = +adapter.startOf(last, 'isoWeek', weekday);\n } // Align first/last ticks on unit\n\n\n first = +adapter.startOf(first, weekday ? 'day' : minor);\n last = +adapter.startOf(last, weekday ? 'day' : minor); // Make sure that the last tick include max\n\n if (last < max) {\n last = +adapter.add(last, 1, minor);\n }\n\n time = first;\n\n if (majorTicksEnabled && major && !weekday && !timeOpts.round) {\n // Align the first tick on the previous `minor` unit aligned on the `major` unit:\n // we first aligned time on the previous `major` unit then add the number of full\n // stepSize there is between first and the previous major time.\n time = +adapter.startOf(time, major);\n time = +adapter.add(time, ~~((first - time) / (interval.size * stepSize)) * stepSize, minor);\n }\n\n for (; time < last; time = +adapter.add(time, stepSize, minor)) {\n ticks.push(+time);\n }\n\n ticks.push(+time);\n return ticks;\n }\n /**\n * Returns the start and end offsets from edges in the form of {start, end}\n * where each value is a relative width to the scale and ranges between 0 and 1.\n * They add extra margins on the both sides by scaling down the original scale.\n * Offsets are added when the `offset` option is true.\n */\n\n\n function computeOffsets(table, ticks, min, max, options) {\n var start = 0;\n var end = 0;\n var first, last;\n\n if (options.offset && ticks.length) {\n if (!options.time.min) {\n first = interpolate$1(table, 'time', ticks[0], 'pos');\n\n if (ticks.length === 1) {\n start = 1 - first;\n } else {\n start = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\n }\n }\n\n if (!options.time.max) {\n last = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\n\n if (ticks.length === 1) {\n end = last;\n } else {\n end = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\n }\n }\n }\n\n return {\n start: start,\n end: end\n };\n }\n\n function ticksFromTimestamps(scale, values, majorUnit) {\n var ticks = [];\n var i, ilen, value, major;\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n value = values[i];\n major = majorUnit ? value === +scale._adapter.startOf(value, majorUnit) : false;\n ticks.push({\n value: value,\n major: major\n });\n }\n\n return ticks;\n }\n\n var defaultConfig$4 = {\n position: 'bottom',\n\n /**\n * Data distribution along the scale:\n * - 'linear': data are spread according to their time (distances can vary),\n * - 'series': data are spread at the same distance from each other.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n distribution: 'linear',\n\n /**\n * Scale boundary strategy (bypassed by min/max time options)\n * - `data`: make sure data are fully visible, ticks outside are removed\n * - `ticks`: make sure ticks are fully visible, data outside are truncated\n * @see https://github.com/chartjs/Chart.js/pull/4556\n * @since 2.7.0\n */\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n format: false,\n // DEPRECATED false == date objects, moment object, callback or a pattern string from https://momentjs.com/docs/#/parsing/string-format/\n unit: false,\n // false == automatic or override with week, month, year, etc.\n round: false,\n // none, or override with week, month, year, etc.\n displayFormat: false,\n // DEPRECATED\n isoWeekday: false,\n // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n autoSkip: false,\n\n /**\n * Ticks generation input values:\n * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n * - 'labels': generates ticks from user given `data.labels` values ONLY.\n * @see https://github.com/chartjs/Chart.js/pull/4507\n * @since 2.7.0\n */\n source: 'auto',\n major: {\n enabled: false\n }\n }\n };\n var scale_time = core_scale.extend({\n initialize: function initialize() {\n this.mergeTicksOptions();\n core_scale.prototype.initialize.call(this);\n },\n update: function update() {\n var me = this;\n var options = me.options;\n var time = options.time || (options.time = {});\n var adapter = me._adapter = new core_adapters._date(options.adapters.date); // DEPRECATIONS: output a message only one time per update\n\n if (time.format) {\n console.warn('options.time.format is deprecated and replaced by options.time.parser.');\n } // Backward compatibility: before introducing adapter, `displayFormats` was\n // supposed to contain *all* unit/string pairs but this can't be resolved\n // when loading the scale (adapters are loaded afterward), so let's populate\n // missing formats on update\n\n\n helpers$1.mergeIf(time.displayFormats, adapter.formats());\n return core_scale.prototype.update.apply(me, arguments);\n },\n\n /**\n * Allows data to be referenced via 't' attribute\n */\n getRightValue: function getRightValue(rawValue) {\n if (rawValue && rawValue.t !== undefined) {\n rawValue = rawValue.t;\n }\n\n return core_scale.prototype.getRightValue.call(this, rawValue);\n },\n determineDataLimits: function determineDataLimits() {\n var me = this;\n var chart = me.chart;\n var adapter = me._adapter;\n var timeOpts = me.options.time;\n var unit = timeOpts.unit || 'day';\n var min = MAX_INTEGER;\n var max = MIN_INTEGER;\n var timestamps = [];\n var datasets = [];\n var labels = [];\n var i, j, ilen, jlen, data, timestamp;\n var dataLabels = chart.data.labels || []; // Convert labels to timestamps\n\n for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\n labels.push(parse(me, dataLabels[i]));\n } // Convert data to timestamps\n\n\n for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n if (chart.isDatasetVisible(i)) {\n data = chart.data.datasets[i].data; // Let's consider that all data have the same format.\n\n if (helpers$1.isObject(data[0])) {\n datasets[i] = [];\n\n for (j = 0, jlen = data.length; j < jlen; ++j) {\n timestamp = parse(me, data[j]);\n timestamps.push(timestamp);\n datasets[i][j] = timestamp;\n }\n } else {\n for (j = 0, jlen = labels.length; j < jlen; ++j) {\n timestamps.push(labels[j]);\n }\n\n datasets[i] = labels.slice(0);\n }\n } else {\n datasets[i] = [];\n }\n }\n\n if (labels.length) {\n // Sort labels **after** data have been converted\n labels = arrayUnique(labels).sort(sorter);\n min = Math.min(min, labels[0]);\n max = Math.max(max, labels[labels.length - 1]);\n }\n\n if (timestamps.length) {\n timestamps = arrayUnique(timestamps).sort(sorter);\n min = Math.min(min, timestamps[0]);\n max = Math.max(max, timestamps[timestamps.length - 1]);\n }\n\n min = parse(me, timeOpts.min) || min;\n max = parse(me, timeOpts.max) || max; // In case there is no valid min/max, set limits based on unit time option\n\n min = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\n max = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max; // Make sure that max is strictly higher than min (required by the lookup table)\n\n me.min = Math.min(min, max);\n me.max = Math.max(min + 1, max); // PRIVATE\n\n me._horizontal = me.isHorizontal();\n me._table = [];\n me._timestamps = {\n data: timestamps,\n datasets: datasets,\n labels: labels\n };\n },\n buildTicks: function buildTicks() {\n var me = this;\n var min = me.min;\n var max = me.max;\n var options = me.options;\n var timeOpts = options.time;\n var timestamps = [];\n var ticks = [];\n var i, ilen, timestamp;\n\n switch (options.ticks.source) {\n case 'data':\n timestamps = me._timestamps.data;\n break;\n\n case 'labels':\n timestamps = me._timestamps.labels;\n break;\n\n case 'auto':\n default:\n timestamps = generate(me, min, max, me.getLabelCapacity(min), options);\n }\n\n if (options.bounds === 'ticks' && timestamps.length) {\n min = timestamps[0];\n max = timestamps[timestamps.length - 1];\n } // Enforce limits with user min/max options\n\n\n min = parse(me, timeOpts.min) || min;\n max = parse(me, timeOpts.max) || max; // Remove ticks outside the min/max range\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n timestamp = timestamps[i];\n\n if (timestamp >= min && timestamp <= max) {\n ticks.push(timestamp);\n }\n }\n\n me.min = min;\n me.max = max; // PRIVATE\n\n me._unit = timeOpts.unit || determineUnitForFormatting(me, ticks, timeOpts.minUnit, me.min, me.max);\n me._majorUnit = determineMajorUnit(me._unit);\n me._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);\n me._offsets = computeOffsets(me._table, ticks, min, max, options);\n\n if (options.ticks.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(me, ticks, me._majorUnit);\n },\n getLabelForIndex: function getLabelForIndex(index, datasetIndex) {\n var me = this;\n var adapter = me._adapter;\n var data = me.chart.data;\n var timeOpts = me.options.time;\n var label = data.labels && index < data.labels.length ? data.labels[index] : '';\n var value = data.datasets[datasetIndex].data[index];\n\n if (helpers$1.isObject(value)) {\n label = me.getRightValue(value);\n }\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\n }\n\n if (typeof label === 'string') {\n return label;\n }\n\n return adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\n },\n\n /**\n * Function to format an individual tick mark\n * @private\n */\n tickFormatFunction: function tickFormatFunction(time, index, ticks, format) {\n var me = this;\n var adapter = me._adapter;\n var options = me.options;\n var formats = options.time.displayFormats;\n var minorFormat = formats[me._unit];\n var majorUnit = me._majorUnit;\n var majorFormat = formats[majorUnit];\n var majorTime = +adapter.startOf(time, majorUnit);\n var majorTickOpts = options.ticks.major;\n var major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;\n var label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\n var tickOpts = major ? majorTickOpts : options.ticks.minor;\n var formatter = valueOrDefault$c(tickOpts.callback, tickOpts.userCallback);\n return formatter ? formatter(label, index, ticks) : label;\n },\n convertTicksToLabels: function convertTicksToLabels(ticks) {\n var labels = [];\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n labels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\n }\n\n return labels;\n },\n\n /**\n * @private\n */\n getPixelForOffset: function getPixelForOffset(time) {\n var me = this;\n var isReverse = me.options.ticks.reverse;\n var size = me._horizontal ? me.width : me.height;\n var start = me._horizontal ? isReverse ? me.right : me.left : isReverse ? me.bottom : me.top;\n var pos = interpolate$1(me._table, 'time', time, 'pos');\n var offset = size * (me._offsets.start + pos) / (me._offsets.start + 1 + me._offsets.end);\n return isReverse ? start - offset : start + offset;\n },\n getPixelForValue: function getPixelForValue(value, index, datasetIndex) {\n var me = this;\n var time = null;\n\n if (index !== undefined && datasetIndex !== undefined) {\n time = me._timestamps.datasets[datasetIndex][index];\n }\n\n if (time === null) {\n time = parse(me, value);\n }\n\n if (time !== null) {\n return me.getPixelForOffset(time);\n }\n },\n getPixelForTick: function getPixelForTick(index) {\n var ticks = this.getTicks();\n return index >= 0 && index < ticks.length ? this.getPixelForOffset(ticks[index].value) : null;\n },\n getValueForPixel: function getValueForPixel(pixel) {\n var me = this;\n var size = me._horizontal ? me.width : me.height;\n var start = me._horizontal ? me.left : me.top;\n var pos = (size ? (pixel - start) / size : 0) * (me._offsets.start + 1 + me._offsets.start) - me._offsets.end;\n var time = interpolate$1(me._table, 'pos', pos, 'time'); // DEPRECATION, we should return time directly\n\n return me._adapter._create(time);\n },\n\n /**\n * Crude approximation of what the label width might be\n * @private\n */\n getLabelWidth: function getLabelWidth(label) {\n var me = this;\n var ticksOpts = me.options.ticks;\n var tickLabelWidth = me.ctx.measureText(label).width;\n var angle = helpers$1.toRadians(ticksOpts.maxRotation);\n var cosRotation = Math.cos(angle);\n var sinRotation = Math.sin(angle);\n var tickFontSize = valueOrDefault$c(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\n return tickLabelWidth * cosRotation + tickFontSize * sinRotation;\n },\n\n /**\n * @private\n */\n getLabelCapacity: function getLabelCapacity(exampleTime) {\n var me = this; // pick the longest format (milliseconds) for guestimation\n\n var format = me.options.time.displayFormats.millisecond;\n var exampleLabel = me.tickFormatFunction(exampleTime, 0, [], format);\n var tickLabelWidth = me.getLabelWidth(exampleLabel);\n var innerWidth = me.isHorizontal() ? me.width : me.height;\n var capacity = Math.floor(innerWidth / tickLabelWidth);\n return capacity > 0 ? capacity : 1;\n }\n }); // INTERNAL: static default options, registered in src/index.js\n\n var _defaults$4 = defaultConfig$4;\n scale_time._defaults = _defaults$4;\n var scales = {\n category: scale_category,\n linear: scale_linear,\n logarithmic: scale_logarithmic,\n radialLinear: scale_radialLinear,\n time: scale_time\n };\n var FORMATS = {\n datetime: 'MMM D, YYYY, h:mm:ss a',\n millisecond: 'h:mm:ss.SSS a',\n second: 'h:mm:ss a',\n minute: 'h:mm a',\n hour: 'hA',\n day: 'MMM D',\n week: 'll',\n month: 'MMM YYYY',\n quarter: '[Q]Q - YYYY',\n year: 'YYYY'\n };\n\n core_adapters._date.override(typeof moment === 'function' ? {\n _id: 'moment',\n // DEBUG ONLY\n formats: function formats() {\n return FORMATS;\n },\n parse: function parse(value, format) {\n if (typeof value === 'string' && typeof format === 'string') {\n value = moment(value, format);\n } else if (!(value instanceof moment)) {\n value = moment(value);\n }\n\n return value.isValid() ? value.valueOf() : null;\n },\n format: function format(time, _format) {\n return moment(time).format(_format);\n },\n add: function add(time, amount, unit) {\n return moment(time).add(amount, unit).valueOf();\n },\n diff: function diff(max, min, unit) {\n return moment.duration(moment(max).diff(moment(min))).as(unit);\n },\n startOf: function startOf(time, unit, weekday) {\n time = moment(time);\n\n if (unit === 'isoWeek') {\n return time.isoWeekday(weekday).valueOf();\n }\n\n return time.startOf(unit).valueOf();\n },\n endOf: function endOf(time, unit) {\n return moment(time).endOf(unit).valueOf();\n },\n // DEPRECATIONS\n\n /**\n * Provided for backward compatibility with scale.getValueForPixel().\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\n _create: function _create(time) {\n return moment(time);\n }\n } : {});\n\n core_defaults._set('global', {\n plugins: {\n filler: {\n propagate: true\n }\n }\n });\n\n var mappers = {\n dataset: function dataset(source) {\n var index = source.fill;\n var chart = source.chart;\n var meta = chart.getDatasetMeta(index);\n var visible = meta && chart.isDatasetVisible(index);\n var points = visible && meta.dataset._children || [];\n var length = points.length || 0;\n return !length ? null : function (point, i) {\n return i < length && points[i]._view || null;\n };\n },\n boundary: function boundary(source) {\n var boundary = source.boundary;\n var x = boundary ? boundary.x : null;\n var y = boundary ? boundary.y : null;\n return function (point) {\n return {\n x: x === null ? point.x : x,\n y: y === null ? point.y : y\n };\n };\n }\n }; // @todo if (fill[0] === '#')\n\n function decodeFill(el, index, count) {\n var model = el._model || {};\n var fill = model.fill;\n var target;\n\n if (fill === undefined) {\n fill = !!model.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n\n target = parseFloat(fill, 10);\n\n if (isFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n }\n\n switch (fill) {\n // compatibility\n case 'bottom':\n return 'start';\n\n case 'top':\n return 'end';\n\n case 'zero':\n return 'origin';\n // supported boundaries\n\n case 'origin':\n case 'start':\n case 'end':\n return fill;\n // invalid fill values\n\n default:\n return false;\n }\n }\n\n function computeBoundary(source) {\n var model = source.el._model || {};\n var scale = source.el._scale || {};\n var fill = source.fill;\n var target = null;\n var horizontal;\n\n if (isFinite(fill)) {\n return null;\n } // Backward compatibility: until v3, we still need to support boundary values set on\n // the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n // controllers might still use it (e.g. the Smith chart).\n\n\n if (fill === 'start') {\n target = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n } else if (fill === 'end') {\n target = model.scaleTop === undefined ? scale.top : model.scaleTop;\n } else if (model.scaleZero !== undefined) {\n target = model.scaleZero;\n } else if (scale.getBasePosition) {\n target = scale.getBasePosition();\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n\n if (target !== undefined && target !== null) {\n if (target.x !== undefined && target.y !== undefined) {\n return target;\n }\n\n if (helpers$1.isFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n }\n\n return null;\n }\n\n function resolveTarget(sources, index, propagate) {\n var source = sources[index];\n var fill = source.fill;\n var visited = [index];\n var target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n }\n\n function createMapper(source) {\n var fill = source.fill;\n var type = 'dataset';\n\n if (fill === false) {\n return null;\n }\n\n if (!isFinite(fill)) {\n type = 'boundary';\n }\n\n return mappers[type](source);\n }\n\n function isDrawable(point) {\n return point && !point.skip;\n }\n\n function drawArea(ctx, curve0, curve1, len0, len1) {\n var i;\n\n if (!len0 || !len1) {\n return;\n } // building first area curve (normal)\n\n\n ctx.moveTo(curve0[0].x, curve0[0].y);\n\n for (i = 1; i < len0; ++i) {\n helpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n } // joining the two area curves\n\n\n ctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y); // building opposite area curve (reverse)\n\n for (i = len1 - 1; i > 0; --i) {\n helpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n }\n }\n\n function doFill(ctx, points, mapper, view, color, loop) {\n var count = points.length;\n var span = view.spanGaps;\n var curve0 = [];\n var curve1 = [];\n var len0 = 0;\n var len1 = 0;\n var i, ilen, index, p0, p1, d0, d1;\n ctx.beginPath();\n\n for (i = 0, ilen = count + !!loop; i < ilen; ++i) {\n index = i % count;\n p0 = points[index]._view;\n p1 = mapper(p0, index, view);\n d0 = isDrawable(p0);\n d1 = isDrawable(p1);\n\n if (d0 && d1) {\n len0 = curve0.push(p0);\n len1 = curve1.push(p1);\n } else if (len0 && len1) {\n if (!span) {\n drawArea(ctx, curve0, curve1, len0, len1);\n len0 = len1 = 0;\n curve0 = [];\n curve1 = [];\n } else {\n if (d0) {\n curve0.push(p0);\n }\n\n if (d1) {\n curve1.push(p1);\n }\n }\n }\n }\n\n drawArea(ctx, curve0, curve1, len0, len1);\n ctx.closePath();\n ctx.fillStyle = color;\n ctx.fill();\n }\n\n var plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate: function afterDatasetsUpdate(chart, options) {\n var count = (chart.data.datasets || []).length;\n var propagate = options.propagate;\n var sources = [];\n var meta, i, el, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n el = meta.dataset;\n source = null;\n\n if (el && el._model && el instanceof elements.Line) {\n source = {\n visible: chart.isDatasetVisible(i),\n fill: decodeFill(el, i, count),\n chart: chart,\n el: el\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n\n if (!source) {\n continue;\n }\n\n source.fill = resolveTarget(sources, i, propagate);\n source.boundary = computeBoundary(source);\n source.mapper = createMapper(source);\n }\n },\n beforeDatasetDraw: function beforeDatasetDraw(chart, args) {\n var meta = args.meta.$filler;\n\n if (!meta) {\n return;\n }\n\n var ctx = chart.ctx;\n var el = meta.el;\n var view = el._view;\n var points = el._children || [];\n var mapper = meta.mapper;\n var color = view.backgroundColor || core_defaults.global.defaultColor;\n\n if (mapper && color && points.length) {\n helpers$1.canvas.clipArea(ctx, chart.chartArea);\n doFill(ctx, points, mapper, view, color, el._loop);\n helpers$1.canvas.unclipArea(ctx);\n }\n }\n };\n var noop$1 = helpers$1.noop;\n var valueOrDefault$d = helpers$1.valueOrDefault;\n\n core_defaults._set('global', {\n legend: {\n display: true,\n position: 'top',\n fullWidth: true,\n reverse: false,\n weight: 1000,\n // a callback that will handle\n onClick: function onClick(e, legendItem) {\n var index = legendItem.datasetIndex;\n var ci = this.chart;\n var meta = ci.getDatasetMeta(index); // See controller.isDatasetVisible comment\n\n meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null; // We hid a dataset ... rerender the chart\n\n ci.update();\n },\n onHover: null,\n onLeave: null,\n labels: {\n boxWidth: 40,\n padding: 10,\n // Generates labels shown in the legend\n // Valid properties to return:\n // text : text to display\n // fillStyle : fill of coloured box\n // strokeStyle: stroke of coloured box\n // hidden : if this legend item refers to a hidden item\n // lineCap : cap style for line\n // lineDash\n // lineDashOffset :\n // lineJoin :\n // lineWidth :\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n return helpers$1.isArray(data.datasets) ? data.datasets.map(function (dataset, i) {\n return {\n text: dataset.label,\n fillStyle: !helpers$1.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0],\n hidden: !chart.isDatasetVisible(i),\n lineCap: dataset.borderCapStyle,\n lineDash: dataset.borderDash,\n lineDashOffset: dataset.borderDashOffset,\n lineJoin: dataset.borderJoinStyle,\n lineWidth: dataset.borderWidth,\n strokeStyle: dataset.borderColor,\n pointStyle: dataset.pointStyle,\n // Below is extra data used for toggling the datasets\n datasetIndex: i\n };\n }, this) : [];\n }\n }\n },\n legendCallback: function legendCallback(chart) {\n var text = [];\n text.push('<ul class=\"' + chart.id + '-legend\">');\n\n for (var i = 0; i < chart.data.datasets.length; i++) {\n text.push('<li><span style=\"background-color:' + chart.data.datasets[i].backgroundColor + '\"></span>');\n\n if (chart.data.datasets[i].label) {\n text.push(chart.data.datasets[i].label);\n }\n\n text.push('</li>');\n }\n\n text.push('</ul>');\n return text.join('');\n }\n });\n /**\n * Helper function to get the box width based on the usePointStyle option\n * @param {object} labelopts - the label options on the legend\n * @param {number} fontSize - the label font size\n * @return {number} width of the color box area\n */\n\n\n function getBoxWidth(labelOpts, fontSize) {\n return labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ? fontSize : labelOpts.boxWidth;\n }\n /**\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n */\n\n\n var Legend = core_element.extend({\n initialize: function initialize(config) {\n helpers$1.extend(this, config); // Contains hit boxes for each dataset (in dataset order)\n\n this.legendHitBoxes = [];\n /**\n \t * @private\n \t */\n\n this._hoveredItem = null; // Are we in doughnut mode which has a different data type\n\n this.doughnutMode = false;\n },\n // These methods are ordered by lifecycle. Utilities then follow.\n // Any function defined here is inherited by all legend types.\n // Any function can be extended by the legend type\n beforeUpdate: noop$1,\n update: function update(maxWidth, maxHeight, margins) {\n var me = this; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\n me.beforeUpdate(); // Absorb the master measurements\n\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me.margins = margins; // Dimensions\n\n me.beforeSetDimensions();\n me.setDimensions();\n me.afterSetDimensions(); // Labels\n\n me.beforeBuildLabels();\n me.buildLabels();\n me.afterBuildLabels(); // Fit\n\n me.beforeFit();\n me.fit();\n me.afterFit(); //\n\n me.afterUpdate();\n return me.minSize;\n },\n afterUpdate: noop$1,\n //\n beforeSetDimensions: noop$1,\n setDimensions: function setDimensions() {\n var me = this; // Set the unconstrained dimension before label rotation\n\n if (me.isHorizontal()) {\n // Reset position before calculating rotation\n me.width = me.maxWidth;\n me.left = 0;\n me.right = me.width;\n } else {\n me.height = me.maxHeight; // Reset position before calculating rotation\n\n me.top = 0;\n me.bottom = me.height;\n } // Reset padding\n\n\n me.paddingLeft = 0;\n me.paddingTop = 0;\n me.paddingRight = 0;\n me.paddingBottom = 0; // Reset minSize\n\n me.minSize = {\n width: 0,\n height: 0\n };\n },\n afterSetDimensions: noop$1,\n //\n beforeBuildLabels: noop$1,\n buildLabels: function buildLabels() {\n var me = this;\n var labelOpts = me.options.labels || {};\n var legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter(function (item) {\n return labelOpts.filter(item, me.chart.data);\n });\n }\n\n if (me.options.reverse) {\n legendItems.reverse();\n }\n\n me.legendItems = legendItems;\n },\n afterBuildLabels: noop$1,\n //\n beforeFit: noop$1,\n fit: function fit() {\n var me = this;\n var opts = me.options;\n var labelOpts = opts.labels;\n var display = opts.display;\n var ctx = me.ctx;\n\n var labelFont = helpers$1.options._parseFont(labelOpts);\n\n var fontSize = labelFont.size; // Reset hit boxes\n\n var hitboxes = me.legendHitBoxes = [];\n var minSize = me.minSize;\n var isHorizontal = me.isHorizontal();\n\n if (isHorizontal) {\n minSize.width = me.maxWidth; // fill all the width\n\n minSize.height = display ? 10 : 0;\n } else {\n minSize.width = display ? 10 : 0;\n minSize.height = me.maxHeight; // fill all the height\n } // Increase sizes here\n\n\n if (display) {\n ctx.font = labelFont.string;\n\n if (isHorizontal) {\n // Labels\n // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n var lineWidths = me.lineWidths = [0];\n var totalHeight = 0;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'top';\n helpers$1.each(me.legendItems, function (legendItem, i) {\n var boxWidth = getBoxWidth(labelOpts, fontSize);\n var width = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + width + labelOpts.padding > minSize.width) {\n totalHeight += fontSize + labelOpts.padding;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = labelOpts.padding;\n } // Store the hitbox width and height here. Final position will be updated in `draw`\n\n\n hitboxes[i] = {\n left: 0,\n top: 0,\n width: width,\n height: fontSize\n };\n lineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n });\n minSize.height += totalHeight;\n } else {\n var vPadding = labelOpts.padding;\n var columnWidths = me.columnWidths = [];\n var totalWidth = labelOpts.padding;\n var currentColWidth = 0;\n var currentColHeight = 0;\n var itemHeight = fontSize + vPadding;\n helpers$1.each(me.legendItems, function (legendItem, i) {\n var boxWidth = getBoxWidth(labelOpts, fontSize);\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width; // If too tall, go to new column\n\n if (i > 0 && currentColHeight + itemHeight > minSize.height - vPadding) {\n totalWidth += currentColWidth + labelOpts.padding;\n columnWidths.push(currentColWidth); // previous column width\n\n currentColWidth = 0;\n currentColHeight = 0;\n } // Get max width\n\n\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight; // Store the hitbox width and height here. Final position will be updated in `draw`\n\n hitboxes[i] = {\n left: 0,\n top: 0,\n width: itemWidth,\n height: fontSize\n };\n });\n totalWidth += currentColWidth;\n columnWidths.push(currentColWidth);\n minSize.width += totalWidth;\n }\n }\n\n me.width = minSize.width;\n me.height = minSize.height;\n },\n afterFit: noop$1,\n // Shared Methods\n isHorizontal: function isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n },\n // Actually draw the legend on the canvas\n draw: function draw() {\n var me = this;\n var opts = me.options;\n var labelOpts = opts.labels;\n var globalDefaults = core_defaults.global;\n var defaultColor = globalDefaults.defaultColor;\n var lineDefault = globalDefaults.elements.line;\n var legendWidth = me.width;\n var lineWidths = me.lineWidths;\n\n if (opts.display) {\n var ctx = me.ctx;\n var fontColor = valueOrDefault$d(labelOpts.fontColor, globalDefaults.defaultFontColor);\n\n var labelFont = helpers$1.options._parseFont(labelOpts);\n\n var fontSize = labelFont.size;\n var cursor; // Canvas setup\n\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.strokeStyle = fontColor; // for strikethrough effect\n\n ctx.fillStyle = fontColor; // render in correct colour\n\n ctx.font = labelFont.string;\n var boxWidth = getBoxWidth(labelOpts, fontSize);\n var hitboxes = me.legendHitBoxes; // current position\n\n var drawLegendBox = function drawLegendBox(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0) {\n return;\n } // Set the ctx for the box\n\n\n ctx.save();\n var lineWidth = valueOrDefault$d(legendItem.lineWidth, lineDefault.borderWidth);\n ctx.fillStyle = valueOrDefault$d(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault$d(legendItem.lineCap, lineDefault.borderCapStyle);\n ctx.lineDashOffset = valueOrDefault$d(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n ctx.lineJoin = valueOrDefault$d(legendItem.lineJoin, lineDefault.borderJoinStyle);\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault$d(legendItem.strokeStyle, defaultColor);\n\n if (ctx.setLineDash) {\n // IE 9 and 10 do not support line dash\n ctx.setLineDash(valueOrDefault$d(legendItem.lineDash, lineDefault.borderDash));\n }\n\n if (opts.labels && opts.labels.usePointStyle) {\n // Recalculate x and y for drawPoint() because its expecting\n // x and y to be center of figure (instead of top left)\n var radius = boxWidth * Math.SQRT2 / 2;\n var centerX = x + boxWidth / 2;\n var centerY = y + fontSize / 2; // Draw pointStyle as legend symbol\n\n helpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n } else {\n // Draw box as legend symbol\n if (lineWidth !== 0) {\n ctx.strokeRect(x, y, boxWidth, fontSize);\n }\n\n ctx.fillRect(x, y, boxWidth, fontSize);\n }\n\n ctx.restore();\n };\n\n var fillText = function fillText(x, y, legendItem, textWidth) {\n var halfFontSize = fontSize / 2;\n var xLeft = boxWidth + halfFontSize + x;\n var yMiddle = y + halfFontSize;\n ctx.fillText(legendItem.text, xLeft, yMiddle);\n\n if (legendItem.hidden) {\n // Strikethrough the text if hidden\n ctx.beginPath();\n ctx.lineWidth = 2;\n ctx.moveTo(xLeft, yMiddle);\n ctx.lineTo(xLeft + textWidth, yMiddle);\n ctx.stroke();\n }\n }; // Horizontal\n\n\n var isHorizontal = me.isHorizontal();\n\n if (isHorizontal) {\n cursor = {\n x: me.left + (legendWidth - lineWidths[0]) / 2 + labelOpts.padding,\n y: me.top + labelOpts.padding,\n line: 0\n };\n } else {\n cursor = {\n x: me.left + labelOpts.padding,\n y: me.top + labelOpts.padding,\n line: 0\n };\n }\n\n var itemHeight = fontSize + labelOpts.padding;\n helpers$1.each(me.legendItems, function (legendItem, i) {\n var textWidth = ctx.measureText(legendItem.text).width;\n var width = boxWidth + fontSize / 2 + textWidth;\n var x = cursor.x;\n var y = cursor.y; // Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\n // instead of me.right and me.bottom because me.width and me.height\n // may have been changed since me.minSize was calculated\n\n if (isHorizontal) {\n if (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\n y = cursor.y += itemHeight;\n cursor.line++;\n x = cursor.x = me.left + (legendWidth - lineWidths[cursor.line]) / 2 + labelOpts.padding;\n }\n } else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\n x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n y = cursor.y = me.top + labelOpts.padding;\n cursor.line++;\n }\n\n drawLegendBox(x, y, legendItem);\n hitboxes[i].left = x;\n hitboxes[i].top = y; // Fill the actual label\n\n fillText(x, y, legendItem, textWidth);\n\n if (isHorizontal) {\n cursor.x += width + labelOpts.padding;\n } else {\n cursor.y += itemHeight;\n }\n });\n }\n },\n\n /**\n * @private\n */\n _getLegendItemAt: function _getLegendItemAt(x, y) {\n var me = this;\n var i, hitBox, lh;\n\n if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n // See if we are touching one of the dataset boxes\n lh = me.legendHitBoxes;\n\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n // Touching an element\n return me.legendItems[i];\n }\n }\n }\n\n return null;\n },\n\n /**\n * Handle an event\n * @private\n * @param {IEvent} event - The event to handle\n */\n handleEvent: function handleEvent(e) {\n var me = this;\n var opts = me.options;\n var type = e.type === 'mouseup' ? 'click' : e.type;\n var hoveredItem;\n\n if (type === 'mousemove') {\n if (!opts.onHover && !opts.onLeave) {\n return;\n }\n } else if (type === 'click') {\n if (!opts.onClick) {\n return;\n }\n } else {\n return;\n } // Chart event already has relative position in it\n\n\n hoveredItem = me._getLegendItemAt(e.x, e.y);\n\n if (type === 'click') {\n if (hoveredItem && opts.onClick) {\n // use e.native for backwards compatibility\n opts.onClick.call(me, e.native, hoveredItem);\n }\n } else {\n if (opts.onLeave && hoveredItem !== me._hoveredItem) {\n if (me._hoveredItem) {\n opts.onLeave.call(me, e.native, me._hoveredItem);\n }\n\n me._hoveredItem = hoveredItem;\n }\n\n if (opts.onHover && hoveredItem) {\n // use e.native for backwards compatibility\n opts.onHover.call(me, e.native, hoveredItem);\n }\n }\n }\n });\n\n function createNewLegendAndAttach(chart, legendOpts) {\n var legend = new Legend({\n ctx: chart.ctx,\n options: legendOpts,\n chart: chart\n });\n core_layouts.configure(chart, legend, legendOpts);\n core_layouts.addBox(chart, legend);\n chart.legend = legend;\n }\n\n var plugin_legend = {\n id: 'legend',\n\n /**\n * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\n * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\n * the plugin, which one will be re-exposed in the chart.js file.\n * https://github.com/chartjs/Chart.js/pull/2640\n * @private\n */\n _element: Legend,\n beforeInit: function beforeInit(chart) {\n var legendOpts = chart.options.legend;\n\n if (legendOpts) {\n createNewLegendAndAttach(chart, legendOpts);\n }\n },\n beforeUpdate: function beforeUpdate(chart) {\n var legendOpts = chart.options.legend;\n var legend = chart.legend;\n\n if (legendOpts) {\n helpers$1.mergeIf(legendOpts, core_defaults.global.legend);\n\n if (legend) {\n core_layouts.configure(chart, legend, legendOpts);\n legend.options = legendOpts;\n } else {\n createNewLegendAndAttach(chart, legendOpts);\n }\n } else if (legend) {\n core_layouts.removeBox(chart, legend);\n delete chart.legend;\n }\n },\n afterEvent: function afterEvent(chart, e) {\n var legend = chart.legend;\n\n if (legend) {\n legend.handleEvent(e);\n }\n }\n };\n var noop$2 = helpers$1.noop;\n\n core_defaults._set('global', {\n title: {\n display: false,\n fontStyle: 'bold',\n fullWidth: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000 // by default greater than legend (1000) to be above\n\n }\n });\n /**\n * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n */\n\n\n var Title = core_element.extend({\n initialize: function initialize(config) {\n var me = this;\n helpers$1.extend(me, config); // Contains hit boxes for each dataset (in dataset order)\n\n me.legendHitBoxes = [];\n },\n // These methods are ordered by lifecycle. Utilities then follow.\n beforeUpdate: noop$2,\n update: function update(maxWidth, maxHeight, margins) {\n var me = this; // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n\n me.beforeUpdate(); // Absorb the master measurements\n\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me.margins = margins; // Dimensions\n\n me.beforeSetDimensions();\n me.setDimensions();\n me.afterSetDimensions(); // Labels\n\n me.beforeBuildLabels();\n me.buildLabels();\n me.afterBuildLabels(); // Fit\n\n me.beforeFit();\n me.fit();\n me.afterFit(); //\n\n me.afterUpdate();\n return me.minSize;\n },\n afterUpdate: noop$2,\n //\n beforeSetDimensions: noop$2,\n setDimensions: function setDimensions() {\n var me = this; // Set the unconstrained dimension before label rotation\n\n if (me.isHorizontal()) {\n // Reset position before calculating rotation\n me.width = me.maxWidth;\n me.left = 0;\n me.right = me.width;\n } else {\n me.height = me.maxHeight; // Reset position before calculating rotation\n\n me.top = 0;\n me.bottom = me.height;\n } // Reset padding\n\n\n me.paddingLeft = 0;\n me.paddingTop = 0;\n me.paddingRight = 0;\n me.paddingBottom = 0; // Reset minSize\n\n me.minSize = {\n width: 0,\n height: 0\n };\n },\n afterSetDimensions: noop$2,\n //\n beforeBuildLabels: noop$2,\n buildLabels: noop$2,\n afterBuildLabels: noop$2,\n //\n beforeFit: noop$2,\n fit: function fit() {\n var me = this;\n var opts = me.options;\n var display = opts.display;\n var minSize = me.minSize;\n var lineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\n\n var fontOpts = helpers$1.options._parseFont(opts);\n\n var textSize = display ? lineCount * fontOpts.lineHeight + opts.padding * 2 : 0;\n\n if (me.isHorizontal()) {\n minSize.width = me.maxWidth; // fill all the width\n\n minSize.height = textSize;\n } else {\n minSize.width = textSize;\n minSize.height = me.maxHeight; // fill all the height\n }\n\n me.width = minSize.width;\n me.height = minSize.height;\n },\n afterFit: noop$2,\n // Shared Methods\n isHorizontal: function isHorizontal() {\n var pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n },\n // Actually draw the title block on the canvas\n draw: function draw() {\n var me = this;\n var ctx = me.ctx;\n var opts = me.options;\n\n if (opts.display) {\n var fontOpts = helpers$1.options._parseFont(opts);\n\n var lineHeight = fontOpts.lineHeight;\n var offset = lineHeight / 2 + opts.padding;\n var rotation = 0;\n var top = me.top;\n var left = me.left;\n var bottom = me.bottom;\n var right = me.right;\n var maxWidth, titleX, titleY;\n ctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\n\n ctx.font = fontOpts.string; // Horizontal\n\n if (me.isHorizontal()) {\n titleX = left + (right - left) / 2; // midpoint of the width\n\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n titleX = opts.position === 'left' ? left + offset : right - offset;\n titleY = top + (bottom - top) / 2;\n maxWidth = bottom - top;\n rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n }\n\n ctx.save();\n ctx.translate(titleX, titleY);\n ctx.rotate(rotation);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n var text = opts.text;\n\n if (helpers$1.isArray(text)) {\n var y = 0;\n\n for (var i = 0; i < text.length; ++i) {\n ctx.fillText(text[i], 0, y, maxWidth);\n y += lineHeight;\n }\n } else {\n ctx.fillText(text, 0, 0, maxWidth);\n }\n\n ctx.restore();\n }\n }\n });\n\n function createNewTitleBlockAndAttach(chart, titleOpts) {\n var title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart: chart\n });\n core_layouts.configure(chart, title, titleOpts);\n core_layouts.addBox(chart, title);\n chart.titleBlock = title;\n }\n\n var plugin_title = {\n id: 'title',\n\n /**\n * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\n * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\n * the plugin, which one will be re-exposed in the chart.js file.\n * https://github.com/chartjs/Chart.js/pull/2640\n * @private\n */\n _element: Title,\n beforeInit: function beforeInit(chart) {\n var titleOpts = chart.options.title;\n\n if (titleOpts) {\n createNewTitleBlockAndAttach(chart, titleOpts);\n }\n },\n beforeUpdate: function beforeUpdate(chart) {\n var titleOpts = chart.options.title;\n var titleBlock = chart.titleBlock;\n\n if (titleOpts) {\n helpers$1.mergeIf(titleOpts, core_defaults.global.title);\n\n if (titleBlock) {\n core_layouts.configure(chart, titleBlock, titleOpts);\n titleBlock.options = titleOpts;\n } else {\n createNewTitleBlockAndAttach(chart, titleOpts);\n }\n } else if (titleBlock) {\n core_layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n }\n }\n };\n var plugins = {};\n var filler = plugin_filler;\n var legend = plugin_legend;\n var title = plugin_title;\n plugins.filler = filler;\n plugins.legend = legend;\n plugins.title = title;\n /**\n * @namespace Chart\n */\n\n core_controller.helpers = helpers$1; // @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\n\n core_helpers(core_controller);\n core_controller._adapters = core_adapters;\n core_controller.Animation = core_animation;\n core_controller.animationService = core_animations;\n core_controller.controllers = controllers;\n core_controller.DatasetController = core_datasetController;\n core_controller.defaults = core_defaults;\n core_controller.Element = core_element;\n core_controller.elements = elements;\n core_controller.Interaction = core_interaction;\n core_controller.layouts = core_layouts;\n core_controller.platform = platform;\n core_controller.plugins = core_plugins;\n core_controller.Scale = core_scale;\n core_controller.scaleService = core_scaleService;\n core_controller.Ticks = core_ticks;\n core_controller.Tooltip = core_tooltip; // Register built-in scales\n\n core_controller.helpers.each(scales, function (scale, type) {\n core_controller.scaleService.registerScaleType(type, scale, scale._defaults);\n }); // Load to register built-in adapters (as side effects)\n // Loading built-in plugins\n\n for (var k in plugins) {\n if (plugins.hasOwnProperty(k)) {\n core_controller.plugins.register(plugins[k]);\n }\n }\n\n core_controller.platform.initialize();\n var src = core_controller;\n\n if (typeof window !== 'undefined') {\n window.Chart = core_controller;\n } // DEPRECATIONS\n\n /**\n * Provided for backward compatibility, not available anymore\n * @namespace Chart.Chart\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n * @private\n */\n\n\n core_controller.Chart = core_controller;\n /**\n * Provided for backward compatibility, not available anymore\n * @namespace Chart.Legend\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\n\n core_controller.Legend = plugins.legend._element;\n /**\n * Provided for backward compatibility, not available anymore\n * @namespace Chart.Title\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\n\n core_controller.Title = plugins.title._element;\n /**\n * Provided for backward compatibility, use Chart.plugins instead\n * @namespace Chart.pluginService\n * @deprecated since version 2.1.5\n * @todo remove at version 3\n * @private\n */\n\n core_controller.pluginService = core_controller.plugins;\n /**\n * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\n * effect, instead simply create/register plugins via plain JavaScript objects.\n * @interface Chart.PluginBase\n * @deprecated since version 2.5.0\n * @todo remove at version 3\n * @private\n */\n\n core_controller.PluginBase = core_controller.Element.extend({});\n /**\n * Provided for backward compatibility, use Chart.helpers.canvas instead.\n * @namespace Chart.canvasHelpers\n * @deprecated since version 2.6.0\n * @todo remove at version 3\n * @private\n */\n\n core_controller.canvasHelpers = core_controller.helpers.canvas;\n /**\n * Provided for backward compatibility, use Chart.layouts instead.\n * @namespace Chart.layoutService\n * @deprecated since version 2.7.3\n * @todo remove at version 3\n * @private\n */\n\n core_controller.layoutService = core_controller.layouts;\n /**\n * Provided for backward compatibility, not available anymore.\n * @namespace Chart.LinearScaleBase\n * @deprecated since version 2.8\n * @todo remove at version 3\n * @private\n */\n\n core_controller.LinearScaleBase = scale_linearbase;\n /**\n * Provided for backward compatibility, instead we should create a new Chart\n * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\n * @deprecated since version 2.8.0\n * @todo remove at version 3\n */\n\n core_controller.helpers.each(['Bar', 'Bubble', 'Doughnut', 'Line', 'PolarArea', 'Radar', 'Scatter'], function (klass) {\n core_controller[klass] = function (ctx, cfg) {\n return new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\n type: klass.charAt(0).toLowerCase() + klass.slice(1)\n }));\n };\n });\n return src;\n});","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};"],"sourceRoot":""}